基于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

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

mag增益改为db查看衰减分贝dB:(1500hz时衰减15db,2500hz时衰减1.863db,符合要求)

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

# 实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

实例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;

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

mag增益改为db查看衰减分贝dB:

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

附录: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;

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

 

你可能感兴趣的:(数字信号处理)