十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

线性相位FIR滤波器设计:对称性与窗函数法解析

线性相位FIR滤波器设计:对称性与窗函数法解析 简介这份PPT课件聚焦数字信号处理课程中有限长单位冲激响应FIR数字滤波器设计的核心难点面向高校信号处理相关专业学生及需要巩固基础知识的工程技术人员。课件从IIR与FIR的对比切入强调FIR可严格线性相位、任意幅度特性且因果稳定的优点也提及与IIR相比阶次较高、可用FFT计算等特点随后系统讲解了线性相位FIR滤波器的两类设计思路给出h(n)偶对称与奇对称的充要条件并推导频率响应与相位函数阐明了系统函数在z平面零点极点分布规律以及幅度函数随N奇偶变化的对称特性涵盖了引言、线性相位条件和幅度函数特点等关键章节。整套资源为单个PPT文件大小2.15MB内容组织连贯适合辅助课堂学习或考前集中复习。目前已有122人学习按章节讲解便于读者快速定位有助于系统掌握FIR滤波器设计从理论推导到实际应用的关键知识。1. 线性相位不是优化出来的是结构决定的接手过实际信号处理项目的人都清楚IIR滤波器用椭圆或巴特沃斯逼近能拿到很好的幅度特性代价是相位曲线在通带边缘被扭成一条畸变的弧线。只要信号里同时存在多个频率分量输出波形就会和输入对不上心电信号的特征波位置、通信系统的码元同步都会在这种相位失真下出问题。FIR滤波器之所以在工程里被优先考虑不是因为它的计算效率高恰恰相反同样指标下它的阶数往往比IIR高一截而是因为线性相位这个性质是白给的——只要单位冲激响应h(n)满足关于中心点的对称或反对称关系。也就是说设计FIR滤波器时相位指标不需要参与逼近它是结构带来的红利。这篇内容对应的高西全《数字信号处理》第九章核心就是把这种对称关系讲透两类线性相位的充要条件、幅度函数的四种组合、以及如何把这些结论落成可用的滤波器参数。适合正在学数字信号处理课程、或者刚开始接触滤波器设计工具的人读完之后应该能直接看懂窗函数法和等波纹设计中那些系数限制的来由。2. 线性相位FIR的结构条件h(n)的对称性如何决定相位函数2.1 从频率响应推导第一类线性相位FIR滤波器的系统函数是H(z)Σh(n)z⁻ⁿ在z平面有N-1个零点z0处是N-1阶极点因此系统天然稳定。这一点是FIR区别于IIR的关键优势——它没有反馈通道极点全部固定在原点稳定性不用讨论。当h(n)为实序列时频率响应可以写成H(eʲʷ) Σh(n)e⁻ʲʷⁿ如果h(n)关于n(N-1)/2偶对称即h(n)h(N-1-n)把求和式按对称项两两配对每个配对项之和是2h(n)cos[ω(n-(N-1)/2)]于是H(eʲʷ)必然能分离出一个纯指数因子e⁻ʲʷ⁽ᴺ⁻¹⁾ᐟ²。这个因子的相位是-ω(N-1)/2对ω严格线性群延时τ-dφ/dω(N-1)/2是常数。这就是第一类线性相位。反过来说如果群延时是常数且系统的群延时恰好等于(N-1)/2个采样周期那么h(n)一定满足偶对称。这是一组充要条件第九章课件里用对称中心的条件阐述的正是这一点。注意这个结论成立的前提是h(n)为实序列复数系数滤波器不在这个分析框架里。我用一个小例子验证这个推导。N5取h[0.1, 0.2, 0.4, 0.2, 0.1]对称中心在n2处。用MATLAB算频率响应后看相位h [0.1, 0.2, 0.4, 0.2, 0.1]; N length(h); [H, w] freqz(h, 1, 512, whole); phase unwrap(angle(H)); % 理论群延时 tau (N - 1) / 2; % 用相位差计算实际群延时 group_delay_est -diff(phase) / diff(w); plot(w(1:end-1), group_delay_est, LineWidth, 1.5); hold on; yline(tau, --, 理论群延时); xlabel(频率 (rad/sample)); ylabel(群延时 (样本)); title(N5 偶对称FIR的群延时);这里freqz返回的H是复数频率响应angle得到的是包裹相位unwrap消除2π跳变后才能和理论相位-ω(N-1)/2做比较。实际群延时用相位差分估计理论上应该在所有频率上等于常数2只有边界数字频率处因FFT分辨率出现波动。如果h(n)只有微小的不对称比如把其中一个0.2改成0.2001群延时曲线就不再平直这可以作为检验滤波器是否严格线性相位的快速手段。2.2 第二类线性相位的条件与相位偏移当h(n)关于n(N-1)/2奇对称即h(n)-h(N-1-n)时配对项的公共因子变成e⁻ʲʷ⁽ᴺ⁻¹⁾ᐟ²乘一个虚数因子表明频率响应除了线性项之外还多了一个固定的π/2相位偏移。相位函数写作-ω(N-1)/2-π/2群延时仍然是(N-1)/2。这被称为第二类线性相位。两类线性相位对滤波器设计的影响差异深远。偶对称可以用于设计包含ω0处非零响应的滤波器因为H(eʲ⁰)可以不为零奇对称在ω0处必然有零点因此奇对称FIR无法直接做低通。奇对称FIR适合微分器和希尔伯特变换器例如一阶数字微分器的频率响应就是jω正好对应90度相位偏移。下表给出两类线性相位对应的设计约束对称类型h(n)约束相位函数群延时可实现滤波器第一类偶对称h(n)h(N-1-n)-ω(N-1)/2(N-1)/2低通、带通、高通、带阻第二类奇对称h(n)-h(N-1-n)-ω(N-1)/2-π/2(N-1)/2微分器、希尔伯特变换器、带通工程中最容易犯的错误是设计高通滤波器时选了奇对称序列结果高频端幅度特性始终无法逼近1。检查方式很简单写出序列后先看对称中心处的值再逐对对折比较。对于N为偶数的情况如N8对称中心在n3.5处h(3)和h(4)是一对h(0)和h(7)是一对。此时偶对称意味着h(3)h(4)奇对称意味着h(3)-h(4)且两者不能同时为零这对系数是设计时的关键边界。2.3 工程中用MATLAB检验对称性实际拿到一组长系数人力检查对称性不现实。常见做法是写一个对称性检测函数用翻转序列与原始序列做逐点比较function [sym_type, center] check_fir_symmetry(h, tol) if nargin 2, tol 1e-10; end N length(h); center (N - 1) / 2; err_even max(abs(h - fliplr(h))); err_odd max(abs(h fliplr(h))); if err_even tol sym_type even; % 第一类线性相位 elseif err_odd tol sym_type odd; % 第二类线性相位 else sym_type none; end end该函数接收两个参数h是滤波器系数向量tol是浮点比较的容差。fliplr把系数序列左右翻转偶对称要求翻转前后完全一致奇对称要求翻转后取负与原序列一致。容差建议设在1e-10量级因为滤波器设计工具返回的系数通常是浮点数直接相等比较会因舍入误差而失败。若返回类型是none则滤波器在严格意义上不具备线性相位此时应检查是否使用了带非线性相位约束的设计方法或者系数在量化过程中被截断破坏了对称关系。在定点化实现时这一检查尤其重要系数从双精度转成16位定点后对称性可能被破坏导致群延时出现微小但可测的抖动。3. 四种幅度函数类型N奇偶与对称性如何限定滤波器边界3.1 幅度函数的一般形式课件底稿里反复出现一个关键区分幅度函数M(ω)和频率响应H(eʲʷ)不是一回事。H(eʲʷ)包含了相位因子而幅度函数是实函数只描述振幅随频率的变化。将对称条件代入频率响应表达式后按N奇偶分为四种情况。以偶对称、N为奇数为例求和项全部配成cos[ω(n-(N-1)/2)]项加中心项h((N-1)/2)因此幅度函数是若干余弦项的线性组合可以写成M(ω)Σa(n)cos(ωn)其中系数a(n)由原h(n)变换得到。偶对称、N为偶数时配对后残留一个在ωπ处为零的余弦项组合因此M(π)0。奇对称的情况类似只是余弦换成正弦。下面的表列出这四种情况各自的边界特性h(n)对称性N奇偶M(ω)在ω0M(ω)在ωπ典型应用偶对称N奇数可非零可非零全类型滤波器偶对称N偶数可非零必为0低通、带通、带阻奇对称N奇数必为0可非零希尔伯特变换器奇对称N偶数必为0必为0微分器、窄带带通3.2 用频率采样法快速验证幅度边界实际设计滤波器时经常需要在确定系数之前判断某种指标组合是否可实现。一个很直接的办法是在MATLAB里构造一个满足对称条件的随机序列做频率采样后直接观察幅度特性的边界值N 16; % 偶数阶 rng(42); h_even randn(1, N/2); h_sym [h_even, fliplr(h_even)]; % 偶对称N为偶数 M abs(freqz(h_sym, 1, 1024)); fprintf(M(0) %.6f, M(pi) %.6f\n, M(1), M(end)); % 对 N 为奇数时的偶对称序列 N2 15; h_even2 randn(1, (N21)/2); h_sym2 [h_even2, fliplr(h_even2(1:end-1))]; % 注意中心点不重复 M2 abs(freqz(h_sym2, 1, 1024)); fprintf(N奇数偶对称: M(pi) %.6f\n, M2(end));解释第一段代码h_even是随机生成的8个系数拼上自身翻转形成16点偶对称序列。这里没有中心点因为N为偶数时对称中心落在两个样本之间。freqz计算幅度响应后M(1)对应ω0处的幅度M(end)对应ωπ处。运行这段代码只要随机数种子固定你会看到N为偶数偶对称情况下M(pi)是1e-15量级的数值也就是理论上的零。N为奇数偶对称构造时中心点h_even2(end)只用了一次翻转部分要去掉中心点再拼接这是初学构造对称序列时最容易写错的地方。3.3 为什么这四种边界特性重要这四种边界特性直接影响指标分配。如果你需要一个在ωπ处衰减无穷大的高通滤波器那么根据上表只能选N为奇数且偶对称的结构。此时切比雪夫逼近或窗函数法的系数输出都会满足这个约束你不需要在优化里额外加惩罚项。反过来说如果用N为偶数偶对称序列去逼近高通特性无论阶数取多高ωπ处的幅度始终为零逼近代价极大设计结果会出现严重的振荡。这种结构性约束是理论课和工具箱使用之间的关键桥梁很多所谓“滤波器设计不收敛”的问题根源不是算法参数没调好而是结构和指标自相矛盾。用fdatool或MATLAB的designfilt设计高通滤波器时工具会自动选择N奇数偶对称的约束。但在自定义优化设计里比如用最陡下降法迭代求系数时必须在迭代前把序列约束在对称子空间内否则迭代过程和你的线性相位要求是冲突的。4. 窗函数法设计流程与fir1参数解析4.1 从理想滤波器到实际系数保持线性相位的前提下设计FIR滤波器最常见的做法是窗函数法。思路是先确定理想频率响应H_d(eʲʷ)及其单位冲激响应h_d(n)理想低通的h_d(n)是sinc函数无限长且非因果直接截断必然引入吉布斯效应。解决办法是用一个有限长窗函数w(n)去加窗取h(n)h_d(n)·w(n)再平移(n-(N-1)/2)保证因果。窗函数的选择直接影响三个指标主瓣宽度决定过渡带宽度旁瓣相对幅度决定阻带衰减窗长N决定整体频率分辨率。常用窗函数中矩形窗主瓣最窄但第一旁瓣只有-13dB汉宁窗旁瓣快速衰减但主瓣加宽凯泽窗通过参数β在两者之间连续调节。确定N的常见做法是以汉明窗为例过渡带宽度近似等于4π/N根据指标要求的过渡带Δω反推N≥ceil(4π/Δω)。阻带衰减不满足时再换凯泽窗用β调旁瓣电平。4.2 用fir1和designfilt实现带通滤波器MATLAB里fir1是窗函数法设计的标准入口。设计一个采样率Fs1000Hz通带200-300Hz阶数N50的带通滤波器Fs 1000; % 采样率 Hz N 50; % 滤波器阶数系数长度为 N1 fcut [200 300] / (Fs/2); % 归一化截止频率 b fir1(N, fcut, bandpass, hamming(N1)); freqz(b, 1, 1024, Fs);fir1的第一个参数是阶数注意系数长度为阶数加1即N1个系数。第二个参数是归一化截止频率单位是奈奎斯特频率的倍数所以200Hz和300Hz要除以Fs/2。第三个参数指定滤波器类型bandpass表明这是一个带通滤波器fir1内部会自动处理ω0和ωπ处的幅度约束。第四个参数是窗函数长度必须与系数长度一致即N1。这里用hamming(N1)而不是hamming(N)是初学时最常见的漏配错误MATLAB会在长度不匹配时报错但如果你直接用默认窗函数则工具会隐式选择长度匹配的汉明窗。等波纹设计用firpm更合适它允许分别指定不同频带的权重在同等阶数下阻带衰减更均匀代价是设计时间略长N 60; f [0 0.15 0.25 0.45 0.55 1]; % 频带边界归一化 a [0 0 1 1 0 0]; % 各频带期望幅度 w [10 1 10]; % 三段频带的权重 b2 firpm(N, f, a, w); [Hf, wf] freqz(b2, 1, 1024); plot(wf/pi, 20*log10(abs(Hf))); grid on;这里的f向量是频带边界点必须从0开始到1结束且边界点成对出现格式要求相邻点是同一频带的边缘。a向量给出每个边界点的期望幅度值0.15和0.25之间是过渡带幅度不需要指定。w向量给三段频带分配权重阻带权重设为10表示阻带衰减的优化优先级更高。firpm输出系数自动保证偶对称线性相位特性因此无需额外检查。权重设置的经验法则是重点压制的频带权重取10到100之间过高会让其他频带的波纹变大。4.3 设计完成后的验证指标系数拿到后不能直接交给下游处理先看三件事幅度响应是否满足通带波纹与阻带衰减指标群延时是否恒为常数零点分布是否符合线性相位约束。零点的镜像共轭特性是线性相位FIR的结构指纹实系数线性相位滤波器的零点相对单位圆镜像成对出现一个零点在z₁处则其倒数、共轭、共轭倒数也必然是零点。用zplane画零极点图时如果看到单位圆内外的零点不成镜像关系说明滤波器可能不是线性相位。计算群延时用grpdelay函数它返回每频率点的群延时值。理想的线性相位FIRgrpdelay输出是一个常数向量等于(N)/2。由于实际计算时频率采样点在单位圆上边界处略有偏差。如果群延时曲线在通带内有明显波动要回头检查是否偶然混入了IIR系数这也是后面章节做信号处理时最隐蔽的坑。5. 实际应用中的对称性保障与系数定点化FIR滤波器在音频去噪和生物医学信号处理里的使用频率远高于IIR。以心电信号去除肌电干扰为例信号频段约0.5Hz到40Hz肌电干扰集中在100Hz以上采样率取250Hz时想保形滤波相位失真的代价是QRS波群的峰位置偏移几毫秒这在心律分析里会导致误判。使用上一节的fir1设计出低通滤波器后通带内群延时恒定QRS波群的所有频率成分都延迟相同时间波形形态保持不变峰位置整体平移一个固定样本数在下游算法里减去这个量即可恢复杂乱时间基准。实际工程里FIR滤波器常被部署到FPGA或DSP上。定点化过程中系数从double量化到16位时对称性可能会被舍入破坏。保留偶数对称的一个直接方法是先量化一半系数再用镜像对称生成另一半。以Xilinx FIR Compiler为代表的IP核在配置时会有对称系数选项选择后IP核内部只存储一半乘法器系数资源消耗几乎减半。这种优化方式要求设计端输出的系数严格对称量化后也要通过2.3节的check_fir_symmetry函数复检。若检测结果是对称类型为none通常原因是舍入模式选择了round而不是floor或者量化过程先转成浮点中间格式再做round引入细微误差。最后提一个实用验证技巧用卷积核对群延时。线性相位系统对输入信号的整体延迟等于群延时常数那么在MATLAB里构造一个短脉冲序列比如[1, 0, 0, 0, ...]通过filter(b, 1, impulse)后找出输出峰值所在位置该位置减去输入峰值位置就是实际延迟样本数。对比理论值(N)/2如果存在超过1个样本的偏差检查系数是否在传递过程中被截断或重叠存储的边界问题。这个测试比grpdelay更直观适合每次部署到新环境后做回归验证。本文还有配套的精品资源点击获取
返回列表