频域滤波的C//C++软件化实现

电子说

1.2w人已加入

描述

概述

前段时间用matlab仿真了一波基于FFT卷积的频域FIR滤波器,比如采样率12MHz,需要做一个如下图所示的500KHz低通滤波器(带外抑制仅60dBc),滤波器的阶数为326阶,以XC7K325T的DSP资源数约840作为参考,在12MHz的时钟下只能实现5个这样的滤波器,在采用高频时钟后可以减低DSP资源使用率,但是当归一化频率不变,采样率上升到120MHz,同样的系数滤波器的低通截止频率为5MHz,虽然系数不变,但此时将很难再大幅提高时钟频率复用资源来降低占用率了,一方面不同规格的FPGA芯片都有其自身的频率限制,另一方面逻辑设计本身也会存在时许限制。

低通滤波器

带外抑制60dbc的阶数=326

低通滤波器

带外抑制80dBc的阶数=399

低通滤波器

归一化频率不变,采样率提升到120MHz时(注意:滤波器系数是相同的)

C/C++软件化实现

以下为FFT卷积算法在Qt的C\\C++环境下的实现FIR滤波的效果

低通滤波器

低通滤波器

原始信号的FFT结果即为常见的信号频谱,该信号存在较强的高次谐波

低通滤波器

而滤波器系数FFT后得到的是滤波器的幅频特性曲线,这一点比较有意思,滤波器系数实际是该滤波器的时域冲击响应波形的离散采样

低通滤波器

以上为滤波后的频域结果,图中500Khz以外的频谱部分全部被抑制了大约60dBc;

低通滤波器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分