关于本文滤波器具体原理可参考课程设计:https://wenku.baidu.com/view/185d84061cb91a37f111f18583d049649b660edb
本文全套源码、PPT、课设:https://download.csdn.net/download/qq_32809093/12598101
目录
实例1 数字高通巴特沃斯滤波器设计
实例2 数字高通切比雪夫I型滤波器设计
实例3 数字带通巴特沃斯滤波器设计
实例4 数字带通切比雪夫I型滤波器设计
实例5 数字低通巴特沃斯滤波器设计
实例6 数字低通切比雪夫I型滤波器设计
实例7 数字带阻巴特沃斯滤波器设计
实例8 数字带阻切比雪夫I型滤波器设计
附录:freqz_m.m文件
实例1 数字高通巴特沃斯滤波器设计
注:如果freqz_m函数报错,是由于您的Matlab版本过高,可将文章附录freqz_m.m文件复制到运行目录即可
要求:抽样频率为10KHZ,通带截止频率为2.5KHZ,通带衰减不大于2dB,阻带上限截止频率为1.5KHZ,阻带衰减不小于15 dB。
Ap=2;As=15;%设置通带允许最大衰减设置为2dB,阻带应达到的最小衰减为15dB
Nn=1000;%抽样次数
Fs=10000;%抽样频率为10KHZ
F=2500;%当前频率
F_sh=1500;%阻带上限截止频率
%MATLAB工具函数常采用标准化频率,wp和ws的取值范围为0~1
wp=F*2/Fs; ws=F_sh*2/Fs;%所以通带截止频率为wp/pi ,阻带截止频率为ws/pi
[N,wn]=buttord(wp,ws,Ap,As);%计算巴特沃斯滤波器阶次和截止频率
[b,a]=butter(N,wn,'high');%频率变换法设计巴特沃斯高通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);
xlabel('f/Hz');%频率(HZ)
ylabel('幅度/dB');
title('高通巴特沃斯滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
得滤波器阶数为3,截止频率为pi*0.467rad/s
mag增益改为db查看衰减分贝dB:(1500hz时衰减15db,2500hz时衰减1.863db,符合要求)
# 实例2 数字高通切比雪夫I型滤波器设计
要求:抽样频率为10KHZ,通带截止频率为2.5KHZ,通带衰减不大于2dB,阻带上限截止频率为1.5KHZ,阻带衰减不小于15 dB。
Ap=2;As=15;%设置通带允许最大衰减设置为2dB,阻带应达到的最小衰减为15dB
Nn=256;%抽样次数
Fs=10000;%抽样频率为10KHZ
F=2500;%当前频率
F_sh=1500;%阻带上限截止频率
%MATLAB工具函数常采用标准化频率,wp和ws的取值范围为0~1
wp=F*2/Fs; ws=F_sh*2/Fs;%所以通带截止频率为wp/pi ,阻带截止频率为ws/pi
[N,Wn]=cheb1ord(wp,ws,Ap,As);%计算切比雪夫滤波器阶次和截止频率
[b,a]=cheby1(N,Ap,Wn,'high');%频率变换法设计切比雪夫高通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);
xlabel('f/Hz');%频率(HZ)
ylabel('幅度/dB');
title('数字高通切比雪夫I型滤波器');
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例3 数字带通巴特沃斯滤波器设计
要求:抽样频率为2KHZ,通带范围是300HZ到400HZ,通带衰减不大于3dB,在200HZ和500HZ处衰减不小于18dB。
Fs=2000;%给定抽样频率
wp_d=300;%通带下限截止频率
wp_s=400;%通带上限截止频率
ws_d=200;%阻带下限截止频率
ws_s=500;%阻带上限截止频率
wp=[wp_d wp_s]*2/Fs; ws=[ws_d ws_s]*2/Fs;%计算通带截止频率wp,阻带频率ws
Ap=3;As=18;%设置通带允许最大衰减设置为3dB,阻带应达到的最小衰减为18dB
Nn=256;%取样点数
[N,wn]=buttord(wp,ws,Ap,As);%计算巴特沃斯滤波器阶次和截止频率
%N为滤波器阶数 wn为滤波器截止频率 数字滤波器
[b,a]=butter(N,wn,'bandpass');%频率变换法设计巴特沃斯带通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a); %求出巴特沃斯带通滤波器幅频、幅度、相位等
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);
xlabel('f/Hz');%频率(HZ)
ylabel('幅度/dB');
axis([0,1000,0,1.5]);%设置标尺范围
title('数字带通巴特沃斯滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例4 数字带通切比雪夫I型滤波器设计
要求:抽样频率为2KHZ,通带范围是300HZ到400HZ,通带衰减不大于3dB,在200HZ和500HZ处衰减不小于18dB。
Fs=2000;%给定抽样频率
wp_d=300;%通带下限截止频率
wp_s=400;%通带上限截止频率
ws_d=200;%阻带下限截止频率
ws_s=500;%阻带上限截止频率
wp=[wp_d wp_s]*2/Fs; ws=[ws_d ws_s]*2/Fs;%计算通带截止频率wp,阻带频率ws
Ap=3;As=18;%设置通带允许最大衰减设置为3dB,阻带应达到的最小衰减为18dB
Nn=256;%取样点数
[N,Wn]=cheb1ord(wp,ws,Ap,As);%计算切比雪夫滤波器阶次和截止频率
%N为滤波器阶数 wn为滤波器截止频率 数字滤波器
[b,a]=cheby1(N,Ap,Wn);%频率变换法设计切比雪夫高通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a); %求出切比雪夫带通滤波器幅频、幅度、相位等
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);
xlabel('f/Hz');%频率(HZ)
ylabel('幅度/dB');
axis([0,1000,0,1.5]);%设置标尺范围
title('数字带通切比雪夫I型滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例5 数字低通巴特沃斯滤波器设计
要求:抽样频率为10KHZ,通带截止频率为2.5KHZ,通带衰减不大于2dB,阻带上限截止频率为1.5KHZ,阻带衰减不小于15 dB。
Ap=2;As=15;%设置通带允许最大衰减设置为2dB,阻带应达到的最小衰减为15dB
Nn=1000;%抽样次数
Fs=10000;%抽样频率为10KHZ
F=2500;%当前频率
F_sh=1500;%阻带上限截止频率
%MATLAB工具函数常采用标准化频率,wp和ws的取值范围为0~1
wp=F*2/Fs; ws=F_sh*2/Fs;%所以通带截止频率为wp/pi ,阻带截止频率为ws/pi
[N,wn]=buttord(wp,ws,Ap,As);%计算巴特沃斯滤波器阶次和截止频率
[b,a]=butter(N,wn);%频率变换法设计巴特沃斯低通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);%db为分贝,mag为增益
xlabel('f/Hz');%频率(HZ)
ylabel('幅度');
title('数字低通巴特沃斯滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例6 数字低通切比雪夫I型滤波器设计
要求:抽样频率为10KHZ,通带截止频率为2.5KHZ,通带衰减不大于2dB,阻带上限截止频率为1.5KHZ,阻带衰减不小于15 dB。
Ap=2;As=15;%设置通带允许最大衰减设置为2dB,阻带应达到的最小衰减为15dB
Nn=256;%抽样次数
Fs=10000;%抽样频率为10KHZ
F=2500;%当前频率
F_sh=1500;%阻带上限截止频率
%MATLAB工具函数常采用标准化频率,wp和ws的取值范围为0~1
wp=F*2/Fs; ws=F_sh*2/Fs;%所以通带截止频率为wp/pi ,阻带截止频率为ws/pi
[N,wn]=cheb1ord(wp,ws,Ap,As);%计算切比雪夫I型滤波器阶次和截止频率
[b,a]=cheby1(N,Ap,wn,'low');%频率变换法设计切比雪夫I型低通滤波器
[db,mag,pha,grd,w]=freqz_m(b,a);
subplot(2,1,1)
plot(w*Fs/(2*pi),db);%db为分贝,mag为增益
xlabel('f/Hz');%频率(HZ)
ylabel('幅度');
title('数字低通切比雪夫I型滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例7 数字带阻巴特沃斯滤波器设计
要求:抽样频率为2kHZ,阻带范围是300HZ到400HZ,阻带范围衰减应大于18dB,在200HZ和500HZ处衰减小于3dB。
Fs=2000;%给定抽样频率
wp_d=300;%阻带下限截止频率
wp_s=400;%阻带上限截止频率
ws_d=200;%通带下限截止频率
ws_s=500;%通带上限截止频率
wp=[wp_d wp_s]*2/Fs; ws=[ws_d ws_s]*2/Fs;%计算阻带截止频率wp,通带频率ws
Ap=3;As=18;%设置通带允许最大衰减设置为3dB,阻带应达到的最小衰减为18dB
Nn=256;%取样点数
[N,wn]=buttord(wp,ws,Ap,As);%计算巴特沃斯滤波器阶次和截止频率
%N为滤波器阶数 wn为滤波器截止频率 数字滤波器
[b,a]=butter(N,wn,'stop');%频率变换法设计巴特沃斯带阻滤波器
[db,mag,pha,grd,w]=freqz_m(b,a); %求出巴特沃斯带阻滤波器幅频、幅度、相位等
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);%db为分贝,mag为增益
xlabel('f/Hz');%频率(HZ)
ylabel('幅度');
% axis([0,1000,0,1.5]);%设置标尺范围
title('数字带通巴特沃斯滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
实例8 数字带阻切比雪夫I型滤波器设计
要求:抽样频率为2kHZ,阻带范围是300HZ到400HZ,阻带范围衰减应大于18dB,在200HZ和500HZ处衰减小于3dB。
Fs=2000;%给定抽样频率
wp_d=300;%阻带下限截止频率
wp_s=400;%阻带上限截止频率
ws_d=200;%通带下限截止频率
ws_s=500;%通带上限截止频率
wp=[wp_d wp_s]*2/Fs; ws=[ws_d ws_s]*2/Fs;%计算阻带截止频率wp,通带频率ws
Ap=3;As=18;%设置带阻最小衰减设置为18dB,通带最大衰减为3dB
Nn=256;%取样点数
[N,wn]=cheb1ord(wp,ws,Ap,As);%计算滤波器阶次和截止频率
%N为滤波器阶数 wn为滤波器截止频率 数字滤波器
[b,a]=cheby1(N,Ap,wn,'stop');%频率变换法设计带阻切比雪夫滤波器
[db,mag,pha,grd,w]=freqz_m(b,a); %求出带阻切比雪夫滤波器幅频、幅度、相位等
subplot(2,1,1)
plot(w*Fs/(2*pi),mag);%db为分贝,mag为增益
xlabel('f/Hz');%频率(HZ)
ylabel('幅度');
% axis([0,1000,0,1.5]);%设置标尺范围
title('数字带阻切比雪夫I型滤波器')
grid on;
subplot(2,1,2);
plot(w*Fs/(2*pi),180/pi*unwrap(pha));
xlabel('f/Hz');
ylabel('相位/角度');
grid on;
mag增益改为db查看衰减分贝dB:
附录:freqz_m.m文件
function [db,mag,pha,grd,w] = freqz_m(b,a);
% Modified version of freqz subroutine
% ------------------------------------
% [db,mag,pha,grd,w] = freqz_m(b,a);
% db = Relative magnitude in dB computed over 0 to pi radians
% mag = absolute magnitude computed over 0 to pi radians
% pha = Phase response in radians over 0 to pi radians
% grd = Group delay over 0 to pi radians
% w = 501 frequency samples between 0 to pi radians
% b = numerator polynomial of H(z) (for FIR: b=h)
% a = denominator polynomial of H(z) (for FIR: a=[1])
%
[H,w] = freqz(b,a,1000,'whole');
H = (H(1:1:501))'; w = (w(1:1:501))';
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
% pha = unwrap(angle(H));
grd = grpdelay(b,a,w);
% grd = diff(pha);
% grd = [grd(1) grd];
% grd = [0 grd(1:1:500); grd; grd(2:1:501) 0];
% grd = median(grd)*500/pi;
结语:以上分享如果不足之处,还希望大家能够给予留言指正,共同进步!!!