Overview
FIR filter with multi channel coefficients
Discussion
The FIR Module implements a direct convolution N-order Finite Impulse Response filter. The module operates on multiple channels with separate coefficients per channel. The filter coefficients are stored in the array, coeffs, in normal order. The size of the array is coeffsInc x numChannels. Coefficients length per channel, coeffsInc, is numTaps + 1 + ~rem(L, 2) and value at last location must be 0. This is needed for SIMD operations on SHARC processors To make coefficients pointer is even aligned per channel, coeffsInc is always even number. i.e. if the tap length argument L is even then coeffsInc = L + 2, otherwise coeffsInc = L + 1. If the L is even, user has to make sure that the last two locations per channel are zeros. The state variable array is of size (numTaps + blockSize + 3) x numChannels.
...
On the processors of 2159x where 2 FIR accelerators are available with dual SHARC+ cores, two FIR accelerators are used which further reduces the processing load of multiple channels with 4 channels can be processed in parallel with 1 channel processing in the core. i.e. the FIRA channels=numChannels-floor(numChannels/5). Please note that this module is not multi-core safe i.e. same module can not be used in Sharc1 and Sharc2 at the same time.
Type Definition
Code Block |
---|
typedef struct _ModuleFIRNChan { ModuleInstanceDescriptor instance; // Common Audio Weaver module instance structure INT32 numTaps; // Length of the filter. INT32 coeffsInc; // Length of the coefficient array per channel. INT32 stateIndex; // Index of the oldest state variable in the array of state variables. INT32 stateIndexAcc; // Index of the oldest state variable in the array of state variables, used for accelerators. FLOAT32* coeffs; // Filter coefficient array in normal order. The size of the array is (coeffsInc + 1) x numChannels. Each column contains the coefficients for a channel. FLOAT32* state; // State variable array. The size of the array equals stateLen * numChannels. void * hardware_specific_struct_pointer; // This is the internal TCB array used for ADI FIR accelerator } ModuleFIRNChanClass; |
Variables
Properties
Name | Type | Usage | isHidden | Default value | Range | Units |
numTaps | int | const | 0 | 31 | 1:1:5000 | samples |
coeffsInc | int | const | 1 | 32 | Unrestricted | |
stateIndex | int | state | 1 | 0 | Unrestricted | |
stateIndexAcc | int | state | 1 | 0 | Unrestricted | |
coeffs | float* | parameter | 0 | [32 x 1] | Unrestricted | |
state | float* | state | 1 | [66 x 1] | Unrestricted | |
hardware_specific_struct_pointer | void * | state | 1 | Unrestricted |
Pins
Input Pins
Name: in
Description: audio input
...
Sample rate range: Unrestricted
Complex support: Real
Output Pins
Name: out
Description: audio output
Data type: float
MATLAB Usage
File Name: firnchan_module.m
...