FIR滤波器---从理论仿真到FPGA实现

引言

     FIR(Finite Impulse Response)滤波器全称是有限脉冲响应数字滤波器。数字滤波器正日益成长为一种重要的DSP运算,并迅速地取代了传统的模拟滤波器,在通信,信号处理等领域具有广泛的应用。FIR数字滤波器通常只需要采用直接的计算机规范和算法进行设计,而传统的模拟滤波器需要复杂的电路设计流程,相比而言,数字滤波器的设计更为简单,应用更为方便,受到了行业研究和应用人员的青睐。

1、FIR滤波器理论简介

     带有常系数的FIR滤波器是一种线性时不变(LTI)数字滤波器,对于输入时间序列x[n],长度为L或N=L-1阶FIR输出可以通过如下公式所示的卷积和来表示:

      其中f[0]-f[L-1]叫做滤波器的系数。对上式做拉普拉斯变换,可以得到其传递函数如下式所示:

     为了形象的理解整个FIR滤波器的计算流程,我们可以将FIR滤波器抽象为一个如下图所示的图,可以看出,FIR滤波器由抽头延迟线,加法器和乘法器混合构成,为每个乘法器提供的其中一个操作数就是一个FIR的系数,也叫做抽头权重,下图所示的结构为直接形式的FIR滤波器,相应的还有具有转置结构的FIR滤波器及线性相位滤波器等。

 2、Matlab理论仿真

       我们首先利用Matlab的FDATool工具设计了一个截止频率为4KHz的低通滤波器,阶数为39阶,然后以定点形式导出其相应的滤波器系数供FPGA调用,在Matlab中初步验证了设计的FIR滤波器的性能,FIR设计过程如下图所示:

       为了验证滤波器设计的正确性,我们在Matlab中生成了2KHz,6KHz,9KHz的混合信号,仿真验证该滤波器是否能滤除高频信号,留下低频信号,并产生相应的测试数据供FPGA仿真验证使用,Matlab代码如下:

%% 产生待滤波信号
Fs = 20000; %采样频率
N = 2^12; %采样点数
t = 0:1/Fs:N/Fs-1/Fs;%时间跨度
s = sin(2000*2*pi*t) + sin(6000*2*pi*t) + sin(9000*2*pi*t);%待滤波波形
%% 
%% 滤波前画图
figure(1);
subplot(2,1,1);
plot(t,s,'r','LineWidth',1.2);
axis([0,100/Fs,-3,3]);
title('滤波前时域波形');
set(gca,'LineWidth',1.2);
%画频谱图
df1=Fs/(N-1);%分辨率
f1=(0:N-1)*df1;%其中每点的频率
Y1=fft(s);
subplot(2,1,2);
%对称频谱图的一半
plot(f1(1:N/2),abs(Y1(1:N/2)),'r','LineWidth',1.2);
title('滤波前频谱图');
set(gca,'LineWidth',1.2);
%% 
%% 量化编码
% 设置量化器,[16,13]表示总位数位16位,小数位位13位,则整数位为16-13=3位
Q = quantizer('mode','fixed','roundmod','Round','overflowmode','wrap','format',[16,13]);
%量化
s1 = quantize(Q,s);
%Q13编码
s2 = s1*2^13;
%% 
%% 执行卷积滤波
%滤波器系数
coeff = [-0.00196374217118785,-0.00791773809636091,-0.0138720919492596,-0.0152998302166322,...
         -0.00714172931536695,0.00677322506587068,0.0154430340762628,0.00889151351102111,...
         -0.00967520748810050,-0.0228799927448442,-0.0136785987113692,0.0150366130928803,...
         0.0366874953014960,0.0226493274336321,-0.0259510885781770,-0.0671094985871605,...
         -0.0449980382387980,0.0616339249863470,0.210973869578067,0.319168053578303,...
         0.319168053578303,0.210973869578067,0.0616339249863470,...
         -0.0449980382387980,-0.0671094985871605,-0.0259510885781770,0.0226493274336321,...
         0.0366874953014960,0.0150366130928803,-0.0136785987113692,-0.0228799927448442,...
         -0.00967520748810050,0.00889
  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值