Back to C-ASPT Contents Page
asptGrcpbfdaf32f
API Summary
API to create and delete asptGrcpbfdaf32f filters
- DT32S grcpbfdaf32fInit(asptGrcpbfdaf32f *grcpbfdaf,DT32S M,DT32S L,DT32S N,DT32F mu,DT32S cs,DT32S *ip,DT32F *w)
- DT32S grcpbfdaf32fInitStatic(asptGrcpbfdaf32f *grcpbfdaf,DT32S M,DT32S L,DT32S N,DT32F mu,DT32S cs,DT32F *pCof,DT32F *pDat,DT32S *ip,DT32F *w)
- void grcpbfdaf32fFree(asptGrcpbfdaf32f *grcpbfdaf)
API to filter and update asptGrcpbfdaf32f filters
API to retrieve the properties of asptGrcpbfdaf32f filters
- DT32S grcpbfdaf32fGetCoef(asptGrcpbfdaf32f *grcpbfdaf, DT32F *dstBuf, DT32S ind, DT32S N, DT32S flip)
- grcpbfdaf32fGetCoefPtr( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetFilterLength( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetBlockLength( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetFftLength( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetStepSize( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetConstrain( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetPartitions( asptGrcpbfdaf32f *grcpbfdaf )
- grcpbfdaf32fGetRatio( asptGrcpbfdaf32f *gpbfdaf )
API to set the properties of asptGrcpbfdaf32f filters
Description
Implements the Generalized Reduced Complexity Partitioned Block Frequency Domain Adaptive Filter (GRCPBFDAF). This version is more general than the RCPBFDAF in that the filter length is not restricted to be equal to the block length. The filter length must be a multiple integer of the block length.
Copyright
Copyright (c) DSP ALGORITHMS 2003; all rights reserved.
<< Back to top
grcpbfdaf32fInit
DT32S grcpbfdaf32fInit(asptGrcpbfdaf32f *grcpbfdaf,DT32S M,DT32S L,DT32S N,DT32F mu,DT32S cs,DT32S *ip,DT32F *w)
Initializes an asptGrcpbfdaf32f filter and allocates its necessary storage buffers - Returns :
-
Error code. On failure, the filterLength member of the filter is set to zero.
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter to be initialized
- M : number of filter coefficients per partition
- L : block length (number of new samples each block)
- N : number of partitions
- mu : step size.
- cs : constrained Flag. must be (N >= cs >= 0).
- cs : 0 will use unconstrained BFDAF
- cs : n will constrain n partitions every block.
- ip : fft bit reversal table
- w : fft twiddle factor table.
- Output Parameters :
- pbfdaf is initialized using the given input arguments.
- Error Conditions
- ASPT_NO_ERR : Initialization is successful
- ASPT_NULL_PTR_ERR : ip/w is a NULL pointer
- ASPT_RANGE_ERR : L/M/N/cs is not a valid input value
- ASPT_NO_MEM_ERR : could not allocate memory
<< Back to top
grcpbfdaf32fInitStatic
DT32S grcpbfdaf32fInitStatic(asptGrcpbfdaf32f *grcpbfdaf,DT32S M,DT32S L,DT32S N,DT32F mu,DT32S cs,DT32F *pCof,DT32F *pDat,DT32S *ip,DT32F *w)
Initializes an asptGrcpbfdaf32f filter to use pre-allocated memory blocks - Returns :
-
Error code. On failure, the filterLength member of the filter is set to zero.
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter to be initialized
- M : number of filter coefficients per partition
- L : block length (number of new samples each block)
- N : number of partitions
- mu : step size.
- cs : constrained Flag. must be (N >= cs >= 0).
- cs : 0 will use unconstrained BFDAF
- cs : n will constrain n partitions every block.
- pCof : pointer to a pre-allocated memory in program memory
of at least [N*fftLength] DT32F locations to be used for the filter coefficients.
- pDat : pointer to a pre-allocated memory in data memory of at least
[C1 + (G+2)*fftLength + (fftLength/2+1)] DT32F locations to be used for data storage.
- ip : fft bit reversal table
- w : fft twiddle factor table.
- Output Parameters :
- pbfdaf is initialized using the given input arguments.
- Error Conditions
- ASPT_NO_ERR : Initialization is successful
- ASPT_NULL_PTR_ERR : ip/w is a NULL pointer
- ASPT_RANGE_ERR : L/M/N/cs is not a valid input value
- ASPT_NO_MEM_ERR : could not allocate memory
- Remarks :
-
fftLength = 2^(nextpow2(L+M-1)). C1 = fftLength - blockLength. G = (N-1)*(M/L)+1
<< Back to top
grcpbfdaf32fFilterUpdate
DT32S grcpbfdaf32fFilterUpdate(asptGrcpbfdaf32f *grcpbfdaf, DT32F *inp, DT32F *des, DT32F *out, DT32F *err)
Calculates the filter output and updates the filter coefficients for the asptGrcpbfdaf32f filter.- Returns :
- Input Parameters :
- pbfdaf : asptGrcpbfdaf32f filter to be processed
- inp : pointer to the new block of input samples
- des : pointer to the new block of desired signal samples
- Output Parameters :
- out : pointer to an array to store the filter output samples
- err : pointer to store the error (des - out) samples.
- Error Conditions
- ASPT_NO_ERR : success
- ASPT_NULL_PTR_ERR : NULL pointer error
<< Back to top
grcpbfdaf32fFilterOnly
DT32S grcpbfdaf32fFilterOnly(asptGrcpbfdaf32f *grcpbfdaf, DT32F *inp, DT32F *out)
Calculates the filter output but does not update the filter coefficients for the asptGrcpbfdaf32f filter. It also updates the internal buffers and power estimate.- Returns :
- Input Parameters :
- pbfdaf : asptGrcpbfdaf32f filter to be processed
- inp : pointer to the new block of input samples
- Output Parameters :
- out : pointer to an array to store the filter output samples
- Error Conditions
- ASPT_NO_ERR : success
- ASPT_NULL_PTR_ERR : NULL pointer error
<< Back to top
grcpbfdaf32fFree
void grcpbfdaf32fFree(asptGrcpbfdaf32f *grcpbfdaf)
Frees the allocated memory for this asptGrcpbfdaf32f filter. - Returns :
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter
- Remarks :
-
Use this function only with filters created with pbfdaf32fInit(). Do not use with asptGrcpbfdaf32f filters created using pbfdaf32fInitStatic().
<< Back to top
grcpbfdaf32fReset
DT32S grcpbfdaf32fReset(asptGrcpbfdaf32f *grcpbfdaf)
Resets all filter coefficients to zero.- Returns :
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter to be reset.
- Error Conditions
- ASPT_NO_ERR : success
- ASPT_NULL_PTR_ERR : NULL pointer error
<< Back to top
grcpbfdaf32fResetDelayLine
DT32S grcpbfdaf32fResetDelayLine(asptGrcpbfdaf32f *grcpbfdaf)
Resets the internal delay line to zeros.- Returns :
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter to be reset.
- Error Conditions
- ASPT_NO_ERR : success
- ASPT_NULL_PTR_ERR : NULL pointer error
<< Back to top
grcpbfdaf32fGetCoef
DT32S grcpbfdaf32fGetCoef(asptGrcpbfdaf32f *grcpbfdaf, DT32F *dstBuf, DT32S ind, DT32S N, DT32S flip)
Copies N internal filter coefficients starting from coef[ind] to dstBuf. - Returns :
-
On success returns the number of coefficients copied, otherwise the error code (negative int).
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter.
- dstBuf : destination buffer.
- ind : index to the first coefficient to be copied.
- N : number of coefficients to be copied.
- flip : if not 0, will flip the coefficients order.
- Error Conditions
- ASPT_NULL_PTR_ERR : dstBuf/pbfdaf->wFreq is a NULL pointer
- ASPT_RANGE_ERR : ind/N is not a valid input value
<< Back to top
grcpbfdaf32fSetCoef
DT32S grcpbfdaf32fSetCoef(asptGrcpbfdaf32f *grcpbfdaf, DT32F *newCoef, DT32S ind, DT32S N, DT32S flip)
Initializes N internal (time domain) filter coefficients starting from coef[ind] to the contents of newCoef. - Returns :
-
On success returns the number of coefficients copied, otherwise the error code (negative int).
- Input Parameters :
- pbfdaf : pointer to asptGrcpbfdaf32f filter to be set.
- newCoef : new coefficients vector.
- ind : index to the first coefficient to be set.
- N : number of coefficients to be set.
- flip : if not 0, will copy the coefficients in reverse order.
- Error Conditions
- ASPT_NULL_PTR_ERR : newCoef/pbfdaf->wFreq is a NULL pointer
- ASPT_RANGE_ERR : ind/N is not a valid input value
<< Back to top
grcpbfdaf32fResize
DT32S grcpbfdaf32fResize(asptGrcpbfdaf32f *grcpbfdaf, DT32S newLen, DT32S newBlock, DT32S newPart)
Resizes an asptGrcpbfdaf32f filter keeping as much of the filter state as possible. - Returns :
- Input Parameters :
- pbfdaf : pointer to the asptGrcpbfdaf32f filter to be resized.
- newLen : required new filter length
- newBlock : new block length
- newPart : new number of partitions.
- Error Conditions
- ASPT_NO_ERR : Resizing is successful
- ASPT_NULL_PTR_ERR : NULL pointer error
- ASPT_RANGE_ERR : newLength/newBlock/newPart is not a valid input value
- ASPT_NO_MEM_ERR : Could not allocate the necessary filter storage
- Remarks :
-
Use this function only with dynamically allocated asptGrcpbfdaf32f filters.