实验六 用MATLAB设计IIR数字滤波器

例题

例2-1 采用脉冲响应不变法设计一个巴特沃斯数字低通滤波器

要求:ωp=0.25π,Rp=1dB;ωs=0.4π,As=15dB,滤波器采样频率Fs=2000Hz。

matlab 复制代码
wp=0.25*pi;            %滤波器的通带截止频率
ws=0.4*pi;             %滤波器的阻带截止频率
Rp=1;As=15;            %滤波器的通带衰减指标和阻带衰减指标
ripple=10^(-Rp/20);    %滤波器的通带衰减对应的幅度值
Attn=10^(-As/20);       %滤波器的阻带衰减对应的幅度值
Fs=2000;T=1/Fs;Omgp=wp*Fs;Omg=ws*Fs;
%转变为模拟滤波器的技术指标

[n,Omgc]=buttord(Omgp,Omg,Rp,As,'s'); 
%模拟原型滤波器计算
[z0,p0,k0]=buttap(n);        
%设计归一化的巴特沃斯模拟滤波器原型
ba1=k0*real(poly(z0));       
%求原型滤波器的系数 b
aa1=real(poly(p0));       
%求原型滤波器的系数 a
[ba,aa]=lp2lp(ba1,aa1,Omgc);
%变换为模拟低通滤波器

[bd,ad]=impinvar(ba,aa,Fs);  
%用脉冲响应不变法计算数字滤波器系数

[H,w]=freqz(bd,ad);                
%求数字系统的频率特性
dbH=20*log10((abs(H)+eps)/max(abs(H)));

subplot(2,2,1);plot(w/pi,abs(H));
ylabel('|H|');title('幅度响应');axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]);grid

subplot(2,2,2);plot(w/pi,angle(H)/pi);
ylabel('\phi');title('相位响应');axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-1,0,1]);grid

subplot(2,2,3);plot(w/pi,dbH);
ylabel('幅度响应(dB)');title('幅度响应(dB)');
xlabel('频率(\pi)');axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-50,-15,-1,0]);grid

subplot(2,2,4);zplane(bd,ad);axis([-1.1,1.1,-1.1,1.1]);title('零极点图');

例2-2 设计一个巴特沃斯数字低通滤波器

要求 ωp=0.25π Rp=1dB ωs=0.4π As=15dB 滤波器采样频率 Fs=100Hz。

matlab 复制代码
wp=0.25*pi; %滤波器的通带截止频率
ws=0.4*pi; %滤波器的阻带截止频率
Rp=1; As=15; %滤波器的通阻带衰减指标
ripple=10^(-Rp/20); %滤波器的通带衰减对应的幅度值
Attn=10^(-As/20); %滤波器的阻带衰减对应的幅度值
Fs=100; T=1/Fs;
Omgp=(2/T)*tan(wp/2); %原型通带频率的预修正
Omgs=(2/T)*tan(ws/2); %原型阻带频率的预修正
[n,Omgc]=buttord(Omgp,Omgs,Rp,As,'s'); %计算阶数n和截止频率
[z0,p0,k0]=buttap(n); %设计归一化的巴特沃思模拟滤波器原型
ba1=k0*real(poly(z0)); %求原型滤波器的系数 b
aa1=real(poly(p0)); %求原型滤波器的系数 a
[ba,aa]=lp2lp(ba1,aa1,Omgc); %变换为模拟低通滤波器
[bd,ad]=bilinear(ba,aa,Fs); %求数字系统的频率特性
[H,w]=freqz(bd,ad);
dbH=20*log10((abs(H)+eps)/max(abs(H)));
subplot(2,2,1); plot(w/pi,abs(H));
ylabel('|H|'); title('幅度响应'); axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]); grid
subplot(2,2,2); plot(w/pi,angle(H)/pi);
ylabel('\phi'); title('相位响应'); axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-1,0,1]); grid
subplot(2,2,3); plot(w/pi,dbH); title('幅度响应(dB)');
ylabel('dB'); xlabel('频率(\pi)'); axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0,0.25,0.4,1]);
set(gca,'YTickMode','manual','YTick',[-50,-15,-1,0]); grid
subplot(2,2,4); zplane(bd,ad);
axis([-1.1,1.1,-1.1,1.1]); title('零极点图');

编写滤波器仿真程序,计算H(z)对心电图信号采样序列x(n)的响应序列y(n)。

matlab 复制代码
xn=[-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];
B=[0.09036 0.09036*2 0.09036];
A=[1,-1.2686,0.7051];
yn=filter(B,A,xn);

figure;
subplot(2,1,1);
stem(0:length(xn)-1,xn,'.'); title('滤波前');
subplot(2,1,2);
stem(0:length(yn)-1,yn,'.'); title('滤波后');

实验内容

1、 用双线性变换法设计的巴特沃斯数字低通滤波器

要求 ωp=0.2π Rp=1dB阻带 ωs=0.35π As=15dB 滤波器采样频率 Fs=10Hz。

matlab 复制代码
close;clear;
wp=0.2*pi; %滤波器的通带截止频率
ws=0.35*pi; %滤波器的阻带截止频率
Rp=1; As=15; %滤波器的通阻带衰减指标
ripple=10^(-Rp/20); %滤波器的通带衰减对应的幅度值
Attn=10^(-As/20); %滤波器的阻带衰减对应的幅度值
Fs=10; T=1/Fs;
Omgp=(2/T)*tan(wp/2); %原型通带频率的预修正
Omgs=(2/T)*tan(ws/2); %原型阻带频率的预修正
[n,Omgc]=buttord(Omgp,Omgs,Rp,As,'s'); %计算阶数n和截止频率
[z0,p0,k0]=buttap(n); %设计归一化的巴特沃思模拟滤波器原型
ba1=k0*real(poly(z0)); %求原型滤波器的系数 b
aa1=real(poly(p0)); %求原型滤波器的系数 a
[ba,aa]=lp2lp(ba1,aa1,Omgc); %变换为模拟低通滤波器
[bd,ad]=bilinear(ba,aa,Fs); %求数字系统的频率特性
[H,w]=freqz(bd,ad);
dbH=20*log10((abs(H)+eps)/max(abs(H)));
subplot(2,2,1); plot(w/pi,abs(H));
ylabel('|H|'); title('幅度响应'); axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,1]);
set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]); grid
subplot(2,2,2); plot(w/pi,angle(H)/pi);
ylabel('\phi'); title('相位响应'); axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,1]);
set(gca,'YTickMode','manual','YTick',[-1,0,1]); grid
subplot(2,2,3); plot(w/pi,dbH); title('幅度响应(dB)');
ylabel('dB'); xlabel('频率(\pi)'); axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0,0.2,0.35,1]);
set(gca,'YTickMode','manual','YTick',[-50,-15,-1,0]); grid
subplot(2,2,4); zplane(bd,ad);
axis([-1.1,1.1,-1.1,1.1]); title('零极点图');
matlab 复制代码
sys=tf(bd,ad,1/Fs)
matlabTextOutput 复制代码
sys =
 
  0.009163 z^4 + 0.03665 z^3 + 0.05498 z^2 + 0.03665 z + 0.009163
  ---------------------------------------------------------------
          z^4 - 2.032 z^3 + 1.82 z^2 - 0.7706 z + 0.1294
 
采样时间: 0.1 seconds
离散时间传递函数。
模型属性

2、用1 设计的数字滤波器对实际心电图信号采样序列(实验原理中已给出)进行滤波处理,分别绘制出滤波前后的心电图波形图和其幅频特性曲线,观察总结滤波作用与效果。

matlab 复制代码
xn=[-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];

yn=filter(bd,ad,xn);
Xw=fft(xn,1024);
Xw2=fft(yn,1024);

figure;
subplot(2,2,1);
stem(0:length(xn)-1,xn,'.'); title('滤波前');
subplot(2,2,3);
plot(linspace(0, 2, 1024),abs(Xw)); xlabel('\omega/\pi');
subplot(2,2,2);
stem(0:length(yn)-1,yn,'.'); title('滤波后');
subplot(2,2,4);
plot(linspace(0, 2, 1024),abs(Xw2)); xlabel('\omega/\pi');

3、设计一个抗混叠低通滤波器(可在实验内容1 的代码上进行修改,截止频率的指标见2.6 节,衰减指标与实验内容1 一样)。

(1)读取音频信号motherland.wav,得到xn;

(2)对xn 进行D=2 的整数倍抽取,得到整数倍抽取后的音频信号yn1;

(3)对xn 先进行抗混叠滤波,再进行D=2 的整数倍抽取,得到音频信号yn2。

(1)音频播放:依次原始声音xn、没有经抗混叠滤波进行整数倍抽取的音频yn1、经过抗混叠滤波进行整数倍抽取的音频yn2,体验音频有频域混叠时的音质。

matlab 复制代码
close;clear;
D=2;
[xn,fs] = audioread( ".\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件\motherland.wav");
sound(xn,fs);
pause(length(xn)/fs);% 播放音频信号,暂停执行程序 length(xn)/fs秒
yn1=xn(1:D:length(xn)); % 每个 D-1个点抽取 1点 ,这里 D=2
sound(yn1,fs/D); % 采用频谱降低到 fs/D

(2) 取原音频 某 段信号,如 n=8000~8199。

画出 该段信号模拟域 幅度 谱 (横坐标为 f Hz);

画出该段信号 D=2抽取 后的 模拟域 幅度谱;

画出该段信号先经过抗混叠滤波再进行 D=2抽取的模拟域幅度谱。

matlab 复制代码
close;
N=2048;
Xn=1/fs*fft(xn(8000:8199),N); % 从 xn中取 200点, N可取 2018
plot((0:N/2-1)*fs/N,abs(Xn(1:N/2))); % 模拟域幅度谱
matlab 复制代码
Yn1=D/fs*fft(yn1(8000:8099),N); % 2点取 1点后,200点长变成了 100点长
plot((0:N/2-1)*fs/(N*D),abs(Yn1(1:N/2)));% 模拟域幅度谱

(3)对xn 先进行抗混叠滤波,再进行D=2 的整数倍抽取,得到音频信号yn2。

matlab 复制代码
[xn,fs] = audioread( ".\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中," + ...
    "每次试验带到实验室)\实验中用到的一些函数和音频图像文件\motherland.wav");
D=2;N=2048;
% 低通滤波器参数
wp = 0.45*pi;  % 通带截止频率
ws = 0.55*pi;  % 阻带截止频率
Rp = 1;       % 通带衰减 (dB)
As = 20;      % 阻带衰减 (dB)
Fs = 2000;    % 采样频率

% 计算滤波器阶数和截止频率
[n, Wn] = buttord(wp/pi, ws/pi, Rp, As);
[b, a] = butter(n, Wn, 'low');

% 频域分析
[H, w] = freqz(b, a, 1024);
dbH = 20*log10(abs(H));

figure;

% 幅度响应
subplot(3,1,1); 
plot(w/pi, abs(H)); 
ylabel('|H|'); 
title('低通滤波器 幅度响应'); 
axis([0, 1, 0, 1.1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.45, 0.55, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]); % 0.707 for -3dB point
grid on;

% 相位响应
subplot(3,1,2); 
plot(w/pi, angle(H)/pi); 
ylabel('\phi (\times\pi)'); 
title('低通滤波器 相位响应'); 
axis([0, 1, -1, 1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.45, 0.55, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1, 0, 1]);
grid on;

% 幅度衰减(dB)
subplot(3,1,3); 
plot(w/pi, dbH); 
ylabel('dB'); 
xlabel('归一化频率 (\times\pi)'); 
title('低通滤波器 幅度衰减(dB)'); 
axis([0, 1, -40, 5]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.45, 0.55, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-40, -20, -1, 0]);
grid on;
matlab 复制代码
figure;
yn2=filter(b,a,xn); % 先滤波
yn2=yn2(1:D:length(xn)); % 再对滤波后的信号取点,每个 D-1个点抽取 1点 ,这里 D=2

Yn2=D/fs*fft(yn2(4000:4099),N);
plot((0:N/2-1)*fs/(D*N),abs(Yn2(1:N/2)));% 模拟域幅度谱

思考题

(1) 设计数字低通滤波器

要求 ωp=0.2π Rp=1dB阻带 ωs=0.35π As=15dB 滤波器采样频率 Fs=10Hz。

指标为:通带截止频率 ωp=0.2π,阻带截止频率ωs=0.3π,通带衰减 Rp=1dB,阻带衰减 As=20dB。

matlab 复制代码
clear;
% 低通滤波器参数
wp = 0.2*pi;  % 通带截止频率
ws = 0.3*pi;  % 阻带截止频率
Rp = 1;       % 通带衰减 (dB)
As = 20;      % 阻带衰减 (dB)
Fs = 2000;    % 采样频率

% 计算滤波器阶数和截止频率
[n, Wn] = buttord(wp/pi, ws/pi, Rp, As);
[b, a] = butter(n, Wn, 'low');

% 频域分析
[H, w] = freqz(b, a, 1024);
dbH = 20*log10(abs(H));

figure;

% 幅度响应
subplot(3,1,1); 
plot(w/pi, abs(H)); 
ylabel('|H|'); 
title('低通滤波器 幅度响应'); 
axis([0, 1, 0, 1.1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.2, 0.3, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]); % 0.707 for -3dB point
grid on;

% 相位响应
subplot(3,1,2); 
plot(w/pi, angle(H)/pi); 
ylabel('\phi (\times\pi)'); 
title('低通滤波器 相位响应'); 
axis([0, 1, -1, 1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.2, 0.3, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1, 0, 1]);
grid on;

% 幅度衰减(dB)
subplot(3,1,3); 
plot(w/pi, dbH); 
ylabel('dB'); 
xlabel('归一化频率 (\times\pi)'); 
title('低通滤波器 幅度衰减(dB)'); 
axis([0, 1, -40, 5]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.2, 0.3, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-40, -20, -1, 0]);
grid on;
matlab 复制代码
sys=tf(b,a,1/Fs)
matlabTextOutput 复制代码
sys =
 
  0.0001766 z^7 + 0.001236 z^6 + 0.003709 z^5 + 0.006182 z^4 + 0.006182 z^3 + 0.003709 z^2 + 0.001236 z + 0.0001766
  -----------------------------------------------------------------------------------------------------------------
                z^7 - 3.847 z^6 + 6.786 z^5 - 6.963 z^4 + 4.445 z^3 - 1.754 z^2 + 0.3944 z - 0.03885
 
采样时间: 0.0005 seconds
离散时间传递函数。
模型属性

(2) 设计数字高通滤波器

指标为:阻带截止频率 ωs=0.4π,通带截 止频率ωp=0.6π,通带衰减 Rp=2dB,阻带衰减 As=30dB。

matlab 复制代码
% 高通滤波器参数
ws = 0.4*pi;  % 阻带截止频率
wp = 0.6*pi;  % 通带截止频率
Rp = 2;       % 通带衰减 (dB)
As = 30;      % 阻带衰减 (dB)
Fs = 2000;    % 采样频率

% 计算滤波器阶数和截止频率
[n, Wn] = buttord(wp/pi, ws/pi, Rp, As);
[b, a] = butter(n, Wn, 'high');

% 频域分析
[H, w] = freqz(b, a, 1024);
dbH = 20*log10(abs(H));

figure;

% 幅度响应
subplot(3,1,1); 
plot(w/pi, abs(H)); 
ylabel('|H|'); 
title('高通滤波器 幅度响应'); 
axis([0, 1, 0, 1.1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.6, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]); % 0.707 for -3dB point
grid on;

% 相位响应
subplot(3,1,2); 
plot(w/pi, angle(H)/pi); 
ylabel('\phi (\times\pi)'); 
title('高通滤波器 相位响应'); 
axis([0, 1, -1, 1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.6, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1, 0, 1]);
grid on;

% 幅度衰减(dB)
subplot(3,1,3); 
plot(w/pi, dbH); 
ylabel('dB'); 
xlabel('归一化频率 (\times\pi)'); 
title('高通滤波器 幅度衰减(dB)'); 
axis([0, 1, -40, 5]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4, 0.6, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-40, -20, -3, 0]);
grid on;
matlab 复制代码
sys=tf(b,a,1/Fs)
matlabTextOutput 复制代码
sys =
 
  0.0129 z^6 - 0.07742 z^5 + 0.1935 z^4 - 0.2581 z^3 + 0.1935 z^2 - 0.07742 z + 0.0129
  ------------------------------------------------------------------------------------
      z^6 + 0.9575 z^5 + 1.12 z^4 + 0.5115 z^3 + 0.2083 z^2 + 0.03757 z + 0.003764
 
采样时间: 0.0005 seconds
离散时间传递函数。
模型属性

(3) 设计数字带通滤波器

指标为:通带范围 0.2π≤ωp≤0.6π,阻带范围 0≤ωs≤0.15π和 0.65π≤ωs≤π,通带衰减 Rp=1dB,阻带衰减 As=45dB。

matlab 复制代码
% 带通滤波器参数
wp = [0.2 0.6]*pi;  % 通带范围
ws = [0.15 0.65]*pi;% 阻带范围
Rp = 1;             % 通带衰减 (dB)
As = 45;            % 阻带衰减 (dB)
Fs = 2000;          % 采样频率

% 计算滤波器阶数和截止频率
[n, Wn] = buttord(wp/pi, ws/pi, Rp, As);
[b, a] = butter(n, Wn, 'bandpass');

% 频域分析
[H, w] = freqz(b, a, 1024);
dbH = 20*log10(abs(H));

figure;

% 幅度响应
subplot(3,1,1); 
plot(w/pi, abs(H)); 
ylabel('|H|'); 
title('带通滤波器 幅度响应'); 
axis([0, 1, 0, 1.1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]);
grid on;

% 相位响应
subplot(3,1,2); 
plot(w/pi, angle(H)/pi); 
ylabel('\phi (\times\pi)'); 
title('带通滤波器 相位响应'); 
axis([0, 1, -1, 1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1, 0, 1]);
grid on;

% 幅度衰减(dB)
subplot(3,1,3); 
plot(w/pi, dbH); 
ylabel('dB'); 
xlabel('归一化频率 (\times\pi)'); 
title('带通滤波器 幅度衰减(dB)'); 
axis([0, 1, -50, 5]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-50, -20, -1, 0]);
grid on;
matlab 复制代码
sys=tf(b,a,1/Fs)
matlabTextOutput 复制代码
sys =
 
                                                                                                                                             3.959e-08 z^46 - 9.105e-07 z^44 + 1.002e-05 z^42 - 7.011e-05 z^40 + 0.0003505 z^38 - 0.001332 z^36 + 0.003996 z^34 - 0.009705 z^32 + 0.01941 z^30 - 0.03235 z^28 + 0.04529 z^26 - 0.05352 z^24 + 0.05352 z^22 - 0.04529 z^20 + 0.03235 z^18 - 0.01941 z^16 + 0.009705 z^14 - 0.003996 z^12 + 0.001332 z^10 - 0.0003505 z^8 + 7.011e-05 z^6 - 1.002e-05 z^4 + 9.105e-07 z^2 - 3.959e-08
  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  z^46 - 10.38 z^45 + 56.11 z^44 - 210.4 z^43 + 615.4 z^42 - 1497 z^41 + 3145 z^40 - 5854 z^39 + 9821 z^38 - 1.503e04 z^37 + 2.12e04 z^36 - 2.773e04 z^35 + 3.383e04 z^34 - 3.866e04 z^33 + 4.155e04 z^32 - 4.209e04 z^31 + 4.029e04 z^30 - 3.651e04 z^29 + 3.137e04 z^28 - 2.557e04 z^27 + 1.98e04 z^26 - 1.457e04 z^25 + 1.019e04 z^24 - 6772 z^23 + 4279 z^22 - 2568 z^21 + 1464 z^20 - 791.4 z^19 + 405.5 z^18 - 196.7 z^17 + 90.1 z^16 - 38.93 z^15 + 15.82 z^14 - 6.032 z^13 + 2.15 z^12 - 0.7134 z^11 + 0.2193 z^10 - 0.06209 z^9 + 0.01607 z^8 - 0.003763 z^7 + 0.0007882 z^6 - 0.0001452 z^5 + 2.301e-05 z^4 - 3.03e-06 z^3 + 3.138e-07 z^2 - 2.306e-08 z + 9.315e-10
 
采样时间: 0.0005 seconds
离散时间传递函数。
模型属性

(4) 设计数字带阻滤波器

指标为:阻带范围 0.2π≤ωs≤0.6π,通带范围 0≤ωp≤0.15π和 0.65π≤ωp≤π,通带衰减 Rp=1dB,阻带衰减 As=45dB。

matlab 复制代码
% 带阻滤波器参数
ws = [0.2 0.6]*pi;  % 阻带范围
wp = [0.15 0.65]*pi;% 通带范围
Rp = 1;             % 通带衰减 (dB)
As = 45;            % 阻带衰减 (dB)
Fs = 2000;          % 采样频率

% 计算滤波器阶数和截止频率
[n, Wn] = buttord(wp/pi, ws/pi, Rp, As);
[b, a] = butter(n, Wn, 'stop');

% 频域分析
[H, w] = freqz(b, a, 1024);
dbH = 20*log10(abs(H));

figure;

% 幅度响应
subplot(3,1,1); 
plot(w/pi, abs(H)); 
ylabel('|H|'); 
title('带阻滤波器 幅度响应'); 
axis([0, 1, 0, 1.1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.707, 1]);
grid on;

% 相位响应
subplot(3,1,2); 
plot(w/pi, angle(H)/pi); 
ylabel('\phi (\times\pi)'); 
title('带阻滤波器 相位响应'); 
axis([0, 1, -1, 1]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1, 0, 1]);
grid on;

% 幅度衰减(dB)
subplot(3,1,3); 
plot(w/pi, dbH); 
ylabel('dB'); 
xlabel('归一化频率 (\times\pi)'); 
title('带阻滤波器 幅度衰减(dB)'); 
axis([0, 1, -50, 5]);
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.15, 0.2, 0.6, 0.65, 1]);
set(gca, 'YTickMode', 'manual', 'YTick', [-50, -20, -1, 0]);
grid on;
matlab 复制代码
sys=tf(b,a,1/Fs)
matlabTextOutput 复制代码
sys =
 
  4.255e-06 z^46 - 7.477e-05 z^45 + 0.0007263 z^44 - 0.005006 z^43 + 0.02711 z^42 - 0.1218 z^41 + 0.4689 z^40 - 1.583 z^39 + 4.764 z^38 - 12.93 z^37 + 31.93 z^36 - 72.32 z^35 + 151 z^34 - 292.3 z^33 + 526.4 z^32 - 884.5 z^31 + 1391 z^30 - 2050 z^29 + 2840 z^28 - 3700 z^27 + 4541 z^26 - 5253 z^25 + 5732 z^24 - 5901 z^23 + 5732 z^22 - 5253 z^21 + 4541 z^20 - 3700 z^19 + 2840 z^18 - 2050 z^17 + 1391 z^16 - 884.5 z^15 + 526.4 z^14 - 292.3 z^13 + 151 z^12 - 72.32 z^11 + 31.93 z^10 - 12.93 z^9 + 4.764 z^8 - 1.583 z^7 + 0.4689 z^6 - 0.1218 z^5 + 0.02711 z^4 - 0.005006 z^3 + 0.0007263 z^2 - 7.477e-05 z + 4.255e-06
  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    z^46 - 9.312 z^45 + 43.3 z^44 - 136 z^43 + 330.4 z^42 - 671 z^41 + 1192 z^40 - 1900 z^39 + 2755 z^38 - 3677 z^37 + 4557 z^36 - 5277 z^35 + 5736 z^34 - 5875 z^33 + 5687 z^32 - 5216 z^31 + 4540 z^30 - 3756 z^29 + 2957 z^28 - 2217 z^27 + 1583 z^26 - 1078 z^25 + 699.6 z^24 - 432.8 z^23 + 255 z^22 - 143.1 z^21 + 76.44 z^20 - 38.81 z^19 + 18.71 z^18 - 8.552 z^17 + 3.7 z^16 - 1.512 z^15 + 0.5821 z^14 - 0.2106 z^13 + 0.07131 z^12 - 0.02251 z^11 + 0.006592 z^10 - 0.00178 z^9 + 0.0004398 z^8 - 9.845e-05 z^7 + 1.973e-05 z^6 - 3.483e-06 z^5 + 5.288e-07 z^4 - 6.667e-08 z^3 + 6.633e-09 z^2 - 4.7e-10 z + 1.787e-11
 
采样时间: 0.0005 seconds
离散时间传递函数。
模型属性
相关推荐
z0006167 分钟前
C语言之函数的参数
c语言·数据结构·算法
St_Ludwig22 分钟前
蓝桥杯疑似例题解答方案(打印任意阶杨辉三角)
c语言·c++·后端·算法·职场和发展·蓝桥杯
HEX9CF40 分钟前
【数字图像处理+MATLAB】通过 Roberts, Prewitt, Sobel, LoG 等算子实现图像边缘检测:使用 edge 函数
开发语言·matlab·edge
机器学习之心1 小时前
预测未来 | MATLAB实现Transformer时间序列预测未来
matlab·transformer·预测未来
心.c1 小时前
0-1背包问题
c++·算法
kitesxian1 小时前
Leetcode146. LRU 缓存(HOT100)
数据结构·算法·leetcode·缓存
BigCowPeking1 小时前
leetcode 排序算法汇总
算法·leetcode·排序算法
eternal__day1 小时前
优选算法(双指针)
算法·leetcode·推荐算法
武昌库里写JAVA1 小时前
SpringBoot+SpringCloud面试题整理附答案
java·开发语言·算法·spring·log4j
手握风云-1 小时前
数据结构(Java版)第五期:ArrayList与顺序表(下)
java·数据结构·算法