
简介面向数字信号处理初学者的低通滤波器仿真资源覆盖巴特沃斯、切比雪夫和椭圆三种经典滤波器类型通过MATLAB脚本对比不同滤波器的频率响应与设计特点帮助解决理论学习与实际仿真脱节的问题。压缩包体积仅1KB包含3个.m脚本文件分别实现对应滤波器的仿真轻量紧凑、便于直接运行三个脚本均围绕低通滤波核心算法编写可作为课程作业或项目选型的入门模板。已有370人学习浏览适合正在学习滤波器设计、准备课程实验或进行工程预研的用户。下载后可直接运行脚本观察通带平坦度、过渡带滚降速率与阻带衰减性能直观理解巴特沃斯的最平坦响应、切比雪夫的陡峭过渡带以及椭圆滤波器的快速衰减特性借助这份示例可快速上手三种低通滤波器的建模与比较也可自行修改阶数、截止频率等参数开展扩展实验节省自行编写代码与调试的时间。1. 三种低通滤波器选型先看复数极点分布再谈仿真做信号处理的人都知道巴特沃斯、切比雪夫、椭圆三种低通滤波器但真正落到仿真时很多人只是换个函数名把图打出来然后对着相似的幅度曲线发愣为什么老师要我比较这三种区别到底在哪我的经验是先记住一句话——巴特沃斯用极点均匀分布在圆上换平坦通带切比雪夫用通带纹波换陡峭过渡带椭圆用通带和阻带同时引入纹波换取最窄的过渡带。这个差异直接体现在 MATLAB 的 butter、cheby1、ellip 函数参数上。如果你正在做低通滤波仿真或者要交一份数字信号处理课程设计这份带 btdt.m、qbdt.m、tydt.m 三个脚本的资源正好可以拆开研究。适合需要快速对比三种设计并复现到真实信号上的工程师和学生。2. 巴特沃斯、切比雪夫、椭圆滤波器的设计原理与 MATLAB 参数映射2.1 三种滤波器的幅度响应特征和适用场景低通滤波器的核心指标是通带平坦度、过渡带宽度和相位线性度。巴特沃斯滤波器的幅度平方函数是1/(1(ω/ωc)^2N)在通带和阻带都是单调变化没有纹波因此被称为最大平坦滤波器。代价是过渡带很宽想获得陡峭的衰减必须提高阶数。它的相位响应在通带内相对线性对波形失真影响较小适合音频处理这类看重原始波形的应用。切比雪夫滤波器有两种类型。切比雪夫 I 型在通带内允许等纹波阻带单调衰减因为把误差均匀分配到通带同等阶数下过渡带比巴特沃斯窄很多。切比雪夫 II 型恰好相反通带平坦、阻带有纹波实际使用频率比 I 型低。椭圆形滤波器引入了雅可比椭圆函数通带和阻带都存在等纹波在相同的阶数下可以获得三种滤波器中最陡峭的过渡带。工程上选型时我会先问两个问题系统对通带纹波是否敏感相位失真是否会影响后续解调或特征提取如果只是把直流附近的信号从高频噪声里捞出来椭圆滤波器往往最划算。2.2 从模拟到数字butter、cheby1、cheby2、ellip 的函数用法与双线性变换MATLAB 信号处理工具箱把模拟原型到数字滤波器的映射封装进了几个函数。设计数字巴特沃斯低通滤波器最基础写法是% 设计一个 5 阶巴特沃斯低通数字滤波器 fs 1000; % 采样率 1000 Hz fc 100; % 截止频率 100 Hz Wn fc / (fs/2); % 归一化截止频率fs/2 是奈奎斯特频率 [b, a] butter(5, Wn, low);这里Wn必须归一化到 0 到 1 之间fc/(fs/2)就是截止频率占奈奎斯特频率的比例。函数返回的b是前向滤波系数a是反馈滤波系数也就是差分方程中的分子和分母多项式系数。spectrum 画图时可以配合freqz(b, a)查看响应。切比雪夫 I 型滤波器相比之下多了一个通带纹波参数RpRp 1; % 通带最大纹波 1 dB [b, a] cheby1(5, Rp, Wn, low);Rp单位是 dB表示通带内允许的增益波动。Rp越小通带越平坦但同等阶数下过渡带越宽。切比雪夫 II 型使用cheby2参数从通带纹波换成阻带衰减RsRs 40; % 阻带衰减 40 dB [b, a] cheby2(5, Rs, Wn, low);椭圆形滤波器的设计函数是ellip它同时需要Rp和Rs[b, a] ellip(5, Rp, Rs, Wn, low);这几个函数内部都经历了模拟原型设计再到双线性变换的流程。双线性变换把 s 平面的虚轴映射到 z 平面的单位圆因此数字滤波器不会出现频率混叠但频率轴产生了非线性压缩。这意味着在高频段数字滤波器的实际截止频率与模拟原型的截止频率有偏差MATLAB 通过归一化频率参数在函数内部做了预畸变补偿。函数名通带特性阻带特性额外参数典型应用butter平坦平坦无音频、相位敏感场合cheby1等纹波单调Rp通信中频滤波cheby2平坦等纹波Rs需要通带线性的场景ellip等纹波等纹波Rp, Rs抗混叠、高滚降率2.3 先算阶数再设计buttord、cheb1ord、ellipord 的换算逻辑直接指定阶数往往导致过设计或欠设计。规范做法是先给设计指标让工具函数算出最小阶数。以 filter 设计指标为例通带边界 80 Hz阻带边界 120 Hz通带纹波 1 dB阻带衰减 40 dB采样率 1000 Hz。fs 1000; fp 80; % 通带边界频率 fr 120; % 阻带边界频率 Rp 1; % 通带纹波 dB Rs 40; % 阻带衰减 dB Wp fp / (fs/2); % 归一化通带边界 Ws fr / (fs/2); % 归一化阻带边界 [nB, WnB] buttord(Wp, Ws, Rp, Rs); [nC, WnC] cheb1ord(Wp, Ws, Rp, Rs); [nE, WnE] ellipord(Wp, Ws, Rp, Rs);buttord返回的最小阶数 nB 通常比cheb1ord返回的 nC 大一到两倍而ellipord给出的 nE 一般最小。Wn返回值就是可以直接传给 butter 等函数的实际截止频率它不一定等于fp的归一化值因为需要根据阻带衰减重新调整。三个 ord 函数输入输出格式相同但内部设计公式完全不同因此不能混用。3. btdt.m、qbdt.m、tydt.m三种低通滤波仿真脚本的拆解3.1 脚本命名与对应关系解压后资源里的btdt.m、qbdt.m、tydt.m三个文件看文件名拼音缩写就能对上号btdt是巴特Butterworth低通qbdt是切比Chebyshev低通tydt是椭圆Tuo Yuan低通。三个脚本在结构上是同一套模板生成带噪声的输入信号、调用对应的滤波器设计函数、用filter实现滤波、把时域波形和频谱对比画出来。这样设计的目的是让三种滤波器在完全相同的输入信号下做对照实验。3.2 巴特沃斯脚本的核心结构信号生成与 filter 滤波我一般会把仿真信号构造成两个频率分量一个在通带内一个在阻带内滤波后能直观看到降噪效果。filter比conv更适合做实时滤波因为它考虑了初始状态和递归结构。% btdt.m 巴特沃斯低通滤波仿真 fs 1000; % 采样率 1000 Hz t 0:1/fs:1; % 1 秒时间轴 x sin(2*pi*20*t) 0.6*sin(2*pi*150*t); % 20Hz 信号 150Hz 噪声 fc 100; % 截止频率 [N, Wn] buttord(fc/(fs/2), 150/(fs/2), 1, 40); [b, a] butter(N, Wn, low); y filter(b, a, x); % 零状态滤波 figure; subplot(2,1,1); plot(t, x); % 原始信号 subplot(2,1,2); plot(t, y); % 滤波后信号buttord把通带边界设为 100 Hz阻带边界设为 150 Hz这样 150 Hz 分量会衰减到 40 dB 以下。filter使用直接 II 型转置结构适合处理长序列并且能保持滤波器的稳定性。如果你需要滤波前后相位一致可以换成filtfilt但零相位滤波会引入两倍的群延迟这里只是为了看幅度衰减所以用filter更直接。3.3 切比雪夫脚本中 Rp 的影响与 I/II 型差异qbdt.m与巴特沃斯的区别主要在滤波器设计那一行。切比雪夫 I 型需要提供通带纹波% qbdt.m 切比雪夫 I 型低通滤波仿真 fs 1000; t 0:1/fs:1; x sin(2*pi*20*t) 0.6*sin(2*pi*150*t); Rp 1; % 通带纹波 1 dB [ N, Wn] cheb1ord(100/(fs/2), 150/(fs/2), Rp, 40); [b, a] cheby1(N, Rp, Wn, low); y filter(b, a, x); figure; subplot(2,1,1); plot(t, x); subplot(2,1,2); plot(t, y);把Rp从 1 改成 0.5过渡带会变宽改成 2过渡带更窄但通带内增益波动更明显。切比雪夫原理是让误差在通带内振荡所以通带纹波的大小直接和过渡带宽度互换。如果改成切比雪夫 II 型只需把cheb1ord换成cheb2ordcheby1换成cheby2并把纹波参数改成阻带衰减Rs此时通带完全平坦但阻带会出现等纹波。3.4 椭圆脚本同时控制 Rp 和 Rs 的仿真tydt.m中同时出现Rp和Rs两个指标。椭圆滤波器没有单独的归一化截止频率参数它的通带和阻带边界由ellipord返回的Wn决定纹波和衰减单独控制这使得设计自由度最高。% tydt.m 椭圆低通滤波仿真 fs 1000; t 0:1/fs:1; x sin(2*pi*20*t) 0.6*sin(2*pi*150*t); Rp 1; % 通带纹波 1 dB Rs 40; % 阻带衰减 40 dB [N, Wn] ellipord(100/(fs/2), 150/(fs/2), Rp, Rs); [b, a] ellip(N, Rp, Rs, Wn, low); y filter(b, a, x); % 频域验证 Y fft(y); f (0:length(y)-1) * fs / length(y); figure; plot(f, 20*log10(abs(Y))); xlabel(频率 (Hz)); ylabel(幅度 (dB));这段代码把滤波后的信号做 FFT并换算成 dB 显示。频率轴f从 0 到 fs 均匀分布取前一半就能看到 0500 Hz 的频谱。150 Hz 处的谱线通常会比原始信号低 40 dB 以上而 20 Hz 处基本保持不变。椭圆滤波器的阶数在相同指标下最低运算量最小但通带边缘有纹波过度依赖它会在某些系统中引入非线性失真。4. 同阶数下三种滤波器的频率响应对比与选型边界4.1 用 freqz 对比幅度响应和群延迟把三种滤波器设计成相同阶数N5、相同截止频率fc100 Hz这时候差异就非常直观。我常用的对比脚本如下fs 1000; fc 100; N 5; Rp 1; Rs 40; [b_b, a_b] butter(N, fc/(fs/2)); [b_c, a_c] cheby1(N, Rp, fc/(fs/2)); [b_e, a_e] ellip(N, Rp, Rs, fc/(fs/2)); [h_b, f] freqz(b_b, a_b, 512, fs); [h_c, ~] freqz(b_c, a_c, 512, fs); [h_e, ~] freqz(b_e, a_e, 512, fs); figure; plot(f, 20*log10(abs(h_b)), LineWidth, 1.2); hold on; plot(f, 20*log10(abs(h_c)), --, LineWidth, 1.2); plot(f, 20*log10(abs(h_e)), :, LineWidth, 1.2); legend(Butterworth,Chebyshev I,Elliptic); xlabel(频率 (Hz)); ylabel(幅度 (dB)); xlim([0 300]);freqz是验证数字滤波器最基础的工具默认返回复数频率响应取绝对值再转成 dB 就是幅度频谱。freqz的分母参数a如果缺省会被当作 1所以不能漏写。同样的N5下巴特沃斯在 200 Hz 处只衰减约 30 dB切比雪夫能到 50 dB 左右椭圆则能压到 60 dB 以下。这说明在阶数受限时椭圆滚降最快。4.2 相同设计指标下的最小阶数对比换一个角度固定设计指标为通带边界 80 Hz、阻带边界 120 Hz、通带纹波 1 dB、阻带衰减 40 dB运行前面那段ord对比代码结果类似滤波器类型最小阶数设计函数Butterworth8buttordChebyshev I5cheb1ordElliptic4ellipord这份数值来自我本机运行结果电路不同批次会有细微差别。可以看到椭圆低通滤波器能用 4 阶就完成巴特沃斯 8 阶才能达到的阻带要求。阶数降低带来的直接收益是滤波延迟更小、数值误差更少、运算资源占用更低。但代价在频响之外——椭圆的零极点会跑来调配纹波导致相位严重弯曲。4.3 相位失真与抗混叠场景中的选型边界很多人只盯着幅度谱选滤波器结果在通过模拟信号处理时发现波形严重变形。关键原因是切比雪夫和椭圆滤波器在通带边界处的群延迟峰值远高于巴特沃斯。对于心电信号、图像边缘检测这类对波形形态敏感的任务我会优先使用巴特沃斯或切比雪夫 II 型因为它们的相位响应在通带内更平坦。如果你做的是 ADC 前端抗混叠滤波情况就完全相反。抗混叠只需要保证高于奈奎斯特频率的成分被充分压制过渡带越窄越好此时椭圆滤波器是标准选择。这种边界条件希望你在仿真时体会切换滤波器类型时观察groupdelay函数画出的群延迟曲线。groupdelay(b, a, 512, fs)会输出每条频点的延迟样本数频率越靠近截止频率延迟峰值越高波形过冲越严重。5. 用零极点图完成三种滤波器仿真结果的快速验证仿真做完不能只看波形还要从系统函数角度确认设计是否合理。zplane是 MATLAB 里最直接的验证工具它把数字滤波器的零点和极点画在单位圆上。调用方式很简单figure; zplane(b_b, a_b); % 巴特沃斯零极点图 figure; zplane(b_e, a_e); % 椭圆滤波器零极点图巴特沃斯数字滤波器的极点全部落在单位圆内并且绕着一个弧线分布没有零点在有限 z 平面上所以它的幅度谱是全极点型滚降平稳。椭圆滤波器则会在阻带内沿单位圆分布多个零点正是这些零点把阻带压出极深的衰减但也让相位曲线在每个零点附近急剧转折。看到零点和单位圆之间的距离你就能判断滤波器的稳定性——任何极点到单位圆圆周的距离小于 1e-6 时实际硬件实现中很容易因系数微调而震荡。另一个验证技巧是比对滤波前后总能量。一个合格的低通滤波器不会放大信号只会转移频带能量。用sum(x.^2)和sum(y.^2)分别计算滤波前后的能量如果滤波后能量反而高于原始信号说明滤波器通带有增益或者滤波器系数不稳定需要回头检查归一化截止频率是否超过了 1。对于贝塞尔或椭圆这类高阶滤波器我还会用round(b, 15)做系数截断测试确认定点化后响应没有明显恶化。这套流程跑通了你手里那三个.m脚本才算真正吃透而不是只在 Y 轴上看到一条曲线。本文还有配套的精品资源点击获取