对高通滤波这个黑盒子摸索了好几天,终于凑出一个结果。最终结果比较完美
cmsis
http://www.keil.cm/pack/doc/CMSIS/DSP/html/group__IIR__Lattice.html#gaed3b0230bb77439dc902daa625985e04
使用函数
arm_biquad_cascade_df1_init_f32
arm_biquad_cascade_df1_f32
注意:初始化函数只调用一次就好了
两者的通过 S变量相联系。
计算参数使用matlab。使用方法参考
https://blog.csdn.net/u012841414/article/details/78575476(建议先看这个)
https://wenku.baidu.com/view/81df58196529647d2628526d.html###(主要看这个)
我的采样频率为52.94kHz,截止频率100HZ。
返回的文件中参数为
SOS Matrix:
1 -2 1 1 -1.9908173006200298 0.99095752346161392
1 -2 1 1 -1.9781688956662464 0.97830822761981018
Scale Values:(缩放系数)
0.99544370602041088
0.98911928082151412
void arm_biquad_cascade_df1_init_f32(
arm_biquad_casd_df1_inst_f32 * S,
uint8_t numStages,(不太懂,看上面的例程,直接给了2)
float32_t * pCoeffs,
float32_t * pState);(不清楚感觉没什么用,可能就是开辟一个空间,放临时变量吧)
!!!重点
pCoeffs 是SOS有关但是不一样 把第三列或者第四列去掉(这里他们一样,我也不知道,理论上应该去哪一列,随便去了一列)第五列和第六列都*-1。如下
1 -2 1 1.9908173006200298 -0.99095752346161392
1 -2 1 1.9781688956662464 -0.97830822761981018
具体为什么我也不知道,乱凑出来的。
void arm_biquad_cascade_df1_f32(
const arm_biquad_casd_df1_inst_f32 * S,
float32_t * pSrc,(要滤波的信号)
float32_t * pDst,(滤波后的信号 算出来之后,还要乘一下缩放系数)
uint32_t blockSize(上面两个数组的大小));