|
void | csky_fir_lattice_f32 (const csky_fir_lattice_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize) |
| 浮点FIR格型滤波器处理函数 更多...
|
|
void | csky_fir_lattice_init_f32 (csky_fir_lattice_instance_f32 *S, uint16_t numStages, float32_t *pCoeffs, float32_t *pState) |
| 浮点FIR格型滤波器初始化函数 更多...
|
|
void | csky_fir_lattice_init_q15 (csky_fir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pCoeffs, q15_t *pState) |
| Q15 FIR格型滤波器初始化函数 更多...
|
|
void | csky_fir_lattice_init_q31 (csky_fir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pCoeffs, q31_t *pState) |
| Q31 FIR格型滤波器初始化函数 更多...
|
|
void | csky_fir_lattice_q15 (const csky_fir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize) |
| Q15 FIR格型滤波器处理函数 更多...
|
|
void | csky_fir_lattice_q31 (const csky_fir_lattice_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize) |
| Q31 FIR格型滤波器处理函数 更多...
|
|
这些函数实现了Q15,Q31和浮点的有限冲激响应 (FIR) 格型滤波器. 格型滤波器使用在各种自适应滤波器应用。 滤波器结构是前馈的,并且净脉冲响应是有限长度。 函数以块为单位操作输入输出数据,每次调用滤波器函数处理 blockSize
个样本. pSrc
和 pDst
指向输入输出数组,数组包括 blockSize
个值.
- 算法:
有限冲激响应格型滤波器
实现了以下的差分方程:
f0[n] = g0[n] = x[n]
fm[n] = fm-1[n] + km * gm-1[n-1] for m = 1, 2, ...M
gm[n] = km * fm-1[n] + gm-1[n-1] for m = 1, 2, ...M
y[n] = fM[n]
pCoeffs
指向反射系数数组,数组大小是 numStages
. 反射系数保存的顺序如下:
{k1, k2, ..., kM}
其中 M 是阶段的序号。
pState
指向状态数组,数组的大小是 numStages
. 状态变量 (g 的值) 维持了之前的输入,按以下的顺序保存:
{g0[n], g1[n], g2[n] ...gM-1[n]}
状态变量在每个块数据处理后更新,系数不会被更新。
- 结构体实例
- 滤波器的系数和状态变量都保存在数据结构的实例中。 每个滤波器都必须有一个单独的结构体实例。 系数数组可能可以在几个实例之间共享,但是状态变量数组不能共享。 为支持的3种数据类型分别提供了不同的结构体实例声明。
- 初始化函数
- 为每种支持的数据类型都提供了一个相应的初始化函数。 初始化函数处理以下操作:
- 设置内部结构体字段的值
- 清零状态缓存中的值 如果手动初始化,而不调用初始化函数,需要指定结构体实例的以下字段: numStages, pCoeffs, pState. pState中的所有值置0.
- 是否使用初始化函数是可选的。 但是,使用了初始化函数,则不能将结构体实例放在常量数据段。 要将结构体实例放在常量数据段,则必须手动初始化结构体实例。 在静态初始化之前,要确保状态缓存中的值已经清零。 下面的代码,为3种不同的滤波器,静态的初始化了结构体实例。
*csky_fir_lattice_instance_f32 S = {numStages, pState, pCoeffs};
*csky_fir_lattice_instance_q31 S = {numStages, pState, pCoeffs};
*csky_fir_lattice_instance_q15 S = {numStages, pState, pCoeffs};
- 其中是
numStages
滤波器阶段的数量; pState
是状态缓存的地址; pCoeffs
是系数缓存的地址.
- 定点行为
- 使用定点FIR格型滤波器函数需要注意。 特别是要考虑,在每个函数内使用的累加器的溢出和饱和行为。 具体参考每个函数各自的文档和使用说明。
- 参数
-
[in] | *S | 指向浮点FIR格型结构体实例 |
[in] | *pSrc | 指向输入数据块 |
[out] | *pDst | 指向输出数据块 |
[in] | blockSize | 处理的样本数量 |
- 返回
- none.
- 参数
-
[in] | *S | 指向浮点FIR格型结构体实例 |
[in] | numStages | 滤波器阶段数量 |
[in] | *pCoeffs | 指向系数缓存 |
[in] | *pState | 指向状态缓存 |
- 返回
- none.
- 参数
-
[in] | *S | 指向Q15 FIR格型结构体实例 |
[in] | numStages | 滤波器阶段数量 |
[in] | *pCoeffs | 指向系数缓存 |
[in] | *pState | 指向状态缓存 |
- 返回
- none.
- 参数
-
[in] | *S | 指向Q31 FIR格型结构体实例 |
[in] | numStages | 滤波器阶段数量 |
[in] | *pCoeffs | 指向系数缓存 |
[in] | *pState | 指向状态缓存 |
- 返回
- none.
- 参数
-
[in] | *S | 指向Q15 FIR格型滤波器结构体实例 |
[in] | *pSrc | 指向输入数据块 |
[out] | *pDst | 指向输出数据块 |
[in] | blockSize | 处理的样本数量 |
- 返回
- none.
- 参数
-
[in] | *S | 指向Q31 FIR格型滤波器结构体实例 |
[in] | *pSrc | 指向输入数据块 |
[out] | *pDst | 指向输出数据块 |
[in] | blockSize | 处理的样本数量 |
- 返回
- none.
缩放和溢出行为: 为了防止溢出,输入信号必须缩小 2*log2(numStages) 个位.