请根据要求帮我修改下面的代码,要求如下:用 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 09:24:51 浏览: 167
根据要求,修改后的 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:确定滤波器类型
由于要设计椭圆型数字高通滤波器,因此需要先确定滤波器类型。
步骤2:计算滤波器阶数
由于题目中没有给出滤波器的阶数,因此需要先计算出滤波器的阶数。根据椭圆型数字滤波器的公式,可以得到:
$$N \geq \frac{log_{10}\left[\frac{10^{0.1A_s}-1}{10^{0.1A_p}-1}\right]}{2log_{10}(\omega_p/\omega_s)}$$
其中,$A_p$为通带最大衰减量,$A_s$为阻带最小衰减量,$\omega_p$为通带截止频率,$\omega_s$为阻带截止频率。将题目中的参数代入公式中,可以得到:
$$N \geq \frac{log_{10}\left[\frac{10^{0.1\times20}-1}{10^{0.1\times1}-1}\right]}{2log_{10}(0.3/0.2)} \approx 2.4$$
由于阶数必须为整数,因此将其向上取整,得到滤波器的阶数$N=3$。
步骤3:计算归一化截止频率
通过计算可得到通带截止频率为$\omega_p=0.3\pi$,阻带截止频率为$\omega_s=0.2\pi$。由于MATLAB中的数字滤波器设计函数要求输入的截止频率必须是归一化的,因此需要先将其归一化。归一化的截止频率可以通过以下公式计算:
$$\Omega_p = \frac{\omega_p}{\omega_n}$$
$$\Omega_s = \frac{\omega_s}{\omega_n}$$
其中,$\omega_n$为Nyquist频率,一般取为$\pi$。将参数代入公式中,可以得到:
$$\Omega_p = \frac{0.3\pi}{\pi} = 0.3$$
$$\Omega_s = \frac{0.2\pi}{\pi} = 0.2$$
步骤4:使用MATLAB设计数字滤波器
在MATLAB中,可以使用`ellip`函数来设计椭圆型数字滤波器。代码如下:
```
% 滤波器阶数
N = 3;
% 通带最大衰减量(dB)
Ap = 1;
% 阻带最小衰减量(dB)
As = 20;
% 归一化截止频率
Wp = 0.3;
Ws = 0.2;
% 设计数字滤波器
[b, a] = ellip(N, Ap, As, Wp);
```
其中,`N`为滤波器阶数,`Ap`为通带最大衰减量,`As`为阻带最小衰减量,`Wp`为归一化的通带截止频率,`Ws`为归一化的阻带截止频率。`ellip`函数返回的`b`和`a`分别为滤波器的分子和分母多项式系数。
步骤5:绘制幅频特性、相频特性和零极点分布图
在MATLAB中,可以使用`freqz`函数来绘制滤波器的幅频特性和相频特性,使用`zplane`函数来绘制滤波器的零极点分布图。代码如下:
```
% 绘制幅频特性和相频特性
[h, w] = freqz(b, a);
mag = abs(h);
phase = angle(h);
subplot(2, 1, 1);
plot(w/pi, mag);
title('Amplitude Response');
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Magnitude (dB)');
subplot(2, 1, 2);
plot(w/pi, phase);
title('Phase Response');
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Phase (rad)');
% 绘制零极点分布图
subplot(1, 1, 1);
zplane(b, a);
title('Pole-Zero Plot');
```
其中,`freqz`函数返回的`h`和`w`分别为滤波器的频率响应和频率向量。`abs`和`angle`函数分别用于计算频率响应的模和相位。`subplot`函数用于将多个图形绘制在同一个窗口中。`zplane`函数用于绘制滤波器的零极点分布图。
步骤6:列出系统传递函数式
根据MATLAB中`ellip`函数返回的分子和分母多项式系数,可以列出系统传递函数式。代码如下:
```
% 列出系统传递函数式
syms z;
H(z) = poly2sym(b, z) / poly2sym(a, z);
pretty(vpa(H(z), 4));
```
其中,`poly2sym`函数用于将分子和分母多项式系数转化为符号多项式,`syms`函数用于定义符号变量,`vpa`函数用于控制输出精度。`H(z)`为系统传递函数式,`pretty`函数用于美化输出结果。
综上,完整代码如下:
```
% 滤波器阶数
N = 3;
% 通带最大衰减量(dB)
Ap = 1;
% 阻带最小衰减量(dB)
As = 20;
% 归一化截止频率
Wp = 0.3;
Ws = 0.2;
% 设计数字滤波器
[b, a] = ellip(N, Ap, As, Wp, 'high');
% 绘制幅频特性和相频特性
[h, w] = freqz(b, a);
mag = abs(h);
phase = angle(h);
subplot(2, 1, 1);
plot(w/pi, mag);
title('Amplitude Response');
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Magnitude (dB)');
subplot(2, 1, 2);
plot(w/pi, phase);
title('Phase Response');
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Phase (rad)');
% 绘制零极点分布图
subplot(1, 1, 1);
zplane(b, a);
title('Pole-Zero Plot');
% 列出系统传递函数式
syms z;
H(z) = poly2sym(b, z) / poly2sym(a, z);
pretty(vpa(H(z), 4));
```
希望这个回答能够帮助到您,如有疑问欢迎继续提问。
阅读全文
相关推荐
















