基于Matlab的IIR高通、带通、低通和带阻数字滤波器设计(巴特沃斯和切比雪夫I型实现)

关于本文滤波器具体原理可参考课程设计: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。

                                                                \LARGE w=2*pi *f/f_{s}

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;

结语:以上分享如果不足之处,还希望大家能够给予留言指正,共同进步!!!

 

  • 55
    点赞
  • 368
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用MATLAB设计IIR带通滤波器,可以使用`butter`函数。以下是一个示例代码,演示了如何使用`butter`函数设计IIR带通滤波器: 1. IIR带通滤波器: ```matlab % 设计IIR带通滤波器 order = 4; % 滤波器的阶数 passband_freq = [0.2 0.5]; % 通带频率范围 % 使用butter函数设计IIR带通滤波器 [b, a] = butter(order, passband_freq, 'bandpass'); % 打印滤波器系数 disp('b = '); disp(b); disp('a = '); disp(a); ``` 在这个示例中,我们使用`butter`函数来设计一个4阶的IIR带通滤波器通带频率范围为0.2到0.5。设计完成后,滤波器的分子系数存储在`b`中,分母系数存储在`a`中。 2. IIR滤波器: ```matlab % 设计IIR滤波器 order = 4; % 滤波器的阶数 stopband_freq = [0.2 0.5]; % 频率范围 % 使用butter函数设计IIR滤波器 [b, a] = butter(order, stopband_freq, 'stop'); % 打印滤波器系数 disp('b = '); disp(b); disp('a = '); disp(a); ``` 在这个示例中,我们使用`butter`函数来设计一个4阶的IIR滤波器频率范围为0.2到0.5。设计完成后,滤波器的分子系数存储在`b`中,分母系数存储在`a`中。 请注意,这只是一个简单的示例代码,你可以根据自己的需求选择合适的IIR带通滤波器的阶数和频率范围,并根据需要进行修改和扩展。另外,在实际应用中,还需要考虑滤波器特性的要求等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

亦我飞也

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

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

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

打赏作者

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

抵扣说明:

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

余额充值