【eBox生态圈】fir滤波器四模式,不用FDAtool计算,非常强大!

2019-12-15 11:00发布

本帖最后由 shentqlf 于 2017-8-18 11:31 编辑

eBox最新支持Fir滤波器,支持低通、高通、带通、带阻四种模式。

最重要的是他不需要FDAtool计算参数表。自带了参数的计算工具。而且支持多种窗体RECTANGULAR, BARTLETT, HANNING, HAMMING, BLACKMAN
首先要感谢:http://www.labbookpages.co.uk/audio/firWindowing.html
这个库真是太好用了,网上看了各种代码,都觉得不太好,从GitHub上找到了一份代码,顺便找到了那个愿网址,看到这个代码后觉得非常厉害!果断移植。

  1.    
  2.             int kaiserWindowLength;
  3.         float sampFreq = 1000;//采样率
  4.    
  5.         // Low and high pass filters
  6.         float transFreq1 = 20;
  7.         float transFreq2 = 70;

  8. //设定滤波器特性,0.01:ripple;10: transition band width;sampFreq:采样率
  9.     //该函数会根据前两个值得设定,计算出滤波器阶数。
  10.         fir.calculateKaiserParams(0.01, 10, sampFreq, &kaiserWindowLength, &beta);
  11. //根据生成的窗口长度,初始化一个自己想要的滤波器
  12. //        float *lpf = fir.create1TransSinc(kaiserWindowLength, transFreq1, sampFreq, LOW_PASS);
  13.         float *lpf = fir.create1TransSinc(kaiserWindowLength, transFreq1, sampFreq, HIGH_PASS);
  14. //        float *lpf = fir.create2TransSinc(kaiserWindowLength, transFreq1,transFreq2, sampFreq, BAND_PASS);
  15. //        float *lpf = fir.create2TransSinc(kaiserWindowLength, transFreq1,transFreq2, sampFreq, BAND_STOP);
  16.         float *lpf_kaiser = fir.createKaiserWindow(lpf, NULL, kaiserWindowLength, beta);
  17.     uart1.printf("kaiserWindowLength = %d ",kaiserWindowLength);
  18.     uart1.printf("beta = %d ",beta);
  19. //使用Kaiser Window数据设置滤波器的参数。
  20.     fir.set(lpf_kaiser,kaiserWindowLength);
复制代码

fir.calculateKaiserParams(0.01, 10, sampFreq, &kaiserWindowLength, &beta);
999999.png (96.38 KB, 下载次数: 0) 下载附件 2017-8-18 10:22 上传

eBox最新代码请关注:
eBox_STM32F1

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。