FIR 滤波器设计

article/2025/10/23 14:40:43

目录

线性相位滤波器


        与无限持续时间脉冲响应 (IIR) 滤波器相比,具有有限持续时间脉冲响应的数字滤波器(全零或 FIR 滤波器)既有优点又有缺点。

FIR 滤波器具有以下主要优点:

  • 它们可以具有精确的线性相位
  • 它们始终稳定
  • 设计方法通常是线性的
  • 它们可以在硬件中高效实现

滤波器启动瞬态具有有限持续时间。

        FIR 滤波器的主要缺点是,要达到同样的性能水平,其所需阶数远高于 IIR 滤波器。相应地,这些滤波器的延迟通常比同等性能的 IIR 滤波器大得多。

FIR 滤波器

滤波器设计方法

说明

滤波器函数

加窗

对指定的矩形滤波器的截断傅里叶逆变换应用加窗

fir1, fir2, kaiserord

多频带(包含过渡带)

对频率范围的子带使用等波纹或最小二乘方法

firls、firpm、firpmord

约束最小二乘

根据最大误差约束,在整个频率范围内最小化平方积分误差

fircls, fircls1

任意响应

任意响应,包括非线性相位和复滤波器

cfirpm

升余弦

具有平滑正弦过渡的低通响应

rcosdesign

线性相位滤波器

        除 cfirpm 外,所有 FIR 滤波器设计函数都只设计线性相位滤波器。这些滤波器系数或“抽头”遵循偶数或奇数对称关系。根据这种对称性以及滤波器的阶数 n 是偶数还是奇数,线性相位滤波器(存储在长度为 n +1 的向量 b 中)对其频率响应有一定的固有限制。

线性相位滤波器类型滤波器阶数系数的对称性响应 H(f)、f = 0响应 H(f)、f = 1 (Nyquist)

I 类

偶数

偶数:

b(k)=b(n+2−k), k=1,...,n+1

无限制

无限制

II 类

奇数

偶数:

b(k)=b(n+2−k), k=1,...,n+1

无限制

H(1) = 0

III 类

偶数

奇数:

b(k)=−b(n+2−k), k=1,...,n+1

H(0) = 0

H(1) = 0

IV 类

奇数

奇数:

b(k)=−b(n+2−k), k=1,...,n+1

H(0) = 0

无限制

        线性相位FIR滤波器的相位延迟和群延迟在整个频带内相等且恒定。对于n阶线性相位FIR滤波器,群延迟为n/2,滤波后的信号延迟n/2个时间步(其傅里叶变换的幅值按滤波器的幅值响应进行缩放)。该属性保持通带中信号的波形;也就是说,没有相位失真。

        默认情况下,函数 fir1、fir2、firls、firpm、fircls 和 fircls1 都可用于设计 I 类和 II 类线性相位 FIR 滤波器。rcosdesign 只用于设计 I 类滤波器。在给定 'hilbert' 或 'differentiator' 标志的情况下,firls 和 firpm 都可用于设计 III 和 IV 类线性相位 FIR 滤波器。cfirpm 可用于设计任何类型的线性相位滤波器和非线性相位滤波器。

        注意:由于 II 类滤波器在 Nyquist 频率(“高”频率)下的频率响应为零,fir1 不用于设计 II 类高通和带阻滤波器。在这些情况下,如果n为奇数值,fir1 将阶加 1,并返回 I 类滤波器。

加窗方法
        假设一个截止频率为 ω0 弧度/秒的理想的矩形数字低通滤波器。该滤波器在幅值小于 ω0 的所有频率上都具有幅值 1,在幅值介于 ω0 和 π 之间的频率上具有幅值 0。其脉冲响应序列 h(n) 为:

        该滤波器不可实现,因为它的脉冲响应是无限的和非因果的。要创建有限持续时间脉冲响应,请通过应用加窗来截断它。通过在此截断中保留脉冲响应的中心部分,可以获得线性相位 FIR 滤波器。例如,一个低通截止频率 ω0 为 0.4 π 弧度/秒的、长度为 51 的滤波器为:

b = 0.4*sinc(0.4*(-25:25));

        此处应用的加窗是简单的矩形窗。根据 Parseval 定理,长度为 51 的滤波器在积分最小二乘意义上最接近理想的低通滤波器。以下命令在 FVTool 中显示滤波器的频率响应:

fvtool(b,1)

        请注意,下图中显示的 y 轴采用幅值的二次方。可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。如图所示:

        响应中会出现振铃和波纹,尤其是在频带边缘附近。这种“吉布斯效应”不会随着滤波器长度的增加而消失,但非矩形窗会减小其幅值。在时域中将信号乘以一个窗函数会使信号在频域中发生卷积或平滑。将长度为 51 的 Hamming 窗应用于滤波器,并使用 FVTool 显示结果:

b = 0.4*sinc(0.4*(-25:25));
b = b.*hamming(51)';
fvtool(b,1)

        请注意,下图中显示的 y 轴采用幅值的二次方。可以通过右键点击轴标签并从菜单中选择幅值平方来进行此设置。如图所示:

        使用 Hamming 窗可以大大降低振铃。这一改善以过渡带宽度和最优性为代价:加窗的滤波器需要更长时间从通带下降到阻带,且无法最小化平方误差积分。

标准频带 FIR 滤波器设计:fir1

        fir1 使用最小二乘逼近计算滤波器系数,然后通过加窗对脉冲响应进行平滑处理。有关加窗及其属性的概述,可以参考加窗法。fir1 类似于 IIR 滤波器的设计函数,因为它用于设计标准频带配置(低通、带通、高通和带阻)条件下的滤波器。以下语句:

n = 50;
Wn = 0.4;
b = fir1(n,Wn);

        创建行向量 b,其中包含 n 阶 Hamming 窗滤波器的系数。这是一个低通线性相位 FIR 滤波器,截止频率为 Wn。Wn 是介于 0 和 1 之间的数字,其中 1 对应于 Nyquist 频率,即采样频率的一半。(与其他方法不同,此处 Wn 对应于 6 dB 点。)要获得高通滤波器,只需将 'high' 添加到函数的参数列表中。要获得带通或带阻滤波器,将 Wn 指定为包含通带边缘频率的二元素向量。为带阻配置追加 'stop'。

        b = fir1(n,Wn,window) 使用列向量 window 中指定的窗口进行设计。向量 window 的长度必须为 n+1 个元素。如果未指定窗口,fir1 将应用 Hamming 窗。

        Kaiser 窗阶估计.  kaiserord 函数估计滤波器阶数、截止频率和 Kaiser 窗 β 参数,使之满足一组给定的滤波器设定。在给定频带边缘向量和对应的幅值向量以及最大允许波纹的情况下,kaiserord 为 fir1 函数返回适当的输入参数。

多频带 FIR 滤波器设计:fir2

        fir2 函数还可用于设计加窗的 FIR 滤波器,但具有任意形状的分段线性频率响应。这与 fir1 不同,后者仅设计具有标准低通、高通、带通和带阻配置的滤波器。以下命令:

n = 50;
f = [0 .4 .5 1];
m = [1  1  0 0];
b = fir2(n,f,m);

        返回行向量 b,其中包含 n 阶 FIR 滤波器的 n+1 个系数,其频率幅值特征与向量 f 和 m 给出的频率幅值特征相匹配。f 是频率点的向量,范围从 0 到 1,其中 1 代表 Nyquist 频率。m 是向量,包含 f 中指定点的指定幅值响应。(该函数的对应 IIR 函数是 yulewalk,后者还可基于任意分段线性幅值响应设计滤波器。)

        参考代码:

作者:肥猫大师
链接:https://zhuanlan.zhihu.com/p/337397832
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。%% 原始信号
fs = 1000;          % 采样频率
t = 0:1/fs:2-1/fs;  % 时间
singal0 = sin(2*pi*1*t);      % 未加噪声的信号
SNR = 15;           % 信号信噪比
singal = awgn(singal0,SNR);    % 在加入高斯白噪声
%% IIR滤波 (butterworth滤波器)
fstop = 20;         % 低通截止频率
wn = fstop/(fs/2);  % 归一化截止频率
N_IIR = 5;          % IIR阶数
[b_iir,a_iir] = butter(N_IIR,wn) % IIR滤波器参数
singal_iir = filter(b_iir,a_iir,singal); %IIR滤波
%% FIR滤波 (hamming窗)
N_FIR = 15;            % FIR阶数
b_fir = fir1(N_IIR,wn) % FIR滤波器参数
singal_fir = filter(b_fir,1,singal); %FIR滤波
%% 滑动平均 (平滑常数M=10;)
wsize = 10;            % 平滑常数
b_avg = ones(1,wsize)/wsize;   % 权值
singal_avg = filter(b_avg,1,singal);  %滑动平均滤波
%% 输出比较
figure
subplot(2,2,1)
plot(t,singal)
title('\fontname{宋体}\fontsize{12}原始信号');
xlabel('\fontname{Arial}\fontsize{12}t');       
ylabel('\fontname{Arial}\fontsize{12}singal');
grid on;
subplot(2,2,2)
plot(t,singal_iir)
title('\fontname{宋体}\fontsize{12}5阶IIR滤波');
xlabel('\fontname{Arial}\fontsize{12}t');       
ylabel('\fontname{Arial}\fontsize{12}singal(iir)');
grid on;
subplot(2,2,3)
plot(t,singal_fir)
title('\fontname{宋体}\fontsize{12}15阶FIR滤波');
xlabel('\fontname{Arial}\fontsize{12}t');       
ylabel('\fontname{Arial}\fontsize{12}singal(fir)');
grid on;
subplot(2,2,4)
plot(t,singal_avg)
title('\fontname{宋体}\fontsize{12}滑动平均(常数10)');
xlabel('\fontname{Arial}\fontsize{12}t');       
ylabel('\fontname{Arial}\fontsize{12}singal(avg)');
grid on;

        如图所示:


http://chatgpt.dhexx.cn/article/avtFhn9w.shtml

相关文章

设计巴特沃斯滤波器实现高通滤波

首先在MATLAB上通过设计一个巴特沃斯滤波器来实现一个高通滤波器。 %设计一个巴特沃斯高通滤波器 %滤除一个300HZ的正弦信号 clear; fn 10000;%采样频率 fp 900;%通带截止频率 fs 600;%阻带截止频率 Rp 2;%通带最大衰减 Rs 20;%阻带最小衰减 figure(1); Wp fp/(fn/2); W…

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 4. 频率域高通滤波器 图像边缘化其它灰度的急剧变化与高频分量有关,因此可以…

四阶巴特沃斯高通滤波器

一、设计方案 1.理论参考 图1.1-1 巴特沃斯高通滤波器归一化幅频响应 图1.1-2 巴特沃斯低通、高通电路阶数n与增益的关系 图1.1-3 二阶高通滤波电路及其传递函数 2.电路设计 综合滤波器滤波效果及电路实现难度,采用四阶高通滤波器 图1.2-1 四阶高通滤波电路 查表得到…

matlab设计模拟高通滤波器

简单记录下在matlab上如何设计出模拟的高通滤波器,包括:巴特沃斯滤波器、切比雪夫I型滤波器、切比雪夫II型滤波器、椭圆型滤波器。 %设计高通滤波器 %巴特沃斯、切比雪夫I型、切比雪夫II型、椭圆型滤波器clear all;%wp和ws分别是通带和阻带的频率(截止频…

IIR滤波器设计

matlab代码在最后,仅供参考。 高通滤波器设计 HP:fp400Hz,fs300Hz,Fs1000Hz,αp3dB,αs35dB。 巴特沃斯高通滤波器设计 切比雪夫高通滤波器设计 带通滤波器设计 BP:fsl200Hz,f1300Hz,fsh500H…

设计线性相位高通FIR滤波器

调用MATLAB工具箱函数frl设计线性相位高通FIR滤波器。要求通带截止频奉为0.6 Πrad,限带截止频率为0.45 Πrad,通带最大衰成为0.2 dB.阻带最小衰减为45dB.显示所设计的单位脉冲响应h(n)的数据,并画出损耗函数曲线。 代码: Fs80000; T1/Fs; wp2*pi*4000/…

【转载】设计一个RC高通滤波器或低通滤波器

设计一个RC高通滤波器或低通滤波器 qlexcel 2019-05-03 11:42:42 30981 收藏 93 分类专栏: 器件&传感器 模拟电路&电路分析 一、引出 在一些信号电路中通常会存在一些我们不需要的噪声,比如高频噪声。这个时候就需要滤波器来处理他们…

MATLAB设计滤波器代码

自测可用,最基本的代码,无拔高。 目录 1、设计IIR模拟高低通滤波器 2、设计IIR数字滤波器 3、设计FIR数字滤波器 1、设计IIR模拟高低通滤波器 wp 2*pi*4000;ws 2*pi*1000; ap 0.1;as 40; [N,wc] buttord(wp,ws,ap,as,s); [BH,AH] butter(N,wc…

【滤波器】基于matlab实现微波带低通高通带通滤波器设计

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

设计高通滤波器 HP

高通和低通类似,本篇文章用到的a、b参数,我在低通中有给出那个图 如果大家要设计高通滤波器,大家可以和低通滤波器一起考虑~~~~ ———————————————————————————————— example1: { in there we can see: R1…

二阶高通有源滤波器设计与仿真测试

二阶高通有源滤波器设计与仿真测试 1.压控电压源法二阶高通有源滤波器设计与仿真测试(1)电路结构(2)设计步骤(3)设计举例(4)仿真测试 2.无限增益多路反馈型二阶高通有源滤波器的设计…

信号处理系统综合设计-最小阶数的IIR数字高通滤波器

微信公众号:创享日记 发送:最小阶 获取完整报告(含源代码程序结果分析) 设计一个最小阶数的IIR数字高通滤波器,指标要求如下: 以小于1dB的衰减通过150Hz的分量;以至少40dB抑制100Hz的分量&…

一维序列数据处理:FIR高通滤波器设计

1. 加窗法设计滤波器 为什么要加窗设计滤波器?因为为了降低DFT的频率泄露。那什么是DFT频率泄露以及为什么加窗设计就可以降低DFT的频率泄露?解释这个之前,我们先介绍一下DFT(离散傅里叶变换)和三角函数的正交性知识&…

悬置线高通滤波器设计

从大学到工作,初次接触过的人都觉得我很啰嗦,我很想简洁明了表达,我也读了很多高效表达方法论的书,刻意练习还是发现效果不佳。后来自我反省,发现啰嗦也有可爱的一面,出发点是自己的真诚,我想把…

【Matlab】如何使用Filter Design设计低通、高通、带阻滤波器

如何使用Filter Design设计低通、高通、带阻数字滤波器。 文章目录 前言 一、低通滤波器 二、高通滤波器 三、带阻滤波器 前言 使用Matlab自带的Filter Design APP可以方便、快捷地设计各种FIR/IIR数字滤波器,并且能输出数字滤波器的阶数、幅度响应、相位响应等…

基于汉宁窗的FIR高通滤波器设计

摘 要 本次课程设计是采用MATLAB进行设计基于汉宁窗的FIR高通滤波器音频去噪,在设计过程中,首先录制一段不少于5秒的音频音乐,作为输入信号,并对录制的信号进行采样;其次使用MATLAB会出采样后的语音信号的时域波形和频…

数字滤波器之高通滤波器设计

要求:设计一款高通滤波器,用在音频信号处理过程中,滤掉100Hz以下的信号。 实现方法:通过在Z平面放置零极点的来设计数字滤波器。 设计要点:单位圆上对应于需要加强频率的点附近放置极点,即wπ处附近落极点…

PCB布线及后仿真验证过程(干货满满,建议收藏)

一、布线的基本要求 布线次序考虑 1) 规则驱动布线遵循的基本步骤 定义禁布区,或控制区若有规则约束,要求设置规则试布线,评估单板是否可以布通,若不能布通,需要采用策略Fanout后对覆盖率检查,通常要求满…

PCB布线原则总结

1、环路最小规则------信号线与其回来构成的环路面积极可能小 2、短线规则------布线长度应尽可能短,振荡器应放在离器件很近的位置 3、开环检查规则----- 一般情况下不允许出现一端悬空的布线 4、闭环检查规则------防止信号在不同层间形成闭环 5、20H规则------防…

Altium_Designer PCB布线不受控制

我这里是单位问题: 之前左下角网格Grid设置为 mm,所以我在指定布线规则的时候,系统也是按照 mm 来的 解决方法: 英文输入的情况下,按 快捷键 Q 切换网格单位为 mil 就可以了