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('滤波器后信号波形');

四、分析

分析略

五、总结

总结略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值