FIRMR_Direct

Directly filters a source vector through a multi-rate FIR filter.

Syntax

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);

Parameters

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.

Description

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.

Return Values

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).

Submit feedback on this help topic

Copyright © 2000 - 2011, Intel Corporation. All rights reserved.