MATLAB——不同方法设计模拟低通滤波器

题目1
通过模拟滤波器原型设计一个巴特沃斯模拟低通滤波器,要求通带截止频率fp=2kHz,通带最大衰减Rp<=1dB,阻带截止频率fs=5kHz,阻带最小衰减As>=20dB。
程序

clc;
fp=2e3;
fs=5e3;
rp=1;
as=20;

[n,wn]=buttord(fp,fs,rp,as,'s');
[z,p,k]=buttap(n);
[b,a]=zp2tf(z,p,k);
freqs(b,a)

程序本身不难,就是来认识几个新朋友吧。
[n,wn]=buttord(fp,fs,rp,as,‘s’);
这个函数用于计算巴特沃斯滤波器的阶数和截止频率。它的输入参数包括通带截止频率(fp)、阻带截止频率(fs)、通带最大衰减(rp)和阻带最小衰减(as),以及滤波器的类型('s’表示模拟滤波器,'z’表示数字滤波器)。这个函数的输出包括阶数(n)和截止频率(wn)。
[z,p,k]=buttap(n);
这个函数用于生成一个巴特沃斯滤波器的极点和零点。它的输入参数是阶数(n),它的输出参数是极点(p)和零点(z),以及一个系数(k),用于归一化滤波器的增益。
[b,a]=zp2tf(z,p,k);
zp2tf:这个函数用于将极点和零点转换为传递函数的分子和分母形式。它的输入参数是极点(p)、零点(z)和系数(k),它的输出是分子系数(b)和分母系数(a)。
freqs(b,a)
这个函数用于绘制滤波器的频率响应曲线。它的输入参数是分子系数(b)和分母系数(a),它的输出是一个包含频率响应的复数向量。这个函数可以用来检查设计的滤波器是否符合要求。
运行结果
在这里插入图片描述
题目2
分别利用巴特沃斯、切比雪夫、椭圆滤波器设计一个模拟低通滤波器原形,通带截止频率为6KHZ,通带最大衰减为1DB,阻带截止频率为15KHZ,阻带最大衰减为30DB。
程序

% 设计巴特沃斯滤波器
fp = 6e3;       % 通带截止频率
fs = 15e3;      % 阻带截止频率
rp = 1;         % 通带最大衰减
as = 30;        % 阻带最小衰减
fsamp = 50e3;   % 采样频率
[n, wn] = buttord(2*pi*fp, 2*pi*fs, rp, as, 's');
[z, p, k] = butter(n, wn, 's');
[b1, a1] = zp2tf(z, p, k);

% 设计切比雪夫滤波器
[n, wn] = cheb1ord(2*pi*fp, 2*pi*fs, rp, as, 's');
[z, p, k] = cheby1(n, rp, wn, 's');
[b2, a2] = zp2tf(z, p, k);

% 设计椭圆滤波器
[n, wn] = ellipord(2*pi*fp, 2*pi*fs, rp, as, 's');
[z, p, k] = ellip(n, rp, as, wn, 's');
[b3, a3] = zp2tf(z, p, k);

% 绘制滤波器的频率响应曲线
f = linspace(0, fsamp/2, 1000);
[h1, w1] = freqs(b1, a1, f);
[h2, w2] = freqs(b2, a2, f);
[h3, w3] = freqs(b3, a3, f);
figure;
semilogx(w1/(2*pi), 20*log10(abs(h1)), 'b', ...
         w2/(2*pi), 20*log10(abs(h2)), 'r--', ...
         w3/(2*pi), 20*log10(abs(h3)), 'g-.', ...
         [fp fp], [-100 10], 'k', ...
         [fs fs], [-100 10], 'k');
grid on;
xlabel('频率 (Hz)');
ylabel('幅度响应 (dB)');
legend('巴特沃斯滤波器', '切比雪夫滤波器', '椭圆滤波器', ...
       '通带截止频率', '阻带截止频率');

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46155417/article/details/129480738