欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

FIR数字滤波器的设计及应用——MATLAB

发布时间:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 FIR数字滤波器的设计及应用——MATLAB 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、实验目的

1、掌握FIR数字滤波器设计的一般方法和步骤;
2、了解各种窗函数的性能
3、学会利用窗函数法设计FIR数字滤波器;
4、掌握FIR数字滤波器的实现方法
5、学会用所设计的滤波器对实际信号进行滤波处理
6、验证FIR数字滤波器获取线性相位需要满足的条件
7、对FIR数字滤波器的特点有全面的认识

二、实验原理

(1)根据取样周期T,确定相应的数字频率 。


(2)根据阻带衰减确定窗函数形式
(3)根据过渡带宽
确定加窗宽度N:

其中系数 根据窗函数确定,称为窗宽系数; 一般取奇数。
(4)确定单位取样响应位移系数
(5)确定滤波器单位取样响应



(6)计算滤波器的频率响应:

(7)校验技术指标是否已经满足,如不满足,则重新选取较大的 进行(3)、(4)计算;如满足有余,则试选较小的N进行(3),(4)计算。
3、FIR数字滤波器频率响应的计算FIR数字滤波器的频率响应可以通过对其单位取样响应进行FFT得到。
4、FIR数字滤波器的实现FIR数字滤波器的实现是借助于线性卷积,即:

线性卷积的运算,一般借助于FFT进行
5、FIR数字滤波器获取线性相位的条件要求滤波器的单位取样响应是中心对称的,即

三、实验步骤、数据记录及处理

FIR数字滤波器的设计及应用
1、设置输入心电图信号序列,绘制其波形;
2、给定滤波器技术参数
3、设计FIR数字滤波器。
4、编写快速卷积程序利用设计好的FIR数字滤波器完成对信号的滤波处理
5、绘制滤波处理后的心电图信号波形。(注:前m个点是延迟点,画图时去掉不画)
6、改变m的值,验证FIR数字滤波器获取线性相位需要满足的条件
实验例程:

clear all;clc;close all;%关闭当前窗口 %生成滤波前信号波形 x=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,6,4,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0]; nx=length(x);%采样数据点数; n=0:nx-1;%设置自变量n的取值范围; figure('name','%加窗法设计FIR数字滤波器') subplot(221);stem(n,x,'.');grid on;xlabel('n');ylabel('x(n)');title('滤波前信号波形');%绘制序列x(n)的图形%加窗法设计FIR数字滤波器 fp=15;fs=23;Fs=100;T=1/Fs;%给定技术指标 Wp=2*pi*fp;Ws=2*pi*fs;%给定技术指标; wp=Wp*T;ws=Ws*T;%转换为数字角频率; P=2;%窗宽系数 tr_width=ws-wp;%计算过渡带宽 wc=(ws+wp)/2;%计算FIR滤波器的截止频率 N0=ceil(P*4*pi/tr_width);%计算加窗宽度N N=N0+mod(N0+1,2);%确保N为奇数; m=(N-1)/2;%计算移位系数; n=[0:1:N-1];%设置自变量n的取值范围; window=(hamming(N))';%生成窗函数序列 nm=n-m+eps; hd=sin(wc*nm)./(pi*nm);%计算理想移位低通滤波器的单位取样响应 hn=hd.*window;%对理想移位低通滤波器加窗,得到实际滤波器的单位取样响应 H=fft(hn,1024);%fft计算滤波器的实际频率响应 k=0:1:511;w=2*pi*(Fs*k/1024);%设置离散频率k的取值范围 mag=abs(H);%计算函数的幅度特性 pha=angle(H);%计算相位特性 db=20*log10((mag+eps)/max(mag));%将幅度特性转换为对数形式 %画出滤波器相频响应和幅频响应 subplot(224);plot(w,pha(1:512));grid on;xlabel('w/2pi');ylabel('ψ(w)');title('滤波器相频响应'); subplot(222);plot(w,db(1:512));grid on;xlabel('w(pi)');ylabel('|H(jw)|(db)');title('滤波器幅频响应');%对心电图采样序列进行滤波 L=pow2(nextpow2(nx+length(hn)-1));%确定FFT(快速卷积)的点数 Xk=fft(x,L);Hk=fft(hn,L);%求x(n)和h(n)序列的快速傅里叶变换关于L点的 Yk=Xk.*Hk;%求XK; y=ifft(Yk,L);%对YK调用ifft,求得y(n); yn=y(m+1:nx+m);%确定y(n)的自变量取值范围; subplot(223);stem(yn,'.');grid on;xlabel('n');ylabel('y(n)');title('滤波器后信号波形'); %绘制滤波器滤波后的图形 %利用filter()函数验证滤波后结果 L=pow2(nextpow2(nx+length(hn)-1));%确定FFT(快速卷积)的点数 Xk=fft(x,L);%求XK; x1=ifft(Xk,L);%对YK调用ifft,求得x1; r=filter(hn,[1],x1); rn=r(m+1:nx+m); %subplot(224);stem(rn,'.');grid on;xlabel('n');ylabel('r(n)');title('滤波器后信号波形');

四、分析

分析略

五、总结

总结略

总结

以上是生活随笔为你收集整理的FIR数字滤波器的设计及应用——MATLAB的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。