
1、首先打开FilterDesign &Analysis Tool单击MATLAB主窗口下方的“Start”按钮。
2、输入心电图信号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]。
3、设计IIR数字滤波器,计算其对心电图信号的取样序列x的响应序列y1。
4、设计FIR数字滤波器,计算对心电图信号的取样序列x的响应序列y2。
5、最后观察结果,进行比较说明,就完成了。
将模拟频率转化为数字频率,设取样时间为T(要满足抽样定理) Ωp=2π*fp*T Ωs=2π*fs*T 过渡带宽度△Ω=Ωp-Ωs 阻带衰减已经超过74db,要选用Kaiser窗了,Kaiser的参数可变,要根据公式确定滤波器的参数一般都选用Ⅰ型线性相位滤波器即滤波器阶数M为偶数,程序如下: wp=ws=Ap=1As=100Rp=1-10.^(-0.05*Ap)Rs=10.^(-0.05*As)f=[fp fs]a=[0 1]dev=[Rp Rs][M,wc,beta,ftype]=kaiserord(f,a,dev)M=mod(M,2)+Mh=fir1(M,wc,ftype,kaiser(M+1,beta))omega=linspace(0,pi,512)mag=freqz(h,[1],omega)plot(omega/pi,20*log10(abs(mag)))gridomega1=linspace(0,wp,512)h1=freqz(h,[1],omega1)omega2=linspace(ws,pi,512)h2=freqz(h,[1],omega2)fprintf('Ap=%.4f\n',-20*log10(min(abs(h1))))fprintf('As=%.4f\n',-20*log10(max(abs(h2))))运行程序可以得到滤波器的通阻带衰减,画出频率响应,若同阻带衰减不满足要求还可以使用滤波器的优化,一般使用的等波纹FIR进行优化这个信号的频率分量分别为30、150和600Hz,因此可分别设计一个低通、带通和高通的滤波器来提取。以FIR滤波器为例,程序如下:clearfs=2000t=(1:1000)/fs
x=10*cos(2*pi*30*t)+cos(2*pi*150*t)+5*cos(2*pi*600*t)
L=length(x)N=2^(nextpow2(L))Hw=fft(x,N)
figure(1)subplot(2,1,1)plot(t,x)
grid ontitle('滤波前信号x')xlabel('时间/s')% 原始信号
subplot(2,1,2)plot((0:N-1)*fs/L,abs(Hw))% 查看信号频谱
grid ontitle('滤波前信号频谱图')xlabel('频率/Hz')ylabel('振幅|H(e^jw)|')
%% x_1=10*cos(2*pi*30*t)
Ap=1As=60% 定义通带及阻带衰减
dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)]% 计算偏移量
mags=[1,0]% 低通
fcuts=[60,100]% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs)% 估算FIR滤波器阶数
hh1=fir1(N,Wn,ftype,kaiser(N+1,beta))% FIR滤波器设计
x_1=filter(hh1,1,x)% 滤波
x_1(1:ceil(N/2))=[]% 群延时N/2,删除无用信号部分
L=length(x_1)N=2^(nextpow2(L))Hw_1=fft(x_1,N)
figure(2)subplot(2,1,1)plot(t(1:L),x_1)
grid ontitle('x_1=10*cos(2*pi*30*t)')xlabel('时间/s')
subplot(2,1,2)plot((0:N-1)*fs/L,abs(Hw_1))% 查看信号频谱
grid ontitle('滤波后信号x_1频谱图')xlabel('频率/Hz')ylabel('振幅|H(e^jw)|')
%% x_2=cos(2*pi*150*t)
Ap=1As=60% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)]% 计算偏移量
mags=[0,1,0]% 带通
fcuts=[80,120,180,220]% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs)% 估算FIR滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta))% FIR滤波器设计
x_2=filter(hh2,1,x)% 滤波
x_2(1:ceil(N/2))=[]% 群延时N/2,删除无用信号部分
L=length(x_2)N=2^(nextpow2(L))Hw_2=fft(x_2,N)
figure(3)subplot(2,1,1)plot(t(1:L),x_2)
grid ontitle('x_2=cos(2*pi*150*t)')xlabel('时间/s')
subplot(2,1,2)plot((0:N-1)*fs/L,abs(Hw_2))% 查看信号频谱
grid ontitle('滤波后信号x_2频谱图')xlabel('频率/Hz')ylabel('振幅|H(e^jw)|')
%% x_3=5*cos(2*pi*600*t)
Ap=1As=60% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)]% 计算偏移量
mags=[0,1]% 高通
fcuts=[500,550]% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs)% 估算FIR滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta))% FIR滤波器设计
x_3=filter(hh2,1,x)% 滤波
x_3(1:ceil(N/2))=[]% 群延时N/2,删除无用信号部分
L=length(x_3)N=2^(nextpow2(L))Hw_3=fft(x_3,N)
figure(4)subplot(2,1,1)plot(t(1:L),x_3)
grid ontitle('x_3=5*cos(2*pi*600*t)')xlabel('时间/s')
subplot(2,1,2)plot((0:N-1)*fs/L,abs(Hw_3))% 查看信号频谱
grid ontitle('滤波后信号x_3频谱图')xlabel('频率/Hz')ylabel('振幅|H(e^jw)|')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)