使用ARM的cmsis-dsp库进行高通滤波过程

对高通滤波这个黑盒子摸索了好几天,终于凑出一个结果。最终结果比较完美

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变量相联系。

扫描二维码关注公众号,回复: 3172047 查看本文章

计算参数使用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(上面两个数组的大小));

猜你喜欢

转载自blog.csdn.net/dss875914213/article/details/81989096