用matlab等波纹法设计一个奈奎斯特滤波器
时间: 2023-11-29 10:22:40 浏览: 43
步骤:
1. 定义滤波器的通带和阻带频率。
2. 根据通带和阻带频率计算出滤波器的通带和阻带增益。
3. 设计一个理想的低通滤波器,使其通带增益为1,阻带增益为0。
4. 用波纹法将理想滤波器变换成奈奎斯特滤波器。
5. 观察滤波器的频率响应和幅频特性。
MATLAB代码:
% 定义滤波器的通带和阻带频率
wp = 0.2*pi;
ws = 0.3*pi;
% 计算滤波器的通带和阻带增益
Ap = 1;
As = 40;
% 设计理想的低通滤波器
[n, Wn] = buttord(wp/(2*pi), ws/(2*pi), Ap, As);
[b, a] = butter(n, Wn);
% 用波纹法将理想滤波器变换成奈奎斯特滤波器
N = 20; % 设计N阶奈奎斯特滤波器
H = freqz(b, a, N, 'whole');
Hn = H(1:N/2+1);
theta = angle(Hn);
G = Ap./abs(Hn);
GdB = 20*log10(G);
delta = (As-20)/20;
delta_theta = delta*pi/180;
R = (1-delta)/(1+delta);
K = tan(delta_theta/2);
p = zeros(1, N/2);
for k = 1:N/2
p(k) = K*exp(1j*(2*k-1)*pi/(2*N));
GdB(k) = GdB(k) - 10*log10(abs((1-R^2)/(1-2*R*cos(theta(k))+R^2)));
end
% 构造分式函数
b1 = poly(p);
a1 = poly(conj(p));
b2 = conv(b, b1);
a2 = conv(a, a1);
% 观察滤波器的频率响应和幅频特性
[H2, w] = freqz(b2, a2);
figure;
subplot(2, 1, 1);
plot(w/pi, 20*log10(abs(H2)));
title('幅频特性');
xlabel('频率/\pi');
ylabel('幅值/dB');
grid on;
subplot(2, 1, 2);
plot(w/pi, angle(H2));
title('相频特性');
xlabel('频率/\pi');
ylabel('相位/rad');
grid on;