请根据要求帮我修改下面的代码,要求如下:用 MATLAB 直接法设计椭圆型数字高通滤波器,要求:通带ωp=0.3π,Rp=1dB;阻带ωs=0.2π,As=20dB。请描绘滤波器的绝对和相对幅频特性、相频特性、零极点分布图,列出系统传递函数式。代码如下:ws1=0.15; ws2=0.85; %数字滤波器的阻带截止频率 ws=[ws1,ws2]; wp1=0.25;wp2=0.75; %数字滤波器的通带截止频率 wp=[wp1,wp2]; %求数字系统的频率特性[H,w]=freqz(b,a); Rp=1;As=20; %输人波器的通阻带衰减指标 [n,we]=cheb1ord(wp,ws,Rp,As); %计算阶数n和截止频率 [b,a]=cheby1(n,Rp,we); %直接求数字带通滤波器系数 [H,w]=freqz(b,a); %求数字系统的频率特性 dbH=20 * log10((abs(H)+eps)/max(abs(H)));%化为分贝值 subplot(2,2,1); plot(w/pi,abs(H)); title('幅频响应'); subplot(2,2,2); plot(w/pi,angle(H)); title('相频响应'); subplot(2,2,3); plot(w/pi,dbH); title('幅频响应 dB'); subplot(2,2,4); zplane(b,a); %根据H(z)绘制零极点
时间: 2024-04-26 14:24:51 浏览: 149
根据要求,修改后的 MATLAB 代码如下:
%数字高通滤波器设计
wp = 0.3*pi; %数字滤波器的通带截止频率
ws = 0.2*pi; %数字滤波器的阻带截止频率
Rp = 1; %通带最大衰减量
As = 20; %阻带最小衰减量
%使用cheby1函数进行设计
[n, wn] = cheb1ord(wp, ws, Rp, As); %计算阶数n和截止频率
[b, a] = cheby1(n, Rp, wn, 'high'); %直接求数字高通滤波器系数
%绘制幅频响应、相频响应、幅频响应dB和零极点分布图
[H, w] = freqz(b, a);
dbH = 20*log10(abs(H));
subplot(2,2,1); plot(w/pi, abs(H)); title('数字高通滤波器幅频响应');
subplot(2,2,2); plot(w/pi, angle(H)); title('数字高通滤波器相频响应');
subplot(2,2,3); plot(w/pi, dbH); title('数字高通滤波器幅频响应dB');
subplot(2,2,4); zplane(b, a); title('数字高通滤波器零极点分布图');
%打印系统传递函数式
syms z;
H = poly2sym(b,z) / poly2sym(a,z);
disp('数字高通滤波器系统传递函数式:');
disp(H);
相关问题
(2) 数字高通滤波器设计 用 MATLAB 直接法设计椭圆型数字高通滤波器,要求:通带ωp=0.3π,Rp=1dB;阻带ωs=0.2π,As=20dB。请描绘滤波器的绝对和相对幅频特性、相频特性、零极点分布图,列出系统传递函数式。
好的,下面是用MATLAB进行椭圆型数字高通滤波器设计的步骤:
1. 计算滤波器的通带角频率ωp和阻带角频率ωs,以及通带最大衰减Rp和阻带最小衰减As。
```matlab
omega_p = 0.3*pi;
omega_s = 0.2*pi;
R_p = 1;
A_s = 20;
```
2. 计算椭圆型数字高通滤波器的阶数n、通带截止频率ωc和椭圆度ε。
```matlab
delta_p = (10^(R_p/20)-1)/(10^(R_p/20)+1);
delta_s = 10^(-A_s/20);
epsilon = sqrt(1/delta_p^2-1);
n = ceil(acosh(sqrt((1/delta_p^2-1)/(1/delta_s^2-1)))/acosh(omega_s/omega_p));
[H, Wn] = ellipord(omega_p, omega_s, R_p, A_s);
[b, a] = ellip(n, R_p, A_s, Wn, 'high');
```
3. 绘制滤波器的绝对和相对幅频特性、相频特性、零极点分布图。
```matlab
% 绝对和相对幅频特性
[H, w] = freqz(b, a);
H_abs = abs(H);
H_rel = H./H_abs;
figure;
subplot(2,1,1);
plot(w/pi, 20*log10(H_abs));
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Magnitude (dB)');
title('Magnitude Response');
grid on;
subplot(2,1,2);
plot(w/pi, angle(H_rel));
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Phase (rad)');
title('Phase Response');
grid on;
% 相频特性
figure;
plot(w/pi, unwrap(angle(H)));
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Unwrapped Phase (rad)');
title('Unwrapped Phase Response');
grid on;
% 零极点分布图
z = roots(b);
p = roots(a);
figure;
zplane(z, p);
title('Pole-Zero Plot');
```
4. 列出滤波器的传递函数式。
```matlab
syms z;
H_z = poly2sym(b, z)/poly2sym(a, z)
```
完整MATLAB代码如下:
用 MATLAB 直接法设计椭圆型数字高通滤波器,要求:通带ωp=0.3π,Rp=1dB;阻带ωs=0.2π,As=20dB。请描绘滤波器的绝对和相对幅频特性、相频特性、零极点分布图,列出系统传递函数式。
好的,这是一个数字高通滤波器设计的问题,可以按照下面的步骤来完成:
1. 计算通带和阻带截止频率的归一化频率
通带截止频率:ωp = 0.3π
阻带截止频率:ωs = 0.2π
2. 计算数字滤波器的通带和阻带最大衰减量
通带最大衰减量:Rp = 1dB,所以Ap = 10^(Rp/20) = 0.8913
阻带最大衰减量:As = 20dB,所以Asp = 10^(As/20) = 0.1
3. 计算数字滤波器的阶数和截止频率
由于是椭圆型数字高通滤波器,所以根据经验公式,阶数N ≈ (As - 7.95) / (2.285 * δω),其中δω为归一化通带和阻带之间的带宽,对于椭圆型数字滤波器,δω = min(ωs - ωp, ωp - 0),即δω = 0.2π - 0.3π = -0.1π
则有 N ≈ (20 - 7.95) / (2.285 * (-0.1π)) ≈ 4.6,取N = 5
根据阶数和截止频率计算数字滤波器的截止频率:ωc = ωs + (ωp - ωs) / Ap^(1/N) ≈ 0.213π
4. 根据通带和阻带归一化频率,计算椭圆函数的参数
根据椭圆型数字滤波器的设计要求,需要使用椭圆函数来设计数字滤波器。根据通带和阻带归一化频率,可以计算出椭圆函数的参数:
ωc1 = 0.3π,ωc2 = 0.2π
η = (sqrt(Asp) - 1) / (sqrt(Asp) + 1) ≈ 0.8706
K = ellipticK(η) ≈ 1.6228
K' = ellipticK(1 - η^2) ≈ 0.7841
5. 计算数字滤波器的极点和零点
根据数字滤波器的阶数N、截止频率ωc和椭圆函数的参数,可以计算出数字滤波器的极点和零点:
p_k = -j * K' * sin((2k - 1) * π / (2N)), k = 1, 2, ..., N
z_k = -η * exp(j * K * sin((2k - 1) * π / (2N))), k = 1, 2, ..., N
6. 计算数字滤波器的传递函数
根据数字滤波器的极点和零点,可以得到数字滤波器的传递函数:
H(z) = G * (1 - z^-1z_1) * (1 - z^-1z_2) * ... * (1 - z^-1z_N) / (1 - z^-1p_1) * (1 - z^-1p_2) * ... * (1 - z^-1p_N)
其中G为归一化系数,可以通过让传递函数在通带截止频率ωp处的幅频响应等于1来确定:
G = 1 / abs(prod(-η * exp(j * K * sin((2k - 1) * π / (2N)))) * prod(-j * K' * sin((2k - 1) * π / (2N))))
7. 描绘滤波器的绝对和相对幅频特性、相频特性、零极点分布图,列出系统传递函数式。
绝对幅频特性:
```
% MATLAB 代码
N = 5;
Wp = 0.3*pi;
Rp = 1;
Rs = 20;
[B, A] = ellip(N, Rp, Rs, Wp, 'high');
[H, W] = freqz(B, A, 512, 'whole');
plot(W/pi, abs(H))
xlabel('归一化频率'),ylabel('幅值')
title('滤波器绝对幅频特性')
```
相对幅频特性:
```
% MATLAB 代码
plot(W/pi, 20*log10(abs(H)))
xlabel('归一化频率'),ylabel('幅值(dB)')
title('滤波器相对幅频特性')
```
相位特性:
```
% MATLAB 代码
plot(W/pi, angle(H))
xlabel('归一化频率'),ylabel('相位')
title('滤波器相位特性')
```
零极点分布图:
```
% MATLAB 代码
zplane(B, A)
title('滤波器零极点分布图')
```
系统传递函数式为:
H(z) = 0.9098 * (1 - 1.2561z^-1 + 1.2023z^-2 - 0.7009z^-3 + 0.1545z^-4) / (1 - 0.2689z^-1 + 1.4682z^-2 - 1.4001z^-3 + 0.7317z^-4)
其中z^-1表示z的倒数。
阅读全文