【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】

一、数字滤波器设计简介

1 设计原理
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
1.1 滤波器概念
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
1.2 数字滤波器的系统函数和差分方程
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
1.3 数字滤波器结构的表示
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
1.4 数字滤波器的分类
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
2.1 IIR滤波器与FIR滤波器的分析比较
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
2.2 FIR滤波器的原理
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
3 FIR滤波器的仿真步骤
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】

二、部分源代码

%%利用双线性变换法设计一个Chebyshev I型数字高通滤波器
%确定已知的技术指标
Rp=1.2;Rs=20;T=0.001;fp=300;fs=200; 
%求出将要设计的数字滤波器的边界频率
wp=2*pi*fp*T;ws=2*pi*fs*T; 
%预畸变
wp1=(2/T)*tan(wp/2);ws1=(2/T)*tan(ws/2); 
%设计模拟滤波器
%求出最小阶数和截止频率
[n,wn]=cheb1ord(wp1,ws1,Rp,Rs,'s'); 
%求出模拟滤波器的分子和分母系数向量
[b,a]=cheby1(n,Rp,wn,'high','s'); 
%双线性变换
[bz,az]=bilinear(b,a,1/T); 
[db,mag,pha,grd,w]=freqz_m(bz,az);
%以w/pi为横轴,以db为纵轴绘图
plot(w/pi,db,'color','m');grid;
function[db,mag,pha,grd,w]=freqz_m(b,a)
[H,w]=freqz(b,a,1000,'whole');
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(pha);
%用双线性变换法设计一个Butterworth数字低通滤波器
%确定已知的技术指标
Rp=1;Rs=25;T=0.001;fp=200;fs=300; 
%求出将要设计的数字滤波器的边界频率
wp=2*pi*fp*T;ws=2*pi*fs*T; 
%预畸变
wp1=(2/T)*tan(wp/2);ws1=(2/T)*tan(ws/2); 
%求出最小阶数和截止频率
[n,wn]=buttord(wp1,ws1,Rp,Rs,'s'); 
%求出模拟滤波器的分子和分母系数向量
[b,a]=butter(n,wn,'low','s'); 
%双线性变换
[bz,az]=bilinear(b,a,1/T); 
function [db,mag,pha,w] = freqs_m(b,a,wmax)
w = (0:1:500)*wmax/500;
H = freqs(b,a,w);
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
wp=400*pi;ws=600*pi;Rp=1;Rs=25; 
%求出最小阶数和截止频率
[n,wn]=buttord(wp,ws,Rp,Rs,'s'); 
%求出模拟滤波器的分子和分母系数向量
[b,a]=butter(n,wn,'s');
[db,~,~,w]=freqs_m(b,a,500*2*pi);
subplot(2,1,1);
plot(w/(2*pi),db,'LineWidth',2,'Color','b');
title('模拟滤波器频响');
axis([0,500,-20,1]);
%脉冲响应不变法转换
fs=1000;[bz,az]=impinvar(b,a,fs); 
[db,mag,pha,grd,w]=freqz_m(bz,az); 
subplot(2,1,2);
wp1=0.25*pi;wp2=0.45*pi;ws1=0.15*pi;ws2=0.55*pi; 
%预畸变
wp3=(2/T)*tan(wp1/2);wp4=(2/T)*tan(wp2/2); 
ws3=(2/T)*tan(ws1/2);ws4=(2/T)*tan(ws2/2); 
%将所需类型模拟滤波器技术指标转换成模拟低通滤波器技术指标,设计模拟滤波器
wp=[wp3,wp4];ws=[ws3,ws4]; 
[n,wn]=buttord(wp,ws,Rp,Rs,'s');[z,p,k]=buttap(n);[b,a]=zp2tf(z,p,k); 
%频率变换
w0=sqrt(wp3*wp4);Bw=wp4-wp3; 
[b1,a1]=lp2bp(b,a,w0,Bw); 
%双线性变换法
[bz,az]=bilinear(b1,a1,1/T); 
[db,mag,pha,grd,w]=freqz_m(bz,az);

三、运行结果

【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】
【滤波器】脉冲响应不变法+双线性变换法数字滤波器设计【Matlab 884期】

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

上一篇:es6 includes(),startsWith(),endsWith()


下一篇:python 判断字符串是否全为字母或数字