数字滤波器设计

FIR滤波器和IIR滤波器

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

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

  • 他们完全可以线性相位。

  • 它们总是稳定的。

  • 设计方法一般是线性的。

  • 它们可以在硬件上有效地实现。

  • 滤波器启动瞬态的持续时间是有限的。

FIR滤波器的主要缺点是,它们通常需要比IIR滤波器更高的过滤器顺序,以实现给定的性能水平。相应地,这些过滤器的延迟通常大于相同的性能IIR过滤器。

冷杉过滤器总结

FIR过滤器

滤波器设计方法

描述

过滤功能

窗口

对指定的“砖墙”滤波器的截断傅里叶反变换应用窗口

FIR1FiR2.kaiserord

带过渡带的多带

在频率范围的子频带上等纹波或最小二乘逼近

firlsfirpmFIRPMORD.

约束最小二乘法

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

firclsfircls1.

任意反应

任意反应,包括非线性相和复杂过滤器

cfirpm.

提出了余弦

低通响应平滑,正弦过渡

rcosdesign

线性相位滤波器

除了cfirpm.,所有的FIR滤波器设计功能只设计线性相位滤波器。的滤光片的滤光系数,或称“滤光片”,服从偶或奇对称关系。取决于这种对称性,以及顺序n其中的滤波器是偶数或奇数,一个线性相位滤波器(存储在长度上n+ 1的向量b)有其内在的限制频率响应。

线性相位滤波器类型 过滤器订单 系数的对称性 反应H (f), f0 反应H (f), f1(奈奎斯特)

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时间步长(其傅里叶变换的幅度由滤波器的幅度响应进行缩放)。这种性质保持了通带内信号的波形;也就是说,没有相位畸变。

的函数FIR1FiR2.firlsfirpmfircls, 和fircls1.所有设计类型I和II线性相位FIR滤波器默认。rcosdesign只设计I型过滤器。这两个firlsfirpm设计III型和IV型线性相位FIR滤波器希尔伯特的或者“区别”国旗。cfirpm.可以设计任何类型的线性相位滤波器,也可以设计非线性相位滤波器。

请注意

因为II型滤波器的频率响应在奈奎斯特频率(“高”频率)处为零,FIR1不设计II型高通和带阻滤波器。对奇值n在这些情况下,FIR1添加1到订单并返回I型过滤器。

窗口的方法

考虑理想的或“砖墙”数字低通滤波器,截止频率为ω0rad / s。该滤波器在所有幅度小于ω的频率上的幅度为10,在振幅介于ω之间的频率处振幅为00和π。它的脉冲响应序列hn)是

h n 1 2 π - π π H ω e j ω n d ω 1 2 π - ω 0 ω 0 e j ω n d ω ω 0 n π n

这个滤波器是不可实现的,因为它的脉冲响应是无限的和非因果的。要创建一个有限持续时间的脉冲响应,可以通过应用一个窗口来截断它。通过在截断中保留脉冲响应的中心部分,你得到一个线性相位FIR滤波器。例如,长度为51的滤波器具有低通截止频率ω00.4πrad/ s是

b = 0.4 * sinc(0.4 *(二五25));

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

fvtool (b, 1)

请注意,y-轴如下图所示,是在星等平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

响应过程中会出现振铃和波纹,特别是在频带边缘附近。这种“吉布斯效应”并不会随着滤波器长度的增加而消失,但非矩形窗口会减小其大小。在时域乘以一个窗口会导致在频域的卷积或平滑。给滤镜添加一个长度为51的汉明窗口,使用FVTool显示结果:

b = 0.4 * sinc(0.4 *(二五25));b = b。*汉明(51)';fvtool (b, 1)

请注意,y-轴如下图所示,是在星等平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

使用汉明窗大大减少了振铃。这种改进是以过渡宽度(加窗版本从通频带到阻频带需要更长的时间)和最优化(加窗版本没有最小化集成平方误差)为代价的。

的函数FIR1FiR2.基于此窗口过程。给定理想过滤器的过滤器顺序和描述,这些函数返回该理想过滤器的窗口逆傅立叶变换。默认情况下都使用汉明窗口,但它们接受任何窗口功能。看到视窗有关Windows及其属性的概述。

标准带FIR滤波器设计:fir1

FIR1实现窗口线性相位冷杉数字滤波器设计的经典方法。它类似于IIR滤波器设计功能,因为它配制到标准频带配置中的设计过滤器:低通,带通,高通和BandStop。

的语句

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

创建行向量b包含这个阶的系数nHamming-windowed过滤器。这是一个低通,线性相位FIR滤波器与截止频率WnWn为0 ~ 1之间的数字,其中1为采样频率的一半,即Nyquist频率。(不像其他方法,这里Wn对应于6db点。)对于高通过滤器,只需添加“高”到函数的形参列表。对于带通或带阻滤波器,请指定Wn作为包含通带边缘频率的双元素矢量。附加'停止'对于BandStop配置。

b = fir1(n,wn,window)使用列向量中指定的窗口窗口的设计。向量窗口必须是n + 1元素长。如果不指定窗口,FIR1适用汉明窗。

Kaiser窗口订单估计。kaiserord函数估计滤波器阶数、截止频率和满足给定规格所需的Kaiser窗beta参数。给定一个频带边缘矢量和相应的幅度矢量以及最大允许纹波,kaiserord属性的适当输入参数FIR1函数。

多频带FIR滤波器设计:fir2

FiR2.函数还设计了加窗FIR滤波器,但具有任意形状的分段线性频率响应。这是相对的FIR1,它只设计标准低通、高通、带通和带阻配置的滤波器。

命令

n = 50;F = [0 .4 .5 1];M = [1 1 0 0];b =故事(n、f m);

返回行矢量b包含n + 1阶系数n频率-幅度特性与矢量所给出的特性相匹配的FIR滤波器ff为频率点的向量,取值范围为0到1,其中1为奈奎斯特频率。是一个包含指定幅度响应在指定的点的矢量f.(与此功能对应的IIR是yulewalk,该公司还设计了基于任意分段线性幅度响应的滤波器。看到IIR滤波器的设计详情)。

带过渡带的多频带FIR滤波器设计

firlsfirpm函数提供了一种更通用的方法来指定理想的指定过滤器FIR1FiR2.功能。这些函数设计希尔伯特变压器、微分器和其他具有奇对称系数的滤波器(III型和IV型线性相位)。它们还允许您包括误差未最小化的过渡或“不关心”区域,并执行最小化的频带相关权重。

firls函数是函数的扩展FIR1FiR2.函数,它使指定的频率响应和实际频率响应之间的误差平方的积分最小化。

firpm函数实现了帕克斯-麦克莱伦算法,该算法使用雷米兹交换算法和切比雪夫近似理论设计滤波器,在指定的和实际的频率响应之间进行最优拟合。滤波器是最优的,因为它使指定的频率响应和实际频率响应之间的最大误差最小;它们有时被称为极大极小过滤器。以这种方式设计的滤波器在其频率响应中表现出等纹波行为,因此也称为equiripple过滤器。Parks-McClellan FIR滤波器设计算法可能是最流行和应用最广泛的FIR滤波器设计方法。

的语法firlsfirpm是相同的;唯一的区别是他们的最小化方案。下一个示例展示如何使用firlsfirpm反映这些不同的方案。

基本配置

的默认操作模式firlsfirpm是设计一类或二类线性相位滤波器,具体取决于你想要的顺序是偶数还是奇数。一个低通示例,大约振幅为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);

从0.4到0.5 Hz,firpm不执行错误最小化;这是一个过渡带或“不关心”区域。在你所关心的波段中,过渡带可以使误差最小化,但代价是较慢的过渡速率。这样,这些类型的滤波器有一个内在的权衡类似于FIR设计的窗口。

比较最小二乘来平均过滤器设计,使用firls创建类似的过滤器。类型

bb = firls (n、f);

并使用FVTool比较它们的频率响应:

FVTool(B,1,BB,1)

请注意,y-轴如下图所示,是在星等平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

firpm展品equiripple行为。还要注意firls过滤器对大多数通带和空间的响应更好,但在带边缘(f0.4f0.5),反应比理想的距离更远firpm过滤器。这表明firpm过滤器的最大通带和阻带的误差更小,事实上,对于这种带边配置和滤波器长度来说,它是可能的最小值。

可以把频带看作是短频率间隔上的线。firpmfirls用这种方法来表示任意过渡带的分段线性频响函数。firlsfirpm设计低通、高通、带通和带阻滤波器;带通示例如下

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

示例高通和Bandstop滤波器是

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 0 0 1 1 0 0 11];

另一种可能是将通带与阻带连接的线作为过渡区域的滤波器;这有助于在宽过渡地区控制“失控”的震级响应:

f = [0 0.4 0.42 0.48 0.5 1];a = [1 0.8 0.2 0 0];通频带,线性跃迁,%阻带

重量矢量

这两个firlsfirpm允许您或多或少地强调在某些频段相对于其他频段的误差的最小化。为此,根据频率和振幅向量指定一个权重向量。一个低通等纹波滤波器的例子,其阻带纹波小于通带的10倍

n = 20;%过滤器订单f = [0 0.4 0.5 1];频带边缘A = [1 1 0 0];%振幅W = [1 10];%重量矢量b = firpm (n、f, w);

一个合法的权向量总是长度的一半f一个向量;每条带子必须只有一个重量。

反对称滤波器/希尔伯特变压器

当用拖尾调用时“h”或者'希尔伯特'选项,firpmfirls设计具有奇数对称性的FIR滤波器,即III型(均可顺序)或IV型(对于奇数顺序)线性相位过滤器。理想的Hilbert变压器具有该抗对称性能,并且在整个频率范围内具有1的幅度。尝试以下近似希尔伯特变压器并使用FVTool绘制它们:

B = firpm(21,[0.05 1],[1 1],“h”);%高通希尔伯特Bb = firpm(20,[0.05 .95],[1 1],“h”);%带通希尔伯特FVTool(B,1,BB,1)

你可以找到信号的延迟希尔伯特变换x通过这些过滤器。

FS = 1000;%采样频率t =(0:1 / fs:2)';% 2秒时间向量x =罪(2 *π* 300 * t);300hz正弦波示例信号xh =过滤器(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方法的关键特征是,它使您能够定义在幅度响应中包含最大允许纹波的上限和下限阈值。考虑到这个约束条件,该技术在滤波器响应的频率范围内应用最小二乘误差最小化技术,而不是在特定频段内。误差最小化包括理想的“砖墙”响应中的任何间断区域。另一个好处是,该技术使您能够指定Gibbs现象产生的任意小峰值。

有两个工具箱功能,实现了这种设计技术。

描述

功能

约束最小二乘多频带FIR滤波器设计

fircls

低通和高通线性相位过滤器的约束最小二乘滤波器设计

fircls1.

有关这些函数的调用语法的详细信息,请参见函数参考中对它们的引用描述。

基本的低通和高通CLS滤波器设计

CLS最基本的设计功能,fircls1.,利用该技术设计低通和高通FIR滤波器。作为一个例子,考虑设计一个61阶脉冲响应和截止频率为0.3(归一化)的滤波器。进一步,定义约束设计过程的上下限为:

  • 从1(通带纹波)的最大通带偏差为0.02。

  • 最大阻带偏离0(阻带纹波)为0.008。

来解决这个设计问题fircls1.,使用以下命令:

n = 61;我们= 0.3;dp = 0.02;ds = 0.008;h = fircls1 (n,我们,dp, ds);FVTool(H,1)

请注意,y下面显示的-轴是星等的平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

多频带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, lo);FVTool(H,1)

请注意,y下面显示的-轴是星等的平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

加权CLS滤波器设计

加权CLS滤波器设计可以让您设计低通或高通FIR滤波器,每个频带误差最小化的相对权重。的fircls1.函数可以指定最小二乘加权函数的通频带和阻频带边,以及一个常数k这指定了阻带与通带的比率。

例如,考虑要求FIR滤波器的脉冲响应阶数为55,截止频率为0.3(归一化)。还假定最大允许通带纹波为0.02,最大允许阻带纹波为0.004。另外,增加权重要求:

  • 权函数的通带边缘为0.28(归一化)

  • 阻带边的权函数为0.32

  • 重量误差最小化在通带中的停机带中的10倍

要实现这一点,请使用fircls1.、类型

n = 55;我们= 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下面显示的-轴是星等的平方。您可以通过右键单击axis标签并选择来进行设置幅度平方从菜单。

任意响应过滤器设计

cfirpm.滤波器设计函数为设计具有任意复杂响应的FIR滤波器提供了一个工具。它与其他滤波器设计函数的不同在于如何指定滤波器的频率响应:它接受一个函数的名称,该函数返回在频率网格上计算的滤波器响应。这种能力使cfirpm.一种用途广泛、功能强大的滤波器设计技术。

这种设计技术可用于产生非线性相位FIR滤波器,非对称频率响应滤波器(具有复系数),或具有自定义频率响应的更对称滤波器。

设计算法优化切比雪夫(或极大极小)误差使用扩展的雷米兹交换算法的初始估计。如果这种交换方法不能得到最优滤波器,算法切换到上升-下降算法来接管,完成对最优解的收敛。

多频玻片过滤器设计

考虑一个具有下列频域特性的多频带滤波器。

乐队

振幅

优化加权

-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 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的大小为星等平方,可以通过右键单击axis标签并选择来设置幅度平方从菜单。

该滤波器的组延迟表明,偏移量已经减小N / 2N / - 18(例如,30.514.5).然而,现在组延迟在通带区域不再平坦。要创建此图,请单击群延迟响应按钮。

如果我们将这个非线性相位滤波器与具有精确14.5个群延迟样本的线性相位滤波器进行比较,得到的滤波器是2*14.5阶,或29阶。使用B = cfirpm(29,[0 0.5 0.55 1],'lowpass'), 29阶滤波器的通带和阻带纹波要大得多。这些比较可以帮助您决定哪个过滤器更适合特定的应用程序。