数字信号处理实验:数字滤波器的设计与应用

实验通过双线性变换法设计巴特沃斯IIR滤波器,处理心电图信号,以及用窗函数法设计FIR滤波器,提取不同频率成分。实验展示了滤波器设计原理和对信号的滤波效果,包括低通、带通、高通和带阻滤波器的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 实验目的

        1.掌握模拟滤波器的设计方法,以及脉冲响应不变法和双线性变换法设计IIR数字滤波 器的方法,针对实际信号能设计相应的 IIR 数字滤波器,并按要求进行滤波。

        2.掌握用窗函数法设计FIR数字滤波器的方法,并通过实验了解各种窗函数对滤波特性的影响;针对已知多频率正弦信号的频谱或实际信号,能设计相应的FIR滤波器按要求进行滤波。

二. 实验原理

1.基于模拟滤波器的IIR的数字滤波器设计(双线性变换法):

    a.确定抽样频率T。双线性变换法中参数T的选择和最终设计出的数字滤波器无关,因此可以取实际关系中的值,有时为了设计简单,常取T=2;

    b.按照 进行非线性预畸变矫正,将数字滤波器的通带截止频率 和阻带截止频率ωst 转换成模拟滤波器的通带截止频率 和阻带截止频率

    c.按照模拟滤波器的技术指标 设计模拟滤波器

    d.将模拟滤波器 从s平面转换到z平面,得到数字低通滤波器的系统函数

2.FIR数字滤波器的设计(窗函数设计法):

    a.依据理想的频率响应函数 来求解单位抽样响应

    b.依据阻带最小衰减要求,结合书中的表格,选择窗函数类型;依据过渡带宽的要求确定窗的长度N;

    c.加窗处理,得到设计结果为

 

    MATLAB中提供了利用函数fir1实现窗函数设计FIR数字滤波器的通用应用格式,即

    其中, 为FIR滤波器的阶数,对于高通、带阻滤波器 取偶数。 为滤波器截止频率,取值范围0~1。对于带通、带阻滤波器, ,且 为滤波器类型。缺省时为低通或带通滤波器,为’high’时是高通滤波器,为’stop’时是带阻滤波器。 为窗函数,列向量,其长度为 ;缺省时,自动取hamming窗。输出参数B为FIR滤波器系数向量,长度为n+1。

三. 实验内容

(1) 用双线性变换法设计一个巴特沃斯低通IIR数字滤波器。设计指标参数为:在通带内频率低于0.2π 时,最大衰减小于1dB;在阻带内[0.3π,π]频率区间上,最小衰减大于15dB。其中采样间隔为0.02π

    (2) 用步骤(1)所设计的滤波器对实际心电图信号采样序列进行仿真滤波处理,观察总结滤波作用与效果,心电图信号为

    xn={-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-26,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)已知信号 ,其中a 为42,b 为1。采用窗函数法设计低通、带通、高通滤波器分别提取信号 ,设计带阻滤波器提取信号 ,并对滤波效果进行分析。

四. 实验步骤

        ①用双线性变换法设计一个巴特沃斯低通IIR数字滤波器。设计指标参数为:在通带内频率低于0.2π 时,最大衰减小于1dB;在阻带内[0.3π,π] 频率区间上,最小衰减大于15dB。其中采样间隔为0.02π

        ②用步骤①所设计的滤波器对实际心电图信号采样序列进行仿真滤波处理,观察总结滤波作用与效果,心电图信号为

    xn={-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-26,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}

实验代码:

clc,clear;
%用双线性变换法设计一个巴特沃斯低通IIR数字滤波器
wp=0.2*pi;ws=0.3*pi;   	 %数字滤波器截止频率 
Ap=1;As=15;             %衰减设置
T=0.02*pi;fs=1/T;      	 %抽样间隔与抽样频率
Wp=(2/T)*tan(wp/2);Ws=(2/T)*tan(ws/2);  	 %转换为模拟滤波器截止频率
[N,Wc]=buttord(Wp,Ws,Ap,As,'s');        		 %计算阶数和截止频率
[z,p,k]=buttap(N); 		 	%归一化原型滤波器设计
B=k*real(poly(z));  			%分子多项式系数
A=real(poly(p));   			%分母多项式系数
[Bs,As]=lp2lp(B,A,Wc);      	%去归一化得到模拟低通滤波器
[Bz,Az]=bilinear(Bs,As,fs); 		%数字低通滤波器系数   
[Hz,w]=freqz(Bz,Az);          %数字低通滤波器的频率响应
dbHz=20*log10(abs(Hz)/max(abs(Hz)));    %化为分贝值
subplot(1,3,1);plot(w/pi,abs(Hz));grid on;
set(gca,'xtick',[0 0.2 0.3 1]);set(gca,'xticklabel',[0 0.2 0.3 1]);
set(gca,'ytick',[0 0.178 0.891 1]);set(gca,'yticklabel',[0 0.178 0.891 1]);
xlabel('\omega/\pi');ylabel('|H(e^j^\omega)|');
subplot(1,3,2);plot(w/pi,angle(Hz));grid on;
set(gca,'xtick',[0 0.2 0.3 1]);set(gca,'xticklabel',[0 0.2 0.3 1]);
xlabel('\omega/\pi');ylabel('相位');
subplot(1,3,3);plot(w/pi,dbHz);grid on;
axis([0,1,-80,5]);
set(gca,'xtick',[0 0.2 0.3 1]);set(gca,'xticklabel',[0 0.2 0.3 1]);
set(gca,'ytick',[-80 -15 -1 0]);set(gca,'yticklabel',[-80 -15 -1 0]);
xlabel('\omega/\pi');ylabel('幅度(bB)');
 % 对心电图数字信号进行滤波
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];
y=filter(Bz,Az,x);            %滤波函数进行滤波 
subplot(2,1,1);plot(x),axis([0 60 -100 40]),title('原始信号');
subplot(2,1,2);plot(y),axis([0 60 -100 40]),title('滤波后信号');

仿真结果:

     由图可知设计出的数字低通滤波器阻带满足指标要求,通带指标有富余,没有频谱混叠。但数字滤波器和模拟滤波器的幅频响应曲线形状有很大区别,这是频率非线性畸变引起的。

 

        将离散的心电图转变为连续信号进行观察,从图中可以清晰的看出:原始信号的波形波动较大,存在或多或少的“突起”,但是经过低通滤波器后,过滤掉了阻带不满足要求的信号,滤波后的信号看起来更为的平滑,可见达到了滤除无效部分的效果。

        ③已知信号: ,其中a 为42,b 为1。采用窗函数法设计低通、带通、高通滤波器分别提取信号 ,设计带阻滤波器提取信号 ,并对滤波效果进行分析。

 低通滤波器实验代码:

clc,clear;
% 用汉明窗设计FIR低通滤波器
wc=0.35;    			%归一化6dB截止频率,相当于除以pi
alpha=20;   
N=2*alpha+1;    		%FIR滤波器长度
hn=fir1(N-1,wc,'low',hamming(N));   			%用汉明窗设计低通滤波器
omega=linspace(0,pi,512);       				%频率抽样512个点
mag=20*log10(abs(freqz(hn,1,omega)));         %计算幅度频率响应的频率响应
subplot(321);stem((0:N-1),hn,'.');grid on;
xlabel('n');ylabel('h(n)');title('单位抽样响应');
subplot(322);plot(omega/pi,mag);grid on;
axis([0 1 -80 10]);
set(gca,'xtick',[0 0.5 1]);set(gca,'xticklabel',[0 0.5 1]);
set(gca,'ytick',[-80 -53 -6 0]);set(gca,'yticklabel',[-80 -53 -6 0]);
xlabel('\omega/\pi');ylabel('dB');title('幅度频率响应');
% 采用该FIR低通滤波器对已知信号进行信号提取
a=42;b=1;
fs=20000;  						 %采样频率
f1=a*b*50;f2=a*b*100;f3=a*b*150;  %待滤波余弦信号频率
t=(0:400)/fs;   					%定义时间步长
s=cos(2*f1*pi*t)+cos(2*f2*pi*t)+cos(2*f3*pi*t);
sf=filter(hn,1,s);  				%使用filter函数对信号进行滤波
subplot(323);plot(t,s);  			%滤波前的信号图像
axis([0 0.005 -1.5 3.5]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
Fs=fft(s,512);AFs=abs(Fs);f=fs/512*(0:255);
subplot(324);plot(f,AFs(1:256));     %滤波前的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');
subplot(325);plot(t,sf);  			 %滤波后的信号图像
axis([0 0.005 -1.1 1.1]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');
Fsf=fft(sf,512);   				 %滤波后的信号频谱图
AFsf=abs(Fsf);  	 				 %信号频谱图的幅值
subplot(326);plot(f,AFsf(1:256));    %滤波后的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');

仿真结果:

 带通滤波器实验代码:

clc,clear;
% 用汉明窗设计FIR带通滤波器
wc1=0.35;wc2=0.5;     %归一化6dB截止频率,相当于除以pi 
alpha=20;
N=2*alpha+1;    %FIR滤波器长度
hn=fir1(N-1,[wc1 wc2],'bandpass',hamming(N));   %用汉明窗设计带通滤波器
omega=linspace(0,pi,512);       %频率抽样512个点
mag=20*log10(abs(freqz(hn,1,omega)));       %计算幅度频率响应的频率响应
subplot(321);stem((0:N-1),hn,'.');grid on;
xlabel('n');ylabel('h(n)');title('单位抽样响应');
subplot(322);plot(omega/pi,mag);grid on;
axis([0 1 -80 10]);
set(gca,'xtick',[0 0.5 1]);set(gca,'xticklabel',[0 0.5 1]);
set(gca,'ytick',[-80 -53 -6 0]);set(gca,'yticklabel',[-80 -53 -6 0]);
xlabel('\omega/\pi');ylabel('dB');title('幅度频率响应');
% 采用该FIR带通滤波器对已知信号进行信号提取
a=42;b=1;
fs=20000;   %采样频率
f1=a*b*50;f2=a*b*100;f3=a*b*150;  %待滤波余弦信号频率
t=(0:400)/fs;   %定义时间步长
s=cos(2*f1*pi*t)+cos(2*f2*pi*t)+cos(2*f3*pi*t);
sf=filter(hn,1,s);  %使用filter函数对信号进行滤波
subplot(323);plot(t,s);  %滤波前的信号图像
axis([0 0.005 -1.5 3.5]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
Fs=fft(s,512);AFs=abs(Fs);f=fs/512*(0:255);
subplot(324);plot(f,AFs(1:256));     %滤波前的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');
subplot(325);plot(t,sf);  %滤波后的信号图像
axis([0 0.005 -1.1 1.1]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');
Fsf=fft(sf,512);    %滤波后的信号频谱图
AFsf=abs(Fsf);  %信号频谱图的幅值
subplot(326);plot(f,AFsf(1:256));    %滤波后的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');

仿真结果:

 高通滤波器实验代码:

clc,clear;
% 用汉明窗设计FIR高通滤波器
wc=0.5;     %归一化6dB截止频率,相当于除以pi
alpha=20;   
N=2*alpha+1;    					%FIR滤波器长度
hn=fir1(N-1,wc,'high',hamming(N));     %用汉明窗设计高通滤波器
omega=linspace(0,pi,512);      		 %频率抽样512个点
mag=20*log10(abs(freqz(hn,1,omega)));       %计算幅度频率响应的频率响应
subplot(321);stem((0:N-1),hn,'.');grid on;
xlabel('n');ylabel('h(n)');title('单位抽样响应');
subplot(322);plot(omega/pi,mag);grid on;
axis([0 1 -80 10]);
set(gca,'xtick',[0 0.5 1]);set(gca,'xticklabel',[0 0.5 1]);
set(gca,'ytick',[-80 -53 -6 0]);set(gca,'yticklabel',[-80 -53 -6 0]);
xlabel('\omega/\pi');ylabel('dB');title('幅度频率响应');
% 采用该FIR高通滤波器对已知信号进行信号提取
a=42;b=1;
fs=20000;   						%采样频率
f1=a*b*50;f2=a*b*100;f3=a*b*150;  	%待滤波余弦信号频率
t=(0:400)/fs;   						%定义时间步长
s=cos(2*f1*pi*t)+cos(2*f2*pi*t)+cos(2*f3*pi*t);
sf=filter(hn,1,s);  					%使用filter函数对信号进行滤波
subplot(323);plot(t,s); 				%滤波前的信号图像
axis([0 0.005 -1.5 3.5]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
Fs=fft(s,512);AFs=abs(Fs);f=fs/512*(0:255);
subplot(324);plot(f,AFs(1:256));    	%滤波前的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');
subplot(325);plot(t,sf);  				%滤波后的信号图像
axis([0 0.005 -1.1 1.5]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');
Fsf=fft(sf,512);    					%滤波后的信号频谱图
AFsf=abs(Fsf);  						%信号频谱图的幅值
subplot(326);plot(f,AFsf(1:256));    	%滤波后的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');

仿真结果:

 带阻滤波器实验代码:

clc,clear;
% 用汉明窗设计FIR带阻滤波器
wc1=0.3;wc2=0.55;     %归一化6dB截止频率,相当于除以pi 
alpha=20;
N=2*alpha+1;    %FIR滤波器长度
hn=fir1(N-1,[wc1 wc2],'stop',hamming(N));   %用汉明窗设计带阻滤波器
omega=linspace(0,pi,512);       %频率抽样512个点
mag=20*log10(abs(freqz(hn,1,omega)));       %计算幅度频率响应的频率响应
subplot(321);stem((0:N-1),hn,'.');grid on;
xlabel('n');ylabel('h(n)');title('单位抽样响应');
subplot(322);plot(omega/pi,mag);grid on;
axis([0 1 -80 10]);
set(gca,'xtick',[0 0.5 1]);set(gca,'xticklabel',[0 0.5 1]);
set(gca,'ytick',[-80 -53 -6 0]);set(gca,'yticklabel',[-80 -53 -6 0]);
xlabel('\omega/\pi');ylabel('dB');title('幅度频率响应');
% 采用该FIR带阻滤波器对已知信号进行信号提取
a=42;b=1;
fs=20000;   %采样频率
f1=a*b*50;f2=a*b*100;f3=a*b*150;  %待滤波余弦信号频率
t=(0:400)/fs;   %定义时间步长
s=cos(2*f1*pi*t)+cos(2*f2*pi*t)+cos(2*f3*pi*t);
sf=filter(hn,1,s);  %使用filter函数对信号进行滤波
subplot(323);plot(t,s);  %滤波前的信号图像
axis([0 0.005 -1.5 3.5]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');
Fs=fft(s,512);AFs=abs(Fs);f=fs/512*(0:255);
subplot(324);plot(f,AFs(1:256));     %滤波前的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');
subplot(325);plot(t,sf);  %滤波后的信号图像
axis([0 0.005 -2 2.2]);
xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');
Fsf=fft(sf,512);    %滤波后的信号频谱图
AFsf=abs(Fsf);  %信号频谱图的幅值
subplot(326);plot(f,AFsf(1:256));    %滤波后的信号频谱图
xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');

仿真结果:

         总结:使用窗函数是为了消除无限序列的截短而引起的吉布效应。加窗后,使频响产生一过渡带,其宽度正好等于窗的频响的主瓣宽度。出现肩峰时,肩峰两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度。​​​​​​​

第l章 数字信号处理引言 1.1 引言 1.2 数字信号处理起源 1.3 信号域 1.4 信号分类 1.5 DSP:一个学科 第2章 采样原理 2.1 引言 2.2 香农采样原理 2.3 信号重构 2.4 香农插值 2.5 采样方法 2.6 多通道采样 2.7 MATLAB音频选项 第3章 混叠 3.1 引言 3.2 混叠 3.3 圆判据 3.4 IF采样 第4章 数据转换量化 4.1 域的转换 4.2 ADC分类 4.3 ADC增强技术 4.4 DSP数据表示方法 4.5 量化误差 4.6 MAC单元 4.7 MATLAB支持工具 第5章 z变换 5.1 引言 5.2 z变换 5.3 原始信号 5.4 线性系统的z变换 5.5 z变换特性 5.6 MATLAB z变换设计工具 5.7 系统稳定性 5.8 逆z变换 5.9 赫维赛德展开法 5.10 逆z变换MATLAB设计工具 第6章 有限冲激响应滤波器 6.1 引言 6.2 FIR滤波器 6.3 理想低通FIR滤波器 6.4 FIR滤波器设计 6.5 稳定性 6.6 线性相位 6.7 群延迟 6.8 FIR滤波器零点位置 6.9 零相位FIR滤波器 6.10 最小相位滤波器 第7章 窗函数设计法 7.1 有限冲激响应综述 7.2 基于窗函数的FIR滤波器设计 7.3 确定性设计 7.4 数据窗 7.5 基于MATLAB窗函数的FIR滤波器设计 7.6 Kaiser窗函数 7.7 截尾傅里叶变换设计方法 7.8 频率采样设计法 第8章 最小均方设计方法 8.1 有限冲激响应综述 8.2 最小二乘法 8.3 最小二乘FIR滤波器设计 8.4 MATIAB最小均方设计 8.5 MATLAB设计对比 8.6 PRONY方法 第9章 等波纹设计方法 9.1 等波纹准则 9.2 雷米兹交换算法 9.3 加权等波纹FIR滤波器设计 9.4 希尔伯特等波纹FIR滤波器 9.5 等波纹滤波器阶次估计 9.6 MATLAB等波纹FIR滤波器实现 9.7 LpFIR滤波器设计 9.8 基于Lp范数的MATLAB滤波器设计 第10章 FIR滤波器特例 10.1 引言 10.2 滑动平均FIR滤波器 10.3 梳状FIR滤波器 10.4 L波段FIR滤波器 10.5 镜像FIR滤波器 10.6 补码FIR滤波器 10.7 频率抽样滤波器组 10.8 卷积平滑FIR滤波器 10.9 非线性相位FIR滤波器 10.10 Farrow FIR滤波器 第11章 FIR的实现 11.1 概述 11.2 直接FIR滤波器 11.3 转置结构 11.4 对称FIR滤波器结构 11.5 格FIR滤波器结构 11.6 分布式算法 11.7 正则符号数 11.8 简化加法器图 11.9 FIR有限字长效应 11.10 计算误差 11.11 缩放 11.12 多重MAC结构 第12章 经典滤波器设计 12.1 引言 12.2 经典模拟滤波器 12.3 模拟原滤波器 12.4 巴特沃斯原滤波器 12.5 切比雪夫原滤波器 12.6 椭圆原滤波器 12.7 原滤波器到最终形式的转换 12.8 其他IIR滤波器形式 12.9 PRONY(PADE)法 12.10 尤尔—沃尔 第13章 无限冲激响应滤波器设计 13.1 引言 13.2 冲激响应不变法 13.3 冲激响应不变滤波器设计 13.4 双线性z变换法 13.5 翘曲 13.6 MATLAB IIR滤波器设计 13.7 冲激响应不变双线性z变换IIR对比 13.8 最优化 第14章 状态变量滤波器 14.1 状态空间系统 14.2 状态变量 14.3 模拟仿真 14.4 MATLAB仿真 14.5 状态变量模 14.6 基变换 14.7 MATLAB状态空间 14.8 转置系统 14.9 MATLAB状态空间算法结构 第15章 数字滤波器结构 15.1 滤波器结构 15.2 直Ⅰ、Ⅱ结构 15.3 直Ⅰ、ⅡIIR滤波器MATLAB相关函数 15.4 直Ⅰ、Ⅱ结构的MATLAB实现 15.5 级联结构 15.6 一阶、二阶子滤波器 15.7 一阶、二阶子滤波器MATLAB实现 15.8 并联结构 15.9 级联/并联结构的MATLAB实现 15.10 梯/格IIR滤波器 第16章 定点效应 16.1 背景 16.2 定点系统 16.3 溢出(饱)效应 16.4 算法误差 16.5 系数敏感度 16.6 二阶子滤波器 16.7 标准IIR滤波器 16.8 缩放 16.9 极限环振荡 第17章 IIR结构分析 17.1 溢出防范 17.2 Lp范数界 17.3 L2溢出预防 17.4 L2范数测定 17.5 L2范数的附加说明 17.6 L∞范数界 17.7 L1范数界 17.8 噪声功率增益 17.9 基于状态空间的噪声分析 17.10 相似变换 第18章 多采样率系统简介 18.1 背景 18.2 抽取 18.3 插值 18.4 采样率转换 18.5 多相表示法 18.6 子带滤波器 18.7 MATLAB 第19章 多采样率滤波器 19.1 引言 19.2 离散傅里叶变换(DFI)滤波器组 19.3 L波段滤波器 19.4 正交镜像滤波器 19.5 多相表达式 19.6 掩频滤波器 19.7 级联积分梳状滤波器(CIC) 附录一 MATLAB 附录二 词汇表 附录三 中英文对照 参考文献
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.求

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值