DSP

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

2019-07-13 09:47发布

对高通滤波这个黑盒子摸索了好几天,终于凑出一个结果。最终结果比较完美   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(上面两个数组的大小));