此示例显示如何设计低通FIR滤波器。这里介绍的许多概念可以扩展到其他响应,如高通,带通等。
FIR滤波器被广泛使用,因为它们具有强大的设计算法,以非递归形式实现时的固有稳定性,可以轻松实现线性相位,简单可扩展到多速率情况,以及充足的硬件支持除了其他原因之外。此示例展示了DSP System Toolbox™中用于设计具有各种特性的低通FIR滤波器的功能。
内容
- 获得低通FIR滤波器系数
- 最小阶低通滤波器设计
- 实现低通FIR滤波器
- 一步设计和实现过滤器
- 获得滤波器系数
- 可调谐低通FIR滤波器
- 高级设计选项:最佳非等效低通滤波器
- Equiripple设计增加阻带衰减
- 最小相位低通滤波器设计
- 使用多级技术的最小阶低通滤波器设计
- 用于多速率应用的低通滤波器设计
获得低通FIR滤波器系数
低通滤波器设计概述了使用DSP系统工具箱设计低通滤波器。总而言之,提出了两个返回FIR滤波器系数向量的函数:firceqrip和firgr。当滤波器顺序(相当于滤波器长度)已知并固定时,使用firceqrip。
N]筛选顺序100的选择是任意的。通常,较大的顺序导致更好的近似理想,代价是更昂贵的实现。加倍顺序大致将滤波器的过渡宽度减半(假设所有其他参数保持不变)。
N2 = 200; %更改过滤器顺序从100到200 eqNum200 = firceqrip(N2,Fp /(Fs / 2),[Rp Rst],'passge');fvt = fvtool(eqnum,1,eqNum200,1,'Fs',Fs,'Color','White');图例(fvt,'FIR滤波器;顺序= 100','FIR滤波器。顺序= 200')
最小阶低通滤波器设计
Fst = 23e3; %Transition Width = Fst - Fp numMinOrder = firgr('minorder',[0,Fp /(Fs / 2),Fst /(Fs / 2),1],[1 1 0 0],... [Rp Rst]);fvt = fvtool(eqnum,1,eqNum200,1,numMinOrder,1,'Fs',Fs,'Color','White');图例(fvt,'FIR滤波器;顺序= 100','FIR滤波器。顺序= 200',...... 'FIR滤波器。顺序= 133')
一旦获得滤波器系数,就可以用dsp.FIRFilter实现滤波器。这支持双精度/单精度浮点数据以及定点数据。它还支持C和HDL代码生成以及ARM®Cortex®M和ARM Cortex A的优化代码生成。
lowpassFIR = dsp.FIRFilter(' Numerator ',eqnum); %或eqNum200或numMinOrder fvtool(lowpassFIR,'Fs',Fs,'Color','White')
为了执行实际过滤,请像函数一样直接调用FIR。以下代码对高斯白噪声进行滤波,并在频谱分析仪中显示滤波后的信号10秒钟。
scope]一步设计和实现过滤器
为方便起见,可以使用dsp.LowpassFilter在一个步骤中完成设计和实现过滤器。这也支持浮点,定点,C代码生成,ARM]请注意,为方便起见,使用dB值直接输入规格。通过选择FVTool中的“View”菜单然后选择“Pas***and”,可以检查通带纹波。dsp.LowpassFilter也可用于IIR(双二阶)设计。
fvtool(lowpassFilt,'Fs',Fs,'Color','White')
获得滤波器系数
eqnum = tf(lowpassFilt);
可调谐低通FIR滤波器
可以使用'dsp.VariableBandwidthFIRFilter'实现可以在运行时调整截止频率的低通FIR滤波器。这些滤波器不能提供与滤波器响应特性相同的粒度控制,但它们确实允许动态频率响应。
vbwFilter]高级设计选项:最佳非等效低通滤波器
到目前为止,所有使用的设计都是最佳的等波设计。Equiripple设计通过均匀分布与理想响应的偏差来实现最优性。这具有最小化最大偏差(纹波)的优点。然而,以其能量测量的总偏差趋于较大。这可能并不总是令人满意的。当低通滤波信号时,这意味着阻带中信号的剩余能量可能相对较大。当这是一个问题时,最小二乘法提供了最佳设计,最大限度地减少了阻带中的能量。fdesign.lowpass可用于设计最小二乘和其他类型的低通滤波器。以下代码将最小二乘FIR设计与具有相同滤波器阶数和转换宽度的FIR等波设计进行比较:
lowpassSpec]请注意,对于最小二乘设计,阻带中的衰减如何随频率增加而对于等波纹设计保持不变。最小二乘情况下增加的衰减使得要滤波的信号频带中的能量最小化。
Equiripple设计增加阻带衰减
最小二乘设计的常常不希望的效果是通带区域中靠近通带边缘的纹波趋于变大。通常,对于低通滤波器,希望尽可能少地影响要滤波的信号的通带频率。在这种程度上,通常优选等波纹通带。如果仍需要在阻带中增加衰减,则等波纹设计选项提供了实现此目的的方法。
FIR_eqrip_slope]请注意,阻带非常相似。然而,等通道设计在通带边缘频率20 kHz附近具有明显更小的通带纹波:
mls = measure(lsFIR);meq = measure(FIR_eqrip_slope);mls.Apassmeq.Apass
ans = 0.0121ans = 0.0046
另一种可能性是使用任意幅度规范并选择两个频带(一个用于通带,一个用于阻带)。然后,通过使用第二频带的权重,可以增加整个频带的衰减。有关此设置和其他任意幅度设计的更多信息,请参阅任意幅度滤波器设计。
B]最小相位低通滤波器设计
到目前为止,我们只考虑了线性相位设计。在许多应用中需要线性相。然而,如果不要求线性相位,则最小相位设计可以提供超过线性相位对应物的显着改进。但是,最小相位设计并不总是在数值上很稳健。务必使用FVTool检查设计。
Fp = 20e3;Fst = 22e3;Fs = 96e3;Ap = 0.06;Ast = 80;lowpassSpec = fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast,Fs);linphaseSpec = design(lowpassSpec,'equiripple','SystemObject',true);eqripSpec = design(lowpassSpec,'equiripple','minphase',true,... 'SystemObject',true);fvt = fvtool(linphaseSpec,eqripSpec,'Fs',Fs,...... 'Color','White');传奇(fvt,...... '线性相位等波设计',...... '最小相位等波纹设计')
请注意,系数的数量已从173减少到141.群延迟图还显示了最小相位设计的优点。注意群延迟是如何小得多的(特别是在通带区域)。
fvt]使用多级技术的最小阶低通滤波器设计
最小化不涉及最小相位设计的系数数量的另一种方法是使用多级技术。这里我们展示插值FIR(IFIR)方法。这种方法将设计问题分解为级联设计两个滤波器。对于此示例,设计需要151个系数而不是173个。有关此内容的更多信息,请参阅高效窄带过渡带FIR滤波器设计。
Fp]在这种情况下,群延迟图揭示了IFIR设计的缺点。虽然IFIR设计确实提供线性相位,但群延迟通常大于可比较的单级设计。
fvt = fvtool(linphaseSpec,interpFilter,'Fs',Fs,'分析','grpdelay',...... '颜色','白色');传奇(fvt,...... '线性相位等波设计',...... '插值FIR等波纹设计(两级)')
用于多速率应用的低通滤波器设计
低通滤波器广泛用于抽取器和插值器的设计。有关此问题的详细信息,请参阅设计抽取器/插值器,以及用于实现非常高效实施的多级技术的多阶段抽取器/插值器设计。
|