FIR滤波器设计
FIR vs. IIR滤波器
与无限持续时间脉冲响应(IIR)滤波器相比,具有有限持续时间脉冲响应(全零或FIR滤波器)的数字滤波器既有优点也有缺点。
FIR滤波器具有以下主要优点:
FIR滤波器的主要缺点是,它们通常需要比IIR滤波器更高的滤波器阶数才能达到给定的性能水平。相应地,这些滤波器的延迟往往比同等性能的滤波器要大得多IIR滤波器。
FIR滤波器概述
线性相位滤波器
除了cfirpm
,所有FIR滤波器的设计功能只设计线性相位滤波器。的这种过滤器的过滤器系数或“水龙头”服从偶或奇对称关系。取决于这种对称性,以及顺序n滤波器的是偶数或奇数,一个线性相位滤波器(存储在长度n+ 1的向量b
)对其有某些固有的限制频率响应。
线性相位滤波器 | 过滤器订单 | 系数对称性 | 响应H(f), f= 0 |
响应H(f), f= 1(奈奎斯特) |
---|---|---|---|---|
I型 |
甚至 |
即使是:
|
没有限制 |
没有限制 |
II型 |
奇怪的 |
即使是:
|
没有限制 |
H(1) |
类型III |
甚至 |
奇怪的:
|
H(0) |
H(1) |
IV型 |
奇怪的 |
奇怪的:
|
H(0) |
没有限制 |
的线性相位FIR滤波器的相位延迟和群延迟在频段内相等且不变。为了订单n线性相位FIR滤波器,群时延为n/2,滤波后的信号仅仅延迟为n/2个时间步(其傅里叶变换的幅度由滤波器的幅度响应缩放)。该特性保留了通带中信号的波形;也就是说,没有相位失真。
的函数fir1
,的故事
,firls
,firpm
,fircls
,fircls1
所有设计类型I和II线性相位FIR滤波器默认。rcosdesign
只设计I型过滤器。这两个firls
而且firpm
设计III型和IV型线性相位FIR滤波器希尔伯特的
或“区别”
国旗。cfirpm
可以设计任何类型的线性相位滤波器,以及非线性相位滤波器。
请注意
由于II型滤波器的频率响应在奈奎斯特频率(“高”频率)为零,fir1
不设计II型高通和带阻滤波器。对奇值n
在这些情况下,fir1
将1添加到订单中并返回I型筛选器。
窗口的方法
考虑理想的或“砖墙”数字低通滤波器,其截止频率为ω0rad / s。该滤波器在幅度小于ω的所有频率上均为幅度10,频率在ω之间时为0级0和π。它的脉冲响应序列h(n)是
这个滤波器是不可实现的,因为它的脉冲响应是无限的和非因果的。要创建一个有限持续时间的脉冲响应,可以通过应用窗口来截断它。通过在截断过程中保留脉冲响应的中心部分,可以得到线性相位FIR滤波器。例如,具有低通截止频率的长度为51的滤波器ω0等于0.4 π rad/s
B = 0.4*sinc(0.4*(-25:25));
这里应用的窗口是一个简单的矩形窗口。根据Parseval定理,在积分最小二乘意义上,这是最接近理想低通滤波器的长度为51的滤波器。下面的命令在FVTool中显示滤波器的频率响应:
fvtool (b, 1)
注意y下图中显示的-轴是大小的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
在响应中会出现振铃和波纹,特别是在频带边缘附近。这种“吉布斯效应”不会随着滤波器长度的增加而消失,但非矩形窗口会减小其大小。在时域乘上一个窗口会导致频域的卷积或平滑。在过滤器上应用一个长度为51的汉明窗口,并使用FVTool显示结果:
B = 0.4*sinc(0.4*(-25:25));B = B .*汉明(51)';fvtool (b, 1)
注意y下图中显示的-轴是大小的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
使用汉明窗可以大大减少振铃。这种改进是以过渡宽度(加窗版本从通带过渡到阻带需要更长的时间)和最优性(加窗版本没有最小化集成平方误差)为代价的。
标准带FIR滤波器设计:fir1
fir1
使用最小二乘近似来计算滤波器系数,然后用窗口平滑脉冲响应。有关窗口及其属性的概述,请参见窗户.fir1
类似于IIR滤波器的设计功能,因为它是用于设计标准带配置的滤波器:低通、带通、高通和带阻。
的语句
N = 50;Wn = 0.4;b = fir1(n,Wn);
创建行向量b
包含该阶的系数n
Hamming-windowed过滤器。这是一个低通,线性相位FIR滤波器与截止频率Wn
.Wn
为0到1之间的数字,其中1对应奈奎斯特频率,采样频率的一半。(与其他方法不同,这里Wn
对应6 dB点)对于高通过滤器,只需追加“高”
到函数的参数列表。对于带通或带阻滤波器,请指定Wn
作为包含通带边缘频率的两元向量。附加“停止”
用于带阻配置。
b = fir1(n,Wn,window)
使用列向量中指定的窗口窗口
为了设计。向量窗口
必须n + 1
元素长。如果没有指定窗口,fir1
应用一个汉明窗口。
Kaiser窗阶估计。的kaiserord
函数估计滤波器顺序,截止频率,和凯撒窗口参数需要满足给定的规格集。给定频带边向量和相应的幅度向量,以及最大允许纹波,kaiserord
类的适当输入参数fir1
函数。
多波段FIR滤波器设计:fir2
的的故事
函数也设计了带窗FIR滤波器,但具有任意形状的分段线性频率响应。这与fir1
该公司只设计标准低通、高通、带通和带阻配置的滤波器。
的命令
N = 50;F = [0.4 .5 1];M = [1 1 0 0];B = fir2(n,f,m);
返回行向量b
包含n + 1
阶系数n
FIR滤波器,其频率幅值特征与矢量给出的频率幅值特征匹配f
而且米
.f
为频率点的向量,取值范围为0到1,其中1代表奈奎斯特频率。米
向量是否包含在中指定的点上的指定幅度响应f
.(这个函数的IIR对应函数是yulewalk
,该方法也基于任意分段线性幅值响应设计滤波器。看到IIR滤波器设计详情)。
带过渡带的多波段FIR滤波器设计
的firls
而且firpm
函数提供了一种更通用的方法来指定理想的指定筛选器fir1
而且的故事
功能。这些函数设计了希尔伯特变压器、微分器和其他具有奇对称系数的滤波器(III型和IV型线性相位)。它们还允许您包含误差未最小化的过渡或“不关心”区域,并执行最小化的频段相关加权。
的firls
函数的扩展fir1
而且的故事
函数,它最小化了指定频率响应与实际频率响应之间误差平方的积分。
的firpm
函数实现了Parks-McClellan算法,该算法使用Remez交换算法和Chebyshev近似理论来设计在指定频率响应和实际频率响应之间具有最佳拟合的滤波器。滤波器是最优的,因为它们使指定频率响应与实际频率响应之间的最大误差最小化;它们有时被称为极大极小过滤器。以这种方式设计的滤波器在其频率响应中表现出等纹波行为,因此也被称为equiripple过滤器。帕克斯-麦克莱伦FIR滤波器设计算法可能是最流行和应用最广泛的FIR滤波器设计方法。
的语法firls
而且firpm
是一样的;唯一的区别是他们的最小化方案。下一个示例展示如何使用firls
而且firpm
反映这些不同的方案。
基本配置
的默认操作模式firls
而且firpm
是设计I型或II型线性相位滤波器,这取决于你想要的顺序是偶数还是奇数。近似振幅1从0到0.4 Hz,近似振幅0从0.5到1.0 Hz的低通示例如下
N = 20;过滤器顺序%F = [0 0.4 0.5 1];%频带边A = [1 1 0 0];%振幅B = firpm(n,f,a);
从0.4到0.5 Hz,firpm
不进行误差最小化;这是一个过渡带或“不在乎”区域。一个跃迁频带可以使你真正关心的频带中的误差更小,代价是更慢的跃迁速率。这样,这些类型的滤波器有一个内在的权衡类似于FIR设计的窗口。
要比较最小二乘与等纹波滤波器设计,请使用firls
创建一个类似的过滤器。类型
Bb = firls(n,f,a);
并使用FVTool比较它们的频率响应:
fvtool (b, 1, bb, 1)
注意y下图中显示的-轴是大小的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
设计的滤波器firpm
表现出等波纹行为。还要注意firls
滤波器在大多数通带和阻带上有较好的响应,但在带边(f
=0.4
而且f
=0.5
)的调查结果显示,调查结果与理想情况的差距更大firpm
过滤器。这表明firpm
过滤器的最大通带和阻带上的误差更小,事实上,对于这个带边配置和滤波器长度来说,误差是最小的。
把频带看作是短频率间隔上的直线。firpm
而且firls
用此格式表示任意分段线性频响函数的任意过渡带。firls
而且firpm
设计低通、高通、带通和带阻滤波器;一个带通的例子是
F = [0 0.3 0.4 0.7 0.8 1];%成对带边A = [0 0 1 1 0 0];%带通滤波器振幅
从技术上讲,这些f
而且一个
向量定义了五个波段:
两个止水带,0.0到0.3和0.8到1.0
从0.4到0.7的通带
两个过渡波段,从0.3到0.4,从0.7到0.8
示例高通和带阻滤波器是
F = [0 0.7 0.8 1];%成对带边A = [0 0 1 1];%高通滤波器振幅F = [0 0.3 0.4 0.5 0.8 1];%成对带边A = [1 1 0 0 1 1];%带阻滤波器振幅
一个多带带通滤波器的例子是
F = [0 0.1 0.15 0.25 0.3 0.4 0.45 0.55 0.6 0.7 0.75 0.85 0.9 1];A = [1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1];
另一种可能性是滤波器具有连接通带和阻带的线作为过渡区域;这可以帮助控制广泛过渡地区的“失控”震级反应:
F = [0 0.4 0.42 0.48 0.5 1];A = [1 1 0.8 0.2 0 0];%通带,线性过渡,%阻带
权重向量
这两个firls
而且firpm
允许您或多或少地强调尽量减少某些频段相对于其他频段的误差。为此,在频率和振幅向量之后指定一个权重向量。一个低通等纹波滤波器的例子,其阻带纹波比通带纹波少10倍
N = 20;过滤器顺序%F = [0 0.4 0.5 1];%频带边A = [1 1 0 0];%振幅W = [1 10];权重向量B = firpm(n,f,a,w);
一个合法的权向量总是向量长度的一半f
而且一个
向量;每条带子必须有一个重量。
反对称滤波器/希尔伯特变压器
当使用拖尾调用时“h”
或希尔伯特的
选项,firpm
而且firls
设计奇数对称的FIR滤波器,即偶阶线性相位滤波器III型或奇阶线性相位滤波器IV型。理想的希尔伯特变压器具有这种反对称性,在整个频率范围内振幅为1。尝试以下近似希尔伯特变压器,并使用FVTool绘制它们:
B = firpm(21,[0.05 1],[1 1],“h”);希尔伯特Bb = firpm(20,[0.05 0.95],[1 1],“h”);希尔伯特带通fvtool (b, 1, bb, 1)
你可以找到一个信号的延迟希尔伯特变换x
通过这些过滤器。
Fs = 1000;采样频率T = (0:1/fs:2)';% 2秒时间向量X = sin(2*pi*300*t);% 300hz正弦波示例信号Xh = filter(bb,1,x);% x的希尔伯特变换
解析信号对应于x
有复信号吗x
的实部和希尔伯特变换x
作为它的虚部。对于这种FIR方法(替代希尔伯特
函数),你必须延迟x
通过一半的滤波器来创建分析信号:
Xd = [0 (10,1);x(1:长度(x) -10)];延迟10个样品Xa = xd + j*xh;%分析信号
这种方法不能直接用于奇阶滤波器,因为奇阶滤波器需要非整数延迟。在这种情况下,希尔伯特
函数,描述于希耳伯特变换,估计解析信号。或者,使用重新取样
函数通过非整数采样数来延迟信号。
微分器
在时域中对信号进行微分等效于将信号的傅里叶变换乘以一个虚斜坡函数。也就是说,为了区分一个信号,让它通过一个有响应的滤波器H(ω)=
jω。近似理想微分器(有延迟)使用firpm
或firls
与一个' d '
或“区别”
选择:
B = firpm(21,[0 1],[0 pi],' d ');
对于III型滤波器,分化带应停止于奈奎斯特频率,并且振幅矢量必须反映该变化以确保正确的斜率:
Bb = firpm(20,[0 0.9],[0 0.9*pi],' d ');
在' d '
模式,firpm
在非零振幅带中将误差加权1/ω以使最大值最小化相对错误。firls
误差权重为(1/ω)2在非零振幅波段' d '
模式。
下面的图显示了上述微分器的幅度响应。
fvtool (b, 1, bb, 1)传说(“奇怪的秩序”,“甚至秩序”,“位置”,“最佳”)
约束最小二乘FIR滤波器设计
约束最小二乘(CLS) FIR滤波器设计函数实现了一种技术,使您能够设计FIR滤波器而无需显式定义幅度响应的过渡带。在几种情况下,省略过渡带的说明是有用的。例如,如果噪声和信号信息一起出现在同一频带中,则可能不清楚严格定义的过渡带应出现在何处。同样,如果过渡带的出现只是为了控制滤波器响应中出现的吉布斯现象的结果,那么省略过渡带的说明可能是有意义的。见Selesnick, Lang和Burrus[2]讨论这个方法。
CLS方法不定义通带、阻带和过渡区域,而是为您指定的响应接受截止频率(对于高通、低通、带通或带阻情况),或者通带和阻带边(对于多带情况)。通过这种方式,CLS方法隐式地而不是显式地定义了过渡区域。
CLS方法的关键特性是,它允许您定义包含幅度响应中最大允许纹波的上限和下限阈值。考虑到这一约束,该技术在滤波器响应的频率范围内应用最小二乘误差最小化技术,而不是在特定的频段上。误差最小化包括理想的“砖墙”响应中的任何不连续区域。另一个好处是,该技术允许您指定由吉布斯现象产生的任意小峰。
有两个工具箱函数实现了这种设计技术。
有关这些函数的调用语法的详细信息,请参阅函数参考中的参考描述。
基本的低通和高通CLS滤波器设计
CLS最基本的设计功能,fircls1
,利用该技术设计了低通和高通FIR滤波器。例如,考虑设计一个脉冲响应为61阶,截止频率为0.3(归一化)的滤波器。进一步,定义约束设计过程的上界和下界为:
最大通带偏差1(通带纹波)0.02。
最大阻带偏差从0(阻带波纹)0.008。
来解决这个设计问题fircls1
,使用以下命令:
N = 61;Wo = 0.3;Dp = 0.02;Ds = 0.008;H = fircls1(n,wo,dp,ds);fvtool (h, 1)
注意y-轴的单位是模的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
多波段CLS滤波器设计
fircls
使用相同的技术设计具有指定分段恒幅响应的FIR滤波器。在这种情况下,您可以指定一个带边向量和一个对应的带幅向量。此外,您还可以指定每个波段的最大纹波量。
例如,假设过滤器的规范调用:
从0到0.3(归一化):振幅0,上界0.005,下界-0.005
0.3 ~ 0.5:振幅0.5,上界0.51,下界0.49
0.5 ~ 0.7:振幅0,上界0.03,下界-0.03
0.7 ~ 0.9:振幅1,上界1.02,下界0.98
从0.9到1:振幅0,上界0.05,下界-0.05
设计一个脉冲响应阶数为129的CLS滤波器,满足以下规范:
N = 129;F = [0 0.3 0.5 0.7 0.9 1];A = [0 0.5 0 1 0];Up = [0.005 0.51 0.03 1.02 0.05];Lo = [-0.005 0.49 -0.03 0.98 -0.05];H = fircls(n,f,a,up,lo);fvtool (h, 1)
注意y-轴的单位是模的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
加权CLS滤波器设计
加权CLS滤波器设计允许您设计低通或高通FIR滤波器,相对加权的误差最小化在每个波段。的fircls1
函数允许您指定最小二乘加权函数的通带和阻带边,以及一个常数k
它指定阻带权重与通带权重的比率。
例如,考虑要求脉冲响应阶数为55和截止频率为0.3(归一化)的FIR滤波器的规范。同时假设最大允许通带纹波为0.02,最大允许阻带纹波为0.004。另外,增加权重要求:
权重函数为0.28的通带边(归一化)
止带边缘的权重函数为0.32
阻带重量误差最小为通带重量误差的10倍
为了解决这个问题fircls1
、类型
N = 55;Wo = 0.3;Dp = 0.02;Ds = 0.004;Wp = 0.28;Ws = 0.32;K = 10;H = fircls1(n,wo,dp,ds,wp,ws,k);fvtool (h, 1)
注意y-轴的单位是模的平方。您可以通过右键单击轴标签并选择来设置此设置大小的平方菜单上的。
任意响应滤波器设计
的cfirpm
滤波器设计函数为设计具有任意复杂响应的FIR滤波器提供了一种工具。它与其他滤波器设计函数的不同之处在于滤波器的频率响应是如何指定的:它接受一个函数的名称,该函数返回在频率网格上计算的滤波器响应。这种能力使得cfirpm
一种高度通用和强大的滤波器设计技术。
这种设计技术可用于生产非线性相位FIR滤波器,非对称频率响应滤波器(复系数),或具有自定义频率响应的更对称滤波器。
设计算法优化Chebyshev(或极小极大)误差使用扩展雷米兹交换算法进行初始估计。如果这种交换方法无法获得最优滤波器,算法将切换到上升-下降算法,由上升-下降算法接管,完成向最优解的收敛。
多波段滤波器设计
考虑具有以下特殊频域特性的多带滤波器。
乐队 |
振幅 |
优化权重 |
---|---|---|
-0.5 [1] |
(5 - 1) |
1 |
(-0.4 + 0.3) |
(2 - 2) |
10 |
(+ 0.4 + 0.8) |
(2 - 1) |
5 |
可以使用预定义的频率响应函数设计线性相位多带滤波器多波段
,详情如下:
B = cfirpm(38, [-1 -0.5 -0.4 0.3 0.4 0.8],...{多波段的, [5 1 2 2 2 1]}, [1 10 5]);
对于多带滤波器的特定情况,我们可以使用类似于语法的简化滤波器设计符号firpm
:
B = cfirpm(38,[-1 -0.5 -0.4 0.3 0.4 0.8],...[5 1 2 2 2 1], [1 10 5]);
与firpm
,将带边向量传递给cfirpm
.这个向量定义了执行优化的频带;注意有两个过渡带,从-0.5到-0.4,从0.3到0.4。
在这两种情况下,频率响应得到并使用FVTool中的线性尺度绘制:
fvtool (b, 1)
请注意,下面显示的数据范围为(π-π)
.
这种多频带滤波器的滤波器响应是复杂的,这是意料之中的,因为在频域的不对称。脉冲响应,您可以从FVTool工具栏中选择,如下所示。
减少延迟的滤波器设计
考虑一个带半奈奎斯特截止点的62抽头低通滤波器的设计。的负偏移值低通滤波器
滤波器的设计功能,群延迟偏移为设计明显小于得到的标准线性相位设计。此滤波器设计可计算如下:
B = cfirpm(61,[0 0.5 0.55 1],{低通滤波器的-16});
由此产生的震级响应为
fvtool (b, 1)
的y-axis在Magnitude Squared中,您可以通过右键单击轴标签并选择来设置大小的平方菜单上的。
滤波器的组延迟显示偏移量已经从N / 2
来N / - 18
(例如,30.5
来14.5
).然而现在,群延迟在通带区域不再是平坦的。要创建此图,请单击群组延迟响应按钮。
如果我们将这个非线性相位滤波器与恰好有14.5个组延迟样本的线性相位滤波器进行比较,得到的滤波器是2*14.5阶,即29阶。使用B = cfirpm(29,[0 0.5 0.55 1],'lowpass')
,对于29阶滤波器,通带和阻带纹波要大得多。这些比较可以帮助您决定哪个过滤器更适合特定的应用程序。