 /* Copyright 2010-2019 NVIDIA Corporation.  All rights reserved. 
  * 
  * NOTICE TO LICENSEE: 
  * 
  * The source code and/or documentation ("Licensed Deliverables") are 
  * subject to NVIDIA intellectual property rights under U.S. and 
  * international Copyright laws. 
  * 
  * The Licensed Deliverables contained herein are PROPRIETARY and 
  * CONFIDENTIAL to NVIDIA and are being provided under the terms and 
  * conditions of a form of NVIDIA software license agreement by and 
  * between NVIDIA and Licensee ("License Agreement") or electronically 
  * accepted by Licensee.  Notwithstanding any terms or conditions to 
  * the contrary in the License Agreement, reproduction or disclosure 
  * of the Licensed Deliverables to any third party without the express 
  * written consent of NVIDIA is prohibited. 
  * 
  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE 
  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE 
  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE 
  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. 
  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED 
  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, 
  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. 
  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE 
  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY 
  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY 
  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 
  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  * OF THESE LICENSED DELIVERABLES. 
  * 
  * U.S. Government End Users.  These Licensed Deliverables are a 
  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT 
  * 1995), consisting of "commercial computer software" and "commercial 
  * computer software documentation" as such terms are used in 48 
  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government 
  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and 
  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all 
  * U.S. Government End Users acquire the Licensed Deliverables with 
  * only those rights set forth herein. 
  * 
  * Any use of the Licensed Deliverables in individual and commercial 
  * software must include, in the user documentation and internal 
  * comments to the code, the above Disclaimer and U.S. Government End 
  * Users Notice. 
  */ 
#ifndef NV_NPPS_STATISTICS_FUNCTIONS_H
#define NV_NPPS_STATISTICS_FUNCTIONS_H
 
/**
 * \file npps_statistics_functions.h
 * NPP Signal Processing Functionality.
 */
 
#include "nppdefs.h"


#ifdef __cplusplus
extern "C" {
#endif


/** @defgroup signal_statistical_functions Statistical Functions
 *  @ingroup npps
 * Functions that provide global signal statistics like: sum, mean, standard
 * deviation, min, max, etc.
 *
 * @{
 *
 */

/** @defgroup signal_min_every_or_max_every MinEvery And MaxEvery Functions
 * Performs the min or max operation on the samples of a signal.
 *
 * @{  
 *
 */

/** 
 * 8-bit in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_8u_I_Ctx(const Npp8u * pSrc, Npp8u * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_8u_I(const Npp8u * pSrc, Npp8u * pSrcDst, int nLength);

/** 
 * 16-bit unsigned short integer in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_16u_I_Ctx(const Npp16u * pSrc, Npp16u * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_16u_I(const Npp16u * pSrc, Npp16u * pSrcDst, int nLength);

/** 
 * 16-bit signed short integer in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_16s_I_Ctx(const Npp16s * pSrc, Npp16s * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_16s_I(const Npp16s * pSrc, Npp16s * pSrcDst, int nLength);

/** 
 * 32-bit signed integer in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_32s_I_Ctx(const Npp32s * pSrc, Npp32s * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_32s_I(const Npp32s * pSrc, Npp32s * pSrcDst, int nLength);

/** 
 * 32-bit floating point in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_32f_I_Ctx(const Npp32f * pSrc, Npp32f * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_32f_I(const Npp32f * pSrc, Npp32f * pSrcDst, int nLength);

/** 
 * 64-bit floating point in place min value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinEvery_64f_I_Ctx(const Npp64f * pSrc, Npp64f * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinEvery_64f_I(const Npp64f * pSrc, Npp64f * pSrcDst, int nLength);

/** 
 * 8-bit in place max value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxEvery_8u_I_Ctx(const Npp8u * pSrc, Npp8u * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxEvery_8u_I(const Npp8u * pSrc, Npp8u * pSrcDst, int nLength);

/** 
 * 16-bit unsigned short integer in place max value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxEvery_16u_I_Ctx(const Npp16u * pSrc, Npp16u * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxEvery_16u_I(const Npp16u * pSrc, Npp16u * pSrcDst, int nLength);

/** 
 * 16-bit signed short integer in place max value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxEvery_16s_I_Ctx(const Npp16s * pSrc, Npp16s * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxEvery_16s_I(const Npp16s * pSrc, Npp16s * pSrcDst, int nLength);

/** 
 * 32-bit signed integer in place max value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxEvery_32s_I_Ctx(const Npp32s * pSrc, Npp32s * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxEvery_32s_I(const Npp32s * pSrc, Npp32s * pSrcDst, int nLength);

/** 
 * 32-bit floating point in place max value for each pair of elements.
 * \param pSrc \ref source_signal_pointer.
 * \param pSrcDst \ref in_place_signal_pointer.
 * \param nLength \ref length_specification.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxEvery_32f_I_Ctx(const Npp32f * pSrc, Npp32f * pSrcDst, int nLength, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxEvery_32f_I(const Npp32f * pSrc, Npp32f * pSrcDst, int nLength);

/** 
 *
 * @} signal_min_every_or_max_every
 *
 */

/** @defgroup signal_sum Sum
 * Performs the sum operation on the samples of a signal.
 * @{  
 *
 */
 
 /** 
 * Device scratch buffer size (in bytes) for nppsSum_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_32fc_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_32fc(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_64fc_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_64fc(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_16s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_16s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_16s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_16sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_16sc_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_16sc_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_16sc32sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_16sc32sc_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_16sc32sc_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsSum_32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_32s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);
 
NppStatus 
nppsSumGetBufferSize_32s_Sfs(int nLength, int * hpBufferSize /* host pointer */);
 
/** 
 * Device scratch buffer size (in bytes) for nppsSum_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsSumGetBufferSize_16s32s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsSumGetBufferSize_16s32s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 32-bit float vector sum method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pSum, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_32f(const Npp32f * pSrc, int nLength, Npp32f * pSum, Npp8u * pDeviceBuffer);

/** 
 * 32-bit float complex vector sum method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_32fc_Ctx(const Npp32fc * pSrc, int nLength, Npp32fc * pSum, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_32fc(const Npp32fc * pSrc, int nLength, Npp32fc * pSum, Npp8u * pDeviceBuffer);

/** 
 * 64-bit double vector sum method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pSum, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_64f(const Npp64f * pSrc, int nLength, Npp64f * pSum, Npp8u * pDeviceBuffer);

/** 
 * 64-bit double complex vector sum method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_64fc_Ctx(const Npp64fc * pSrc, int nLength, Npp64fc * pSum, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_64fc(const Npp64fc * pSrc, int nLength, Npp64fc * pSum, Npp8u * pDeviceBuffer);

/** 
 * 16-bit short vector sum with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_16s_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_16s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pSum, int nScaleFactor, 
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_16s_Sfs(const Npp16s * pSrc, int nLength, Npp16s * pSum, int nScaleFactor, 
                Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector sum with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_32s_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_32s_Sfs_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pSum, int nScaleFactor, 
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_32s_Sfs(const Npp32s * pSrc, int nLength, Npp32s * pSum, int nScaleFactor, 
                Npp8u * pDeviceBuffer);

/** 
 * 16-bit short complex vector sum with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_16sc_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_16sc_Sfs_Ctx(const Npp16sc * pSrc, int nLength, Npp16sc * pSum, int nScaleFactor, 
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_16sc_Sfs(const Npp16sc * pSrc, int nLength, Npp16sc * pSum, int nScaleFactor, 
                 Npp8u * pDeviceBuffer);

/** 
 * 16-bit short complex vector sum (32bit int complex) with integer scaling
 * method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_16sc32sc_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_16sc32sc_Sfs_Ctx(const Npp16sc * pSrc, int nLength, Npp32sc * pSum, int nScaleFactor, 
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_16sc32sc_Sfs(const Npp16sc * pSrc, int nLength, Npp32sc * pSum, int nScaleFactor, 
                     Npp8u * pDeviceBuffer);

/** 
 * 16-bit integer vector sum (32bit) with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pSum Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsSumGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsSum_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pSum, int nScaleFactor,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsSum_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pSum, int nScaleFactor,
                   Npp8u * pDeviceBuffer);

/** @} signal_sum */


/** @defgroup signal_max Maximum
 * Performs the maximum operation on the samples of a signal.
 * @{
 *
 */

/** 
 * Device scratch buffer size (in bytes) for nppsMax_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMax_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMax_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMax_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMax_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMax, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMax_16s(const Npp16s * pSrc, int nLength, Npp16s * pMax, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMax_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMax, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMax_32s(const Npp32s * pSrc, int nLength, Npp32s * pMax, Npp8u * pDeviceBuffer);

/** 
 * 32-bit float vector max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMax_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMax, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMax_32f(const Npp32f * pSrc, int nLength, Npp32f * pMax, Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMax_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMax, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMax_64f(const Npp64f * pSrc, int nLength, Npp64f * pMax, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxIndx_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxIndxGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndxGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxIndx_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxIndxGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndxGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxIndx_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxIndxGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndxGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxIndx_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxIndxGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndxGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector max index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxIndxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxIndx_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMax, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndx_16s(const Npp16s * pSrc, int nLength, Npp16s * pMax, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector max index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxIndxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxIndx_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMax, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMax, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit float vector max index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxIndxGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxIndx_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMax, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndx_32f(const Npp32f * pSrc, int nLength, Npp32f * pMax, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector max index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMax Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxIndxGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxIndx_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMax, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxIndx_64f(const Npp64f * pSrc, int nLength, Npp64f * pMax, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxAbs_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxAbsGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxAbs_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxAbsGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector max absolute method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMaxAbs Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxAbsGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxAbs_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMaxAbs, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbs_16s(const Npp16s * pSrc, int nLength, Npp16s * pMaxAbs, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector max absolute method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMaxAbs Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxAbsGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxAbs_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMaxAbs, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbs_32s(const Npp32s * pSrc, int nLength, Npp32s * pMaxAbs, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxAbsIndx_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxAbsIndxGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsIndxGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMaxAbsIndx_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMaxAbsIndxGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsIndxGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector max absolute index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMaxAbs Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxAbsIndxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxAbsIndx_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMaxAbs, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsIndx_16s(const Npp16s * pSrc, int nLength, Npp16s * pMaxAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector max absolute index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMaxAbs Pointer to the output result.
 * \param pIndx Pointer to the index value of the first maximum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaxAbsIndxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaxAbsIndx_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMaxAbs, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaxAbsIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMaxAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** @} signal_max */

/** @defgroup signal_min Minimum
 * Performs the minimum operation on the samples of a signal.
 * @{
 *
 */

/** 
 * Device scratch buffer size (in bytes) for nppsMin_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMin_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMin_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMin_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector min method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMin_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMin, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMin_16s(const Npp16s * pSrc, int nLength, Npp16s * pMin, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector min method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMin_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMin, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMin_32s(const Npp32s * pSrc, int nLength, Npp32s * pMin, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector min method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMin_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMin, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMin_32f(const Npp32f * pSrc, int nLength, Npp32f * pMin, Npp8u * pDeviceBuffer);

/** 
 * 64-bit integer vector min method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMin_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMin, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMin_64f(const Npp64f * pSrc, int nLength, Npp64f * pMin, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMinIndx_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinIndxGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndxGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMinIndx_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinIndxGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndxGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMinIndx_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinIndxGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndxGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMinIndx_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinIndxGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndxGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector min index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinIndxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinIndx_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMin, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndx_16s(const Npp16s * pSrc, int nLength, Npp16s * pMin, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector min index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinIndxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinIndx_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMin, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMin, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit float vector min index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinIndxGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinIndx_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMin, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndx_32f(const Npp32f * pSrc, int nLength, Npp32f * pMin, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector min index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinIndxGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinIndx_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMin, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinIndx_64f(const Npp64f * pSrc, int nLength, Npp64f * pMin, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMinAbs_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinAbsGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMinAbs_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinAbsGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector min absolute method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMinAbs Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinAbsGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinAbs_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMinAbs, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbs_16s(const Npp16s * pSrc, int nLength, Npp16s * pMinAbs, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector min absolute method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMinAbs Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinAbsGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinAbs_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMinAbs, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbs_32s(const Npp32s * pSrc, int nLength, Npp32s * pMinAbs, Npp8u * pDeviceBuffer);

/** 
 * Device scratch buffer size (in bytes) for nppsMinAbsIndx_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinAbsIndxGetBufferSize_16s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsIndxGetBufferSize_16s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMinAbsIndx_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMinAbsIndxGetBufferSize_32s_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsIndxGetBufferSize_32s(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 16-bit integer vector min absolute index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMinAbs Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinAbsIndxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinAbsIndx_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMinAbs, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsIndx_16s(const Npp16s * pSrc, int nLength, Npp16s * pMinAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector min absolute index method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMinAbs Pointer to the output result.
 * \param pIndx Pointer to the index value of the first minimum element.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinAbsIndxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinAbsIndx_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMinAbs, int * pIndx, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinAbsIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMinAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** @} signal_min */

/** @defgroup signal_mean Mean
 * Performs the mean operation on the samples of a signal.
 * @{
 *
 */

/** 
 * Device scratch buffer size (in bytes) for nppsMean_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_32fc_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_32fc(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_64fc_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_64fc(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_16s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_16s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_16s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_32s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_32s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMean_16sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanGetBufferSize_16sc_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanGetBufferSize_16sc_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 32-bit float vector mean method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMean, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_32f(const Npp32f * pSrc, int nLength, Npp32f * pMean, Npp8u * pDeviceBuffer);

/** 
 * 32-bit float complex vector mean method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_32fc_Ctx(const Npp32fc * pSrc, int nLength, Npp32fc * pMean, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_32fc(const Npp32fc * pSrc, int nLength, Npp32fc * pMean, Npp8u * pDeviceBuffer);

/** 
 * 64-bit double vector mean method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMean, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_64f(const Npp64f * pSrc, int nLength, Npp64f * pMean, Npp8u * pDeviceBuffer);

/** 
 * 64-bit double complex vector mean method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_64fc_Ctx(const Npp64fc * pSrc, int nLength, Npp64fc * pMean, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_64fc(const Npp64fc * pSrc, int nLength, Npp64fc * pMean, Npp8u * pDeviceBuffer);

/** 
 * 16-bit short vector mean with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_16s_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_16s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMean, int nScaleFactor, 
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_16s_Sfs(const Npp16s * pSrc, int nLength, Npp16s * pMean, int nScaleFactor, 
                 Npp8u * pDeviceBuffer);

/** 
 * 32-bit integer vector mean with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_32s_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_32s_Sfs_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMean, int nScaleFactor, 
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_32s_Sfs(const Npp32s * pSrc, int nLength, Npp32s * pMean, int nScaleFactor, 
                 Npp8u * pDeviceBuffer);

/** 
 * 16-bit short complex vector mean with integer scaling method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanGetBufferSize_16sc_Sfs to determine the minium number of bytes required.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMean_16sc_Sfs_Ctx(const Npp16sc * pSrc, int nLength, Npp16sc * pMean, int nScaleFactor, 
                      Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMean_16sc_Sfs(const Npp16sc * pSrc, int nLength, Npp16sc * pMean, int nScaleFactor, 
                  Npp8u * pDeviceBuffer);

/** @} signal_mean */

/** @defgroup signal_standard_deviation Standard Deviation
 * Calculates the standard deviation for the samples of a signal.
 * @{
 *
 */

/** 
 * Device scratch buffer size (in bytes) for nppsStdDev_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsStdDevGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDevGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsStdDev_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsStdDevGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDevGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsStdDev_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsStdDevGetBufferSize_16s32s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDevGetBufferSize_16s32s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsStdDev_16s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsStdDevGetBufferSize_16s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDevGetBufferSize_16s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 32-bit float vector standard deviation method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pStdDev Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsStdDevGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsStdDev_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pStdDev, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDev_32f(const Npp32f * pSrc, int nLength, Npp32f * pStdDev, Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector standard deviation method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pStdDev Pointer to the output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsStdDevGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsStdDev_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pStdDev, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDev_64f(const Npp64f * pSrc, int nLength, Npp64f * pStdDev, Npp8u * pDeviceBuffer);

/** 
 * 16-bit float vector standard deviation method (return value is 32-bit)
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pStdDev Pointer to the output result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsStdDevGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsStdDev_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pStdDev, int nScaleFactor, 
                          Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDev_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pStdDev, int nScaleFactor, 
                      Npp8u * pDeviceBuffer);

/** 
 * 16-bit float vector standard deviation method (return value is also 16-bit)
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pStdDev Pointer to the output result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsStdDevGetBufferSize_16s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsStdDev_16s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pStdDev, int nScaleFactor, 
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsStdDev_16s_Sfs(const Npp16s * pSrc, int nLength, Npp16s * pStdDev, int nScaleFactor, 
                   Npp8u * pDeviceBuffer);

/** @} signal_standard_deviation */

/** @defgroup signal_mean_and_standard_deviation Mean And Standard Deviation
 * Performs the mean and calculates the standard deviation for the samples of a signal.
 * @{
 *
 */

/** 
 * Device scratch buffer size (in bytes) for nppsMeanStdDev_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanStdDevGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDevGetBufferSize_32f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMeanStdDev_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanStdDevGetBufferSize_64f_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDevGetBufferSize_64f(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMeanStdDev_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanStdDevGetBufferSize_16s32s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDevGetBufferSize_16s32s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * Device scratch buffer size (in bytes) for nppsMeanStdDev_16s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a 
 *        <em>host pointer.</em> \ref general_scratch_buffer.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus 
nppsMeanStdDevGetBufferSize_16s_Sfs_Ctx(int nLength, int * hpBufferSize /* host pointer */, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDevGetBufferSize_16s_Sfs(int nLength, int * hpBufferSize /* host pointer */);

/** 
 * 32-bit float vector mean and standard deviation method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output mean value.
 * \param pStdDev Pointer to the output standard deviation value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanStdDevGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMeanStdDev_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMean, Npp32f * pStdDev, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDev_32f(const Npp32f * pSrc, int nLength, Npp32f * pMean, Npp32f * pStdDev, Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector mean and standard deviation method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output mean value.
 * \param pStdDev Pointer to the output standard deviation value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanStdDevGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMeanStdDev_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMean, Npp64f * pStdDev, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDev_64f(const Npp64f * pSrc, int nLength, Npp64f * pMean, Npp64f * pStdDev, Npp8u * pDeviceBuffer);

/** 
 * 16-bit float vector mean and standard deviation method (return values are 32-bit)
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output mean value.
 * \param pStdDev Pointer to the output standard deviation value.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanStdDevGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMeanStdDev_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pMean, Npp32s * pStdDev, int nScaleFactor, 
                              Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDev_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pMean, Npp32s * pStdDev, int nScaleFactor, 
                          Npp8u * pDeviceBuffer);

/** 
 * 16-bit float vector mean and standard deviation method (return values are also 16-bit)
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMean Pointer to the output mean value.
 * \param pStdDev Pointer to the output standard deviation value.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMeanStdDevGetBufferSize_16s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMeanStdDev_16s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMean, Npp16s * pStdDev, int nScaleFactor, 
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMeanStdDev_16s_Sfs(const Npp16s * pSrc, int nLength, Npp16s * pMean, Npp16s * pStdDev, int nScaleFactor, 
                       Npp8u * pDeviceBuffer);

/** @} signal_mean_and_standard_deviation */

/** @defgroup signal_min_max Minimum Maximum
 * Performs the maximum and the minimum operation on the samples of a signal.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsMinMax_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMax_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 8-bit char vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_8u_Ctx(const Npp8u * pSrc, int nLength, Npp8u * pMin, Npp8u * pMax, 
                  Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_8u(const Npp8u * pSrc, int nLength, Npp8u * pMin, Npp8u * pMax, 
              Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMin, Npp16s * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_16s(const Npp16s * pSrc, int nLength, Npp16s * pMin, Npp16s * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_16u_Ctx(const Npp16u * pSrc, int nLength, Npp16u * pMin, Npp16u * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_16u(const Npp16u * pSrc, int nLength, Npp16u * pMin, Npp16u * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned int vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_32u_Ctx(const Npp32u * pSrc, int nLength, Npp32u * pMin, Npp32u * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_32u(const Npp32u * pSrc, int nLength, Npp32u * pMin, Npp32u * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed int vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMin, Npp32s * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_32s(const Npp32s * pSrc, int nLength, Npp32s * pMin, Npp32s * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * 32-bit float vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMin, Npp32f * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_32f(const Npp32f * pSrc, int nLength, Npp32f * pMin, Npp32f * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * 64-bit double vector min and max method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMax Pointer to the max output result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMax_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMin, Npp64f * pMax, 
                   Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMax_64f(const Npp64f * pSrc, int nLength, Npp64f * pMin, Npp64f * pMax, 
               Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMinMaxIndx_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMinMaxIndxGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMinMaxIndxGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 8-bit char vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_8u_Ctx(const Npp8u * pSrc, int nLength, Npp8u * pMin, int * pMinIndx, Npp8u * pMax, int * pMaxIndx,
                      Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_8u(const Npp8u * pSrc, int nLength, Npp8u * pMin, int * pMinIndx, Npp8u * pMax, int * pMaxIndx,
                  Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_16s_Ctx(const Npp16s * pSrc, int nLength, Npp16s * pMin, int * pMinIndx, Npp16s * pMax, int * pMaxIndx,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_16s(const Npp16s * pSrc, int nLength, Npp16s * pMin, int * pMinIndx, Npp16s * pMax, int * pMaxIndx,
                   Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_16u_Ctx(const Npp16u * pSrc, int nLength, Npp16u * pMin, int * pMinIndx, Npp16u * pMax, int * pMaxIndx,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);
        
NppStatus 
nppsMinMaxIndx_16u(const Npp16u * pSrc, int nLength, Npp16u * pMin, int * pMinIndx, Npp16u * pMax, int * pMaxIndx,
                   Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed short vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_32s_Ctx(const Npp32s * pSrc, int nLength, Npp32s * pMin, int * pMinIndx, Npp32s * pMax, int * pMaxIndx,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMin, int * pMinIndx, Npp32s * pMax, int * pMaxIndx,
                   Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_32u_Ctx(const Npp32u * pSrc, int nLength, Npp32u * pMin, int * pMinIndx, Npp32u * pMax, int * pMaxIndx,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_32u(const Npp32u * pSrc, int nLength, Npp32u * pMin, int * pMinIndx, Npp32u * pMax, int * pMaxIndx,
                   Npp8u * pDeviceBuffer);

/** 
 * 32-bit float vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pMin, int * pMinIndx, Npp32f * pMax, int * pMaxIndx,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_32f(const Npp32f * pSrc, int nLength, Npp32f * pMin, int * pMinIndx, Npp32f * pMax, int * pMaxIndx,
                   Npp8u * pDeviceBuffer);

/** 
 * 64-bit float vector min and max with indices method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pMin Pointer to the min output result.
 * \param pMinIndx Pointer to the index of the first min value.
 * \param pMax Pointer to the max output result.
 * \param pMaxIndx Pointer to the index of the first max value.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMinMaxIndxGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMinMaxIndx_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pMin, int * pMinIndx, Npp64f * pMax, int * pMaxIndx, 
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMinMaxIndx_64f(const Npp64f * pSrc, int nLength, Npp64f * pMin, int * pMinIndx, Npp64f * pMax, int * pMaxIndx, 
                   Npp8u * pDeviceBuffer);

/** @} signal_min_max */

/** @defgroup signal_infinity_norm Infinity Norm
 * Performs the infinity norm on the samples of a signal.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float vector C norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pNorm,
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_32f(const Npp32f * pSrc, int nLength, Npp32f * pNorm,
                 Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float vector C norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_64f(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                 Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector C norm method, return value is 32-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_16s32f_Ctx(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_16s32f(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_32fc32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_32fc32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_32fc32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex vector C norm method, return value is 32-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_32fc32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_32fc32f_Ctx(const Npp32fc * pSrc, int nLength, Npp32f * pNorm,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_32fc32f(const Npp32fc * pSrc, int nLength, Npp32f * pNorm,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex vector C norm method, return value is 64-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_64fc64f_Ctx(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_64fc64f(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_Inf_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormInfGetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormInfGetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector C norm method, return value is 32-bit signed integer.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormInfGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_Inf_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_Inf_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                        Npp8u * pDeviceBuffer);

/** @} signal_infinity_norm */

/** @defgroup signal_L1_norm L1 Norm
 * Performs the L1 norm on the samples of a signal.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float vector L1 norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pNorm,
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_32f(const Npp32f * pSrc, int nLength, Npp32f * pNorm,
                Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float vector L1 norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_64f(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L1 norm method, return value is 32-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the L1 norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_16s32f_Ctx(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_16s32f(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                   Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_32fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_32fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_32fc64f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex vector L1 norm method, return value is 64-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_32fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_32fc64f_Ctx(const Npp32fc * pSrc, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_32fc64f(const Npp32fc * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex vector L1 norm method, return value is 64-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_64fc64f_Ctx(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_64fc64f(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L1 norm method, return value is 32-bit signed integer.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                       Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L1_16s64s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL1GetBufferSize_16s64s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL1GetBufferSize_16s64s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L1 norm method, return value is 64-bit signed integer.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL1GetBufferSize_16s64s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L1_16s64s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp64s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L1_16s64s_Sfs(const Npp16s * pSrc, int nLength, Npp64s * pNorm, int nScaleFactor,
                       Npp8u * pDeviceBuffer);

/** @} signal_L1_norm */

/** @defgroup signal_L2_norm L2 Norm
 * Performs the L2 norm on the samples of a signal.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float vector L2 norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pNorm, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_32f(const Npp32f * pSrc, int nLength, Npp32f * pNorm, Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float vector L2 norm method
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_64f_Ctx(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_64f(const Npp64f * pSrc, int nLength, Npp64f * pNorm,
                Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L2 norm method, return value is 32-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_16s32f_Ctx(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_16s32f(const Npp16s * pSrc, int nLength, Npp32f * pNorm,
                   Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_32fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_32fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_32fc64f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex vector L2 norm method, return value is 64-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_32fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_32fc64f_Ctx(const Npp32fc * pSrc, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_32fc64f(const Npp32fc * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex vector L2 norm method, return value is 64-bit float.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_64fc64f_Ctx(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_64fc64f(const Npp64fc * pSrc, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2GetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2GetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L2 norm method, return value is 32-bit signed integer.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2GetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2_16s32s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pNorm, int nScaleFactor,
                       Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNorm_L2Sqr_16s64s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormL2SqrGetBufferSize_16s64s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormL2SqrGetBufferSize_16s64s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer vector L2 Square norm method, return value is 64-bit signed integer.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormL2SqrGetBufferSize_16s64s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNorm_L2Sqr_16s64s_Sfs_Ctx(const Npp16s * pSrc, int nLength, Npp64s * pNorm, int nScaleFactor,
                              Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNorm_L2Sqr_16s64s_Sfs(const Npp16s * pSrc, int nLength, Npp64s * pNorm, int nScaleFactor,
                          Npp8u * pDeviceBuffer);

/** @} signal_L2_norm */

/** @defgroup signal_infinity_norm_diff Infinity Norm Diff
 * Performs the infinity norm on the samples of two input signals' difference.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float C norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float C norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer C norm method on two vectors' difference, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_16s32f_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_16s32f(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_32fc32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_32fc32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_32fc32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex C norm method on two vectors' difference, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_32fc32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_32fc32f_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32f * pNorm,
                             Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_32fc32f(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32f * pNorm,
                         Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex C norm method on two vectors' difference, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_64fc64f_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                             Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_64fc64f(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                         Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffInfGetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffInfGetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer C norm method on two vectors' difference, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffInfGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_Inf_16s32s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                                Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_Inf_16s32s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                            Npp8u * pDeviceBuffer);

/** @} signal_infinity_norm_diff */

/** @defgroup signal_L1_norm_diff L1 Norm Diff
 * Performs the L1 norm on the samples of two input signals' difference.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float L1 norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float L1 norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L1 norm method on two vectors' difference, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the L1 norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_16s32f_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_16s32f(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                       Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_32fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_32fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_32fc64f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex L1 norm method on two vectors' difference, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_32fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_32fc64f_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pNorm,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_32fc64f(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex L1 norm method on two vectors' difference, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_64fc64f_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_64fc64f(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L1 norm method on two vectors' difference, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer..
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_16s32s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                               Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_16s32s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L1_16s64s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL1GetBufferSize_16s64s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL1GetBufferSize_16s64s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L1 norm method on two vectors' difference, return value is 64-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL1GetBufferSize_16s64s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L1_16s64s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pNorm, int nScaleFactor,
                               Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L1_16s64s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer);

/** @} signal_L1_norm_diff */

/** @defgroup signal_L2_norm_diff L2 Norm Diff
 * Performs the L2 norm on the samples of two input signals' difference.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float L2 norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float L2 norm method on two vectors' difference
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pNorm,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L2 norm method on two vectors' difference, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_16s32f_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_16s32f(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pNorm,
                       Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_32fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_32fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_32fc64f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex L2 norm method on two vectors' difference, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_32fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_32fc64f_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pNorm,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_32fc64f(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_64fc64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_64fc64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_64fc64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex L2 norm method on two vectors' difference, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_64fc64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_64fc64f_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_64fc64f(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pNorm,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2GetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2GetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L2 norm method on two vectors' difference, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2GetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2_16s32s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                               Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2_16s32s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pNorm, int nScaleFactor,
                           Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsNormDiff_L2Sqr_16s64s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsNormDiffL2SqrGetBufferSize_16s64s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsNormDiffL2SqrGetBufferSize_16s64s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer L2 Square norm method on two vectors' difference, return value is 64-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pNorm Pointer to the norm result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsNormDiffL2SqrGetBufferSize_16s64s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsNormDiff_L2Sqr_16s64s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pNorm, int nScaleFactor,
                                  Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsNormDiff_L2Sqr_16s64s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pNorm, int nScaleFactor,
                              Npp8u * pDeviceBuffer);

/** @} signal_l2_norm_diff */

/** @defgroup signal_dot_product Dot Product
 * Performs the dot product operation on the samples of two input signals.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float dot product method, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pDp,
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp32f * pDp,
                Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32fc(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex dot product method, return value is 32-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32fc * pDp,
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32fc * pDp,
                 Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32f32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32f32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32f32fc(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float and 32-bit float complex dot product method, return value is 32-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32f32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32f32fc_Ctx(const Npp32f * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32fc * pDp,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32f32fc(const Npp32f * pSrc1, const Npp32fc * pSrc2, int nLength, Npp32fc * pDp,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32f64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32f64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32f64f(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float dot product method, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32f64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32f64f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDp,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32f64f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDp,
                   Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32fc64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32fc64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32fc64fc(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float complex dot product method, return value is 64-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32fc64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32fc64fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64fc * pDp,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32fc64fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64fc * pDp,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32f32fc64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32f32fc64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32f32fc64fc(int nLength,  int * hpBufferSize);

/** 
 * 32-bit float and 32-bit float complex dot product method, return value is 64-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32f32fc64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32f32fc64fc_Ctx(const Npp32f * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64fc * pDp,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32f32fc64fc(const Npp32f * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64fc * pDp,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float dot product method, return value is 64-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDp,
                    Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDp,
                Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_64fc(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float complex dot product method, return value is 64-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_64fc_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64fc * pDp,
                     Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_64fc(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64fc * pDp,
                 Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_64f64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_64f64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_64f64fc(int nLength,  int * hpBufferSize);

/** 
 * 64-bit float and 64-bit float complex dot product method, return value is 64-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_64f64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_64f64fc_Ctx(const Npp64f * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64fc * pDp,
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_64f64fc(const Npp64f * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64fc * pDp,
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s64s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s64s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s64s(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer dot product method, return value is 64-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s64s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s64s_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pDp,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s64s(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64s * pDp,
                   Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16sc64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16sc64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16sc64sc(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer complex dot product method, return value is 64-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16sc64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16sc64sc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64sc * pDp,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16sc64sc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64sc * pDp,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s16sc64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s16sc64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s16sc64sc(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer and 16-bit signed short integer short dot product method, return value is 64-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s16sc64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s16sc64sc_Ctx(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64sc * pDp,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s16sc64sc(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64sc * pDp,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s32f(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer dot product method, return value is 32-bit float.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s32f_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pDp,
                       Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s32f(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32f * pDp,
                   Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16sc32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16sc32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16sc32fc(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer complex dot product method, return value is 32-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16sc32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16sc32fc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32fc * pDp,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16sc32fc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32fc * pDp,
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s16sc32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s16sc32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s16sc32fc(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer and 16-bit signed short integer complex dot product method, return value is 32-bit float complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s16sc32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s16sc32fc_Ctx(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32fc * pDp,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s16sc32fc(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32fc * pDp,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer dot product method, return value is 16-bit signed short integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp16s * pDp, int nScaleFactor, 
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp16s * pDp, int nScaleFactor, 
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer complex dot product method, return value is 16-bit signed short integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16sc_Sfs_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp16sc * pDp, int nScaleFactor, 
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16sc_Sfs(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp16sc * pDp, int nScaleFactor, 
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 32-bit signed integer dot product method, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32s_Sfs_Ctx(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                        Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32s_Sfs(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                    Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 32-bit signed integer complex dot product method, return value is 32-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32sc_Sfs_Ctx(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32sc_Sfs(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                     Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer dot product method, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result. 
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s32s_Sfs_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                           Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s32s_Sfs(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                       Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s16sc32sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s16sc32sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s16sc32sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer and 16-bit signed short integer complex dot product method, return value is 32-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s16sc32sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s16sc32sc_Sfs_Ctx(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                                Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s16sc32sc_Sfs(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                            Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s32s32s_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s32s32s_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s32s32s_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer and 32-bit signed integer dot product method, return value is 32-bit signed integer.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s32s32s_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s32s32s_Sfs_Ctx(const Npp16s * pSrc1, const Npp32s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                              Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s32s32s_Sfs(const Npp16s * pSrc1, const Npp32s * pSrc2, int nLength, Npp32s * pDp, int nScaleFactor, 
                          Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16s16sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16s16sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16s16sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer and 16-bit signed short integer complex dot product method, return value is 16-bit signed short integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16s16sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16s16sc_Sfs_Ctx(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp16sc * pDp, int nScaleFactor, 
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16s16sc_Sfs(const Npp16s * pSrc1, const Npp16sc * pSrc2, int nLength, Npp16sc * pDp, int nScaleFactor, 
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_16sc32sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_16sc32sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_16sc32sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 16-bit signed short integer complex dot product method, return value is 32-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_16sc32sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_16sc32sc_Sfs_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                             Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_16sc32sc_Sfs(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                         Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsDotProd_32s32sc_Sfs.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsDotProdGetBufferSize_32s32sc_Sfs_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsDotProdGetBufferSize_32s32sc_Sfs(int nLength,  int * hpBufferSize);

/** 
 * 32-bit signed short integer and 32-bit signed short integer complex dot product method, return value is 32-bit signed integer complex.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDp Pointer to the dot product result.
 * \param nScaleFactor \ref integer_result_scaling.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsDotProdGetBufferSize_32s32sc_Sfs to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsDotProd_32s32sc_Sfs_Ctx(const Npp32s * pSrc1, const Npp32sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsDotProd_32s32sc_Sfs(const Npp32s * pSrc1, const Npp32sc * pSrc2, int nLength, Npp32sc * pDp, int nScaleFactor, 
                        Npp8u * pDeviceBuffer);

/** @} signal_dot_product */

/** @defgroup signal_count_in_range Count In Range
 * Calculates the number of elements from specified range in the samples of a signal.
 * @{
 *
 */

/** 
 * Device-buffer size (in bytes) for nppsCountInRange_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsCountInRangeGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsCountInRangeGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Computes the number of elements whose values fall into the specified range on a 32-bit signed integer array.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pCounts Pointer to the number of elements.
 * \param nLowerBound Lower bound of the specified range.
 * \param nUpperBound Upper bound of the specified range.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsCountInRangeGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsCountInRange_32s_Ctx(const Npp32s * pSrc, int nLength, int * pCounts, Npp32s nLowerBound, Npp32s nUpperBound,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus
nppsCountInRange_32s(const Npp32s * pSrc, int nLength, int * pCounts, Npp32s nLowerBound, Npp32s nUpperBound,
                     Npp8u * pDeviceBuffer);

/** @} signal_count_in_range */

/** @defgroup signal_count_zero_crossings Count Zero Crossings
 *
 * @{
 * Calculates the number of zero crossings in a signal.
 */

/** 
 * Device-buffer size (in bytes) for nppsZeroCrossing_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsZeroCrossingGetBufferSize_16s32f_Ctx(int nLength, int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsZeroCrossingGetBufferSize_16s32f(int nLength, int * hpBufferSize);

/** 
 * 16-bit signed short integer zero crossing method, return value is 32-bit floating point.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pValZC Pointer to the output result.
 * \param tZCType Type of the zero crossing measure: nppZCR, nppZCXor or nppZCC.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsZeroCrossingGetBufferSize_16s32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsZeroCrossing_16s32f_Ctx(const Npp16s * pSrc, int nLength, Npp32f * pValZC, NppsZCType tZCType,
                            Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus
nppsZeroCrossing_16s32f(const Npp16s * pSrc, int nLength, Npp32f * pValZC, NppsZCType tZCType,
                        Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsZeroCrossing_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsZeroCrossingGetBufferSize_32f_Ctx(int nLength, int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsZeroCrossingGetBufferSize_32f(int nLength, int * hpBufferSize);

/** 
 * 32-bit floating-point zero crossing method, return value is 32-bit floating point.
 * \param pSrc \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pValZC Pointer to the output result.
 * \param tZCType Type of the zero crossing measure: nppZCR, nppZCXor or nppZCC.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsZeroCrossingGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsZeroCrossing_32f_Ctx(const Npp32f * pSrc, int nLength, Npp32f * pValZC, NppsZCType tZCType,
                         Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus
nppsZeroCrossing_32f(const Npp32f * pSrc, int nLength, Npp32f * pValZC, NppsZCType tZCType,
                     Npp8u * pDeviceBuffer);

/** @} signal_count_zero_crossings */

/** @defgroup signal_maximum_error MaximumError
 * Primitives for computing the maximum error between two signals.
 * Given two signals \f$pSrc1\f$ and \f$pSrc2\f$ both with length \f$N\f$, 
 * the maximum error is defined as the largest absolute difference between the corresponding
 * elements of two signals.
 *
 * If the signal is in complex format, the absolute value of the complex number is used.
 * @{
 *
 */
/** 
 * 8-bit unsigned char maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_8u_Ctx(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_8u(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 8-bit signed char maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_8s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_8s_Ctx(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_8s(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_16u_Ctx(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_16u(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_16s_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_16s(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short complex integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_16sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_16sc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_16sc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_32u_Ctx(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_32u(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed short integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_32s_Ctx(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_32s(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short complex integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_32sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_32sc_Ctx(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_32sc(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit signed short integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_64s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_64s_Ctx(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_64s(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit unsigned short complex integer maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_64sc_Ctx(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_64sc(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point complex maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_32fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_32fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point complex maximum method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumErrorGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumError_64fc_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumError_64fc(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_8s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_8s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_8s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_16sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_16sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_16sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_32sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_32sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_32sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_64s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_64s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_64s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_64sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_32fc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumError_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumErrorGetBufferSize_64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumErrorGetBufferSize_64fc(int nLength,  int * hpBufferSize);

/** @} */

/** @defgroup signal_average_error AverageError
 * Primitives for computing the Average error between two signals.
 * Given two signals \f$pSrc1\f$ and \f$pSrc2\f$ both with length \f$N\f$, 
 * the average error is defined as
 * \f[Average Error = \frac{1}{N}\sum_{n=0}^{N-1}\left|pSrc1(n) - pSrc2(n)\right|\f]
 *
 * If the signal is in complex format, the absolute value of the complex number is used.
 * @{
 *
 */
/** 
 * 8-bit unsigned char Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_8u_Ctx(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_8u(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 8-bit signed char Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_8s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_8s_Ctx(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_8s(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_16u_Ctx(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_16u(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_16s_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_16s(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short complex integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_16sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_16sc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_16sc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_32u_Ctx(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_32u(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed short integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_32s_Ctx(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_32s(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short complex integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_32sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_32sc_Ctx(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_32sc(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit signed short integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_64s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_64s_Ctx(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_64s(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit unsigned short complex integer Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_64sc_Ctx(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_64sc(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point complex Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_32fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_32fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point complex Average method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageErrorGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageError_64fc_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageError_64fc(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_8s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_8s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_8s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_16sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_16sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_16sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_32sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_32sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_32sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_64s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_64s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_64s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_64sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_32fc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageError_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageErrorGetBufferSize_64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageErrorGetBufferSize_64fc(int nLength,  int * hpBufferSize);

/** @} */

/** @defgroup signal_maximum_relative_error MaximumRelativeError
 * Primitives for computing the MaximumRelative error between two signals.
 * Given two signals \f$pSrc1\f$ and \f$pSrc2\f$ both with length \f$N\f$, 
 * the maximum relative error is defined as
 * \f[MaximumRelativeError = max{\frac{\left|pSrc1(n) - pSrc2(n)\right|}{max(\left|pSrc1(n)\right|, \left|pSrc2(n)\right|)}}\f]
 *
 * If the signal is in complex format, the absolute value of the complex number is used.
 * @{
 *
 */
/** 
 * 8-bit unsigned char MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_8u_Ctx(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_8u(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 8-bit signed char MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_8s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_8s_Ctx(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_8s(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_16u_Ctx(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_16u(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_16s_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_16s(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short complex integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_16sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_16sc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_16sc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_32u_Ctx(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_32u(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed short integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_32s_Ctx(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_32s(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short complex integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_32sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_32sc_Ctx(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_32sc(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit signed short integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_64s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_64s_Ctx(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_64s(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit unsigned short complex integer MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_64sc_Ctx(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_64sc(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point complex MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_32fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_32fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point complex MaximumRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsMaximumRelativeErrorGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsMaximumRelativeError_64fc_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsMaximumRelativeError_64fc(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_8s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_8s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_8s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_16sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_16sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_16sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_32sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_32sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_32sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_64s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_64s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_64s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_64sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_32fc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsMaximumRelativeError_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsMaximumRelativeErrorGetBufferSize_64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsMaximumRelativeErrorGetBufferSize_64fc(int nLength,  int * hpBufferSize);

/** @} */

/** @defgroup signal_average_relative_error AverageRelativeError
 * Primitives for computing the AverageRelative error between two signals.
 * Given two signals \f$pSrc1\f$ and \f$pSrc2\f$ both with length \f$N\f$, 
 * the average relative error is defined as
 * \f[AverageRelativeError = \frac{1}{N}\sum_{n=0}^{N-1}\frac{\left|pSrc1(n) - pSrc2(n)\right|}{max(\left|pSrc1(n)\right|, \left|pSrc2(n)\right|)}\f]
 *
 * If the signal is in complex format, the absolute value of the complex number is used.
 * @{
 *
 */
/** 
 * 8-bit unsigned char AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_8u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_8u_Ctx(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_8u(const Npp8u * pSrc1, const Npp8u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 8-bit signed char AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_8s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_8s_Ctx(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_8s(const Npp8s * pSrc1, const Npp8s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_16u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_16u_Ctx(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_16u(const Npp16u * pSrc1, const Npp16u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit signed short integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_16s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_16s_Ctx(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_16s(const Npp16s * pSrc1, const Npp16s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 16-bit unsigned short complex integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_16sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_16sc_Ctx(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_16sc(const Npp16sc * pSrc1, const Npp16sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_32u to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_32u_Ctx(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_32u(const Npp32u * pSrc1, const Npp32u * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit signed short integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_32s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_32s_Ctx(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_32s(const Npp32s * pSrc1, const Npp32s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit unsigned short complex integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_32sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_32sc_Ctx(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_32sc(const Npp32sc * pSrc1, const Npp32sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit signed short integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_64s to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_64s_Ctx(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_64s(const Npp64s * pSrc1, const Npp64s * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit unsigned short complex integer AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_64sc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_64sc_Ctx(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_64sc(const Npp64sc * pSrc1, const Npp64sc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_32f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_32f_Ctx(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_32f(const Npp32f * pSrc1, const Npp32f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 32-bit floating point complex AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_32fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_32fc_Ctx(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_32fc(const Npp32fc * pSrc1, const Npp32fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_64f to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_64f_Ctx(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_64f(const Npp64f * pSrc1, const Npp64f * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * 64-bit floating point complex AverageRelative method.
 * \param pSrc1 \ref source_signal_pointer.
 * \param pSrc2 \ref source_signal_pointer.
 * \param nLength \ref length_specification.
 * \param pDst Pointer to the error result.
 * \param pDeviceBuffer Pointer to the required device memory allocation, \ref general_scratch_buffer. 
 *        Use \ref nppsAverageRelativeErrorGetBufferSize_64fc to determine the minium number of bytes required.
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus 
nppsAverageRelativeError_64fc_Ctx(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer, NppStreamContext nppStreamCtx);

NppStatus 
nppsAverageRelativeError_64fc(const Npp64fc * pSrc1, const Npp64fc * pSrc2, int nLength, Npp64f * pDst, Npp8u * pDeviceBuffer);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_8u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_8u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_8s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_8s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_8s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_16u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_16u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_16u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_16s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_16s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_16sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_16sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_16sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_32u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_32u_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_32u(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_32s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_32s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_32sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_32sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_32sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_64s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_64s_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_64s(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_64sc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_64sc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_64sc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_32f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_32f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_32fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_32fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_32fc(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_64f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_64f_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_64f(int nLength,  int * hpBufferSize);

/** 
 * Device-buffer size (in bytes) for nppsAverageRelativeError_64fc.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important: 
 *        hpBufferSize is a <em>host pointer.</em>
 * \param nppStreamCtx \ref application_managed_stream_context. 
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_64fc_Ctx(int nLength,  int * hpBufferSize, NppStreamContext nppStreamCtx);

NppStatus
nppsAverageRelativeErrorGetBufferSize_64fc(int nLength,  int * hpBufferSize);

/** @} */


/** @} signal_statistical_functions */

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* NV_NPPS_STATISTICS_FUNCTIONS_H */
