text:
#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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsMaxEvery_32f_I(const Npp32f * pSrc, Npp32f * pSrcDst, int nLength);

/**
 *
 * @} signal_min_every_or_max_every
 *
 */

/** @defgroup signal_sum Sum
 *
 * @{
 *
 */

 /**
 * Device scratch buffer size (in bytes) for nppsSum_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsSum_16s32s_Sfs(const Npp16s * pSrc, int nLength, Npp32s * pSum, int nScaleFactor,
                   Npp8u * pDeviceBuffer);

/** @} signal_sum */

/** @defgroup signal_max Maximum
 *
 * @{
 *
 */

/**
 * Device scratch buffer size (in bytes) for nppsMax_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsMaxAbsIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMaxAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** @} signal_max */

/** @defgroup signal_min Minimum
 *
 * @{
 *
 */

/**
 * Device scratch buffer size (in bytes) for nppsMin_16s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsMinAbsIndx_32s(const Npp32s * pSrc, int nLength, Npp32s * pMinAbs, int * pIndx, Npp8u * pDeviceBuffer);

/** @} signal_min */

/** @defgroup signal_mean Mean
 *
 * @{
 *
 */

/**
 * Device scratch buffer size (in bytes) for nppsMean_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
NppStatus
nppsMean_16sc_Sfs(const Npp16sc * pSrc, int nLength, Npp16sc * pMean, int nScaleFactor,
                 Npp8u * pDeviceBuffer);

/** @} signal_mean */

/** @defgroup signal_standard_deviation Standard Deviation
 *
 * @{
 *
 */

/**
 * Device scratch buffer size (in bytes) for nppsStdDev_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device scratch buffer size (in bytes) for nppsMeanStdDev_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size. Important: hpBufferSize is a
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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
 *        host pointer. \ref general_scratch_buffer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsMinMax_8u.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNorm_Inf_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNorm_L1_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNorm_L2_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNormDiff_Inf_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNormDiff_L1_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsNormDiff_L2_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsDotProd_32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsCountInRange_32s.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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
 *
 * @{
 *
 */

/**
 * Device-buffer size (in bytes) for nppsZeroCrossing_16s32f.
 * \param nLength \ref length_specification.
 * \param hpBufferSize Required buffer size.  Important:
 *        hpBufferSize is a host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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.
 * \return \ref signal_data_error_codes, \ref length_error_codes.
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
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 host pointer.
 * \return NPP_SUCCESS
 */
NppStatus
nppsAverageRelativeErrorGetBufferSize_64fc(int nLength,  int * hpBufferSize);
/** @} */

/** @} signal_statistical_functions */

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

#endif /* NV_NPPS_STATISTICS_FUNCTIONS_H */