Directly filters a source vector through a multi-rate FIR filter.
Case 1: Not-in-place operation on integer samples
IppStatus ippsFIRMR32f_Direct_16s_Sfs(const Ipp16s* pSrc, Ipp16s* pDst, int numIters, const Ipp32f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64f_Direct_16s_Sfs(const Ipp16s* pSrc, Ipp16s* pDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64f_Direct_32s_Sfs(const Ipp32s* pSrc, Ipp32s* pDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32fc_Direct_16sc_Sfs(const Ipp16sc* pSrc, Ipp16sc* pDst, int numIters, const Ipp32fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64fc_Direct_16sc_Sfs(const Ipp16sc* pSrc, Ipp16sc* pDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64fc_Direct_32sc_Sfs(const Ipp32sc* pSrc, Ipp32sc* pDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32s_Direct_16s_Sfs(const Ipp16s* pSrc, Ipp16s* pDst, int numIters, const Ipp32s* pTaps, int tapsLen, int tapsFactor, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32sc_Direct_16sc_Sfs(const Ipp16sc* pSrc, Ipp16sc* pDst, int numIters, const Ipp32sc* pTaps, int tapsLen, int tapsFactor, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
Case 2: Not-in-place operation on floating point samples
IppStatus ippsFIRMR_Direct_32f(const Ipp32f* pSrc, Ipp32f* pDst, int numIters, const Ipp32f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32f* pDlyLine);
IppStatus ippsFIRMR64f_Direct_32f(const Ipp32f* pSrc, Ipp32f* pDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32f* pDlyLine);
IppStatus ippsFIRMR_Direct_64f(const Ipp64f* pSrc, Ipp64f* pDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp64f* pDlyLine);
IppStatus ippsFIRMR_Direct_32fc(const Ipp32fc* pSrc, Ipp32fc* pDst, int numIters, const Ipp32fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32fc* pDlyLine);
IppStatus ippsFIRMR64fc_Direct_32fc(const Ipp32fc* pSrc, Ipp32fc* pDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32fc* pDlyLine);
IppStatus ippsFIRMR_Direct_64fc(const Ipp64fc* pSrc, Ipp64fc* pDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp64fc* pDlyLine);
Case 3: In-place operation on integer samples
IppStatus ippsFIRMR32f_Direct_16s_ISfs(Ipp16s* pSrcDst, int numIters, const Ipp32f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64f_Direct_16s_ISfs(Ipp16s* pSrcDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64f_Direct_32s_ISfs(Ipp32s* pSrcDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32fc_Direct_16sc_ISfs(Ipp16sc* pSrcDst, int numIters, const Ipp32fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64fc_Direct_16sc_ISfs(Ipp16sc* pSrcDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR64fc_Direct_32sc_ISfs(Ipp32sc* pSrcDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32sc* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32s_Direct_16s_ISfs(Ipp16s* pSrcDst, int numIters, const Ipp32s* pTaps, int tapsLen, int tapsFactor, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16s* pDlyLine, int scaleFactor);
IppStatus ippsFIRMR32sc_Direct_16sc_ISfs(Ipp16sc* pSrcDst, int numIters, const Ipp32sc* pTaps, int tapsLen, int tapsFactor, int upFactor, int upPhase, int downFactor, int downPhase, Ipp16sc* pDlyLine, int scaleFactor);
Case 4: In-place operation on floating point samples
IppStatus ippsFIRMR_Direct_32f_I(Ipp32f* pSrcDst, int numIters, const Ipp32f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32f* pDlyLine);
IppStatus ippsFIRMR64f_Direct_32f_I(Ipp32f* pSrcDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32f* pDlyLine);
IppStatus ippsFIRMR_Direct_64f_I(Ipp64f* pSrcDst, int numIters, const Ipp64f* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp64f* pDlyLine);
IppStatus ippsFIRMR_Direct_32fc_I(Ipp32fc* pSrcDst, int numIters, const Ipp32fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32fc* pDlyLine);
IppStatus ippsFIRMR64fc_Direct_32fc_I(Ipp32fc* pSrcDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp32fc* pDlyLine);
IppStatus ippsFIRMR_Direct_64fc_I(Ipp64fc* pSrcDst, int numIters, const Ipp64fc* pTaps, int tapsLen, int upFactor, int upPhase, int downFactor, int downPhase, Ipp64fc* pDlyLine);
pSrc |
Pointer to the source vector. |
pDst |
Pointer to the destination vector. |
pSrcDst |
Pointer to the source and destination vector for the in-place operation. |
numIters |
Number of iterations associated with the number of samples to be filtered by the function. The (numIters * downFactor) elements of the source vector are filtered and the resulting (numIters * upFactor) samples are stored in the output array. |
pTaps |
Pointer to the array containing the tap values. The number of elements in the array is tapsLen. |
tapsLen |
Number of elements in the array containing the tap values. |
tapsFactor |
Scale factor for the integer taps. |
pDlyLine |
Pointer to the array containing the delay line values. The number of elements in the array is (tapsLen + upFactor - 1) / upFactor. |
upFactor |
Factor for upsampling the multi-rate signals. |
downFactor |
Factor for downsampling the multi-rate signals. |
upPhase |
Phase for upsampling the multi-rate signals. |
downPhase |
Phase for downsampling the multi-rate signals. |
scaleFactor |
Scale factor, refer to Integer Scaling. |
The function ippsFIRMR_Direct is declared in the ipps.h file. This function filters an source vector pSrc or pSrcDst through a multi-rate filter, and stores the resulting samples in pDst or pSrcDst, respectively. The values of filter coefficients (taps) are specified in the tapsLen-length array pTaps. To scale integer taps the tapsFactor value is used. The array pDlyLine specifies the delay line values. The input array contains (numIters*downFactor) samples, and the output array stores the resulting (numIters*upFactor) samples. The multi-rate filtering is considered as a sequence of three operations: upsampling, filtering with a single-rate FIR filter, and downsampling. The algorithm is implemented as a single operation including the above-mentioned three steps.
The parameter upFactor is the factor by which the filtered signal is internally upsampled (see description of the function ippsSampleUp for more details). That is, upFactor-1 zeros are inserted between each sample of the input signal.
The parameter upPhase is the parameter which determines where a non-zero sample lies within the upFactor-length block of upsampled input signal.
The parameter downFactor is the factor by which the FIR response obtained by filtering an upsampled input signal, is internally downsampled (see description of the function ippsSampleDown for more details). That is, downFactor-1 output samples are discarded from each downFactor-length output block of the upsampled filter response.
The parameter downPhase is the parameter which determines where non-discarded sample lies within a block of upsampled filter response. The length of the delay line array pDlyLine is defined as (tapsLen + upFactor - 1) / upFactor. The output of the integer sample is scaled according to scaleFactor and can be saturated.
ippStsNoErr |
Indicates no error. |
ippStsNullPtrErr |
Indicates an error when one of the specified pointers is NULL. |
ippStsFIRLenErr |
Indicates an error when tapsLen is less than or equal to 0. |
ippStsSizeErr |
Indicates an error when numIters is less than or equal to 0. |
ippStsFIRMRFactorErr |
Indicates an error when upFactor (downFactor) is less than or equal to 0. |
ippStsFIRMRPhaseErr |
Indicates an error when upPhase (downPhase) is negative, or greater than or equal to upFactor (downFactor). |
Copyright © 2000 - 2011, Intel Corporation. All rights reserved.