MATLAB的低通滤波器设计

此示例显示了如何设计低通滤波器。该示例突出显示DSP System Toolbox™中最常用的一些命令行工具。或者,您可以使用过滤器构建器应用程序来实现此处呈现的所有设计。有关更多设计选项,请参阅设计低通冷滤波器

介绍

在设计低通滤波器时,您所做的第一选择是设计FIR或IIR过滤器。当线性相位响应很重要时,您通常会选择FIR滤波器。FIR滤波器也倾向于优选用于定点实现,因为它们通常更稳健地对量化效果。FIR滤波器也用于许多高速实现,例如FPGA或ASIC,因为它们适用于流水线。IIR过滤器(特别是各种方的滤波器)用于应用程序(例如音频信号处理),其中相线性不是一个问题。IIR滤波器通常在计算上更有效地效率,因为它们可以满足比FIR滤波器更少的系数更少的设计规格。IIR过滤器还倾向于具有较短的瞬态响应和较小的组延迟。但是,在组延迟和计算效率方面,使用最小相位和多速率设计可能导致与IIR过滤器相当的FIR滤波器。

FIR低通设计 - 指定过滤器订单

您必须指定许多实际情况,您必须指定过滤器顺序。一个这样的情况是,如果您是针对已将过滤器顺序的硬件定位到特定数字。另一个常见场景是您计算了实现的可用计算预算(MIPS),这为您提供有限的过滤器订单。FIR设计功能在信号处理工具箱中(包括FIR1.FILPM., 和firls.)全部能够以指定的顺序设计低通滤波器。在DSP系统工具箱中,低通FIR滤波器设计具有指定订单的首选功能fireceqrip.。此功能设计具有指定通带/停止波纹值的最佳平均低通/高通FIR滤波器,并具有指定的通带频率。由于设计而确定稳定边缘频率。

设计低通FIR滤波器,用于以48 kHz采样的数据。通带边缘频率为8 kHz。通带纹波是0.01dB,并且停止衰减为80 dB。将过滤器顺序约束到120。

n = 120;FS = 48E3;FP = 8E3;AP = 0.01;AST = 80;

在线性单元中获得通带和阻带纹波的最大偏差。

RP =(10 ^(AP / 20) -  1)/(10 ^(AP / 20)+ 1);RST = 10 ^( -  AST / 20);

使用滤波器使用fireceqrip.并查看幅度频率响应。

num = fireceqrip(n,fp /(fs / 2),[rp rst],'乘客');fvtool(num,'fs',fs)

产生的稳定边缘频率约为9.64 kHz。

最小订单设计

最佳均线过滤器的另一个设计功能是萤火虫萤火虫可以设计符合通带/停止波纹约束的过滤器以及具有最小可能的过滤器顺序的指定过渡宽度。例如,如果停机边缘频率指定为10 kHz,则所得到的滤波器的订单为100,而不是120阶滤波器设计fireceqrip.。较小的过渡频带较小的过滤器。

指定10 kHz的停止边缘频率。使用0.01 dB和80 dB的停止衰减获得最小订购FIR滤波器。

FST = 10E3;nummin = firgr('最低订购',[0 fp /(fs / 2)fst /(fs / 2)1],[11 0 0],[Rp,RST]);

绘制使用的最小订单FIR滤波器的幅度频率响应萤火虫和120次设计的滤波器fireceqrip.。最小订单设计导致具有订单100的滤波器。120阶滤波器的转换区域如预期,比具有订单100的滤波器的过滤器。

HVFT = FVTool(Num,1,Nummin,1,'fs',fs);传说(HVFT,'n = 120''n = 100'

过滤数据

要将过滤器应用于数据,可以使用筛选命令或您可以使用dsp.firfilter.dsp.firfilter.在循环中执行时,具有管理状态的优势。dsp.firfilter.还具有固定点功能,并支持C代码生成,HDL代码生成和ARM®CortexM和金宝appARM Cortex A的优化代码生成。

过滤器10秒的白噪声,零平均值和单位标准偏差,256个样本的帧,具有120级FIR低通滤波器。在Spectrum Analyzer上查看结果。

lp_fir = dsp.firfilter('分子',num);sa = dsp.spectrumanalyzer('采样率',fs,'spectralaverages'5);Tic.尽管toc <10 x = randn(256,1);y = lp_fir(x);步骤(SA,Y);结尾

使用dsp.lowpassfilter.

dsp.lowpassfilter.是使用的替代方案fireceqrip.萤火虫和这个结合dsp.firfilter.。基本上,dsp.lowpassfilter.将两步过程融入一个。dsp.lowpassfilter.提供相同的优势dsp.firfilter.提供了固定点支持,C代码生成支持,HDL代码生成支持和ARM Co金宝apprtex代码生成支持。

设计低通FIR滤波器,用于以48 kHz采样的数据。通带边缘频率为8 kHz。通带纹波是0.01dB,并且停止衰减为80 dB。约束过滤器顺序到120.创建一个dsp.firfilter.根据您的规格。

lp_fir = dsp.lowpassfilter('采样率',fs,......'designforminimunder',错误的,'筛选道',n,......'Passband职业',fp,'passbandropple',ap,'stopbandattenuation',AST);

系数lp_fir.与系数相同数字

num_lp = tf(lp_fir);

您可以使用lp_fir.要直接过滤数据,如前面的示例所示。您还可以使用FVTool分析过滤器或使用响应措施

FVTool(LP_FIR,'fs',fs);衡量(LP_FIR)
ANS =采样率:48 kHz通带边缘:8 kHz 3-dB点:8.5843 kHz 6-dB点:8.7553 kHz停滞边缘:9.64 kHz通带纹波:0.01 dB停止带。:79.9981 DB过渡宽度:1.64 kHz

使用dsp.lowpassfilter的最小订单设计

您可以使用dsp.lowpassfilter.设计最小订单过滤器和使用措施验证设计是否符合规定规范。滤波器的顺序再次100。

lp_fir_minord = dsp.lowpassfilter('采样率',fs,......'designforminimunder',真的,'Passband职业',fp,......'stopband职业',fst,'passbandropple',ap,'stopbandattenuation',AST);测量(LP_FIR_MINORD)NLP = ORDER(LP_FIR_MINORD)
ANS =采样率:48 kHz通带边缘:8 kHz 3-dB点:8.7136 kHz 6-dB点:8.922 kHz停滞边缘:10 kHz通带纹波:0.0098641 DB停滞耐用。:80.122 DB过渡宽度:2 kHz NLP = 100

设计IIR过滤器

椭圆滤波器是最佳平等灭火滤波器的IIR对应物。因此,您可以使用相同的规范来设计椭圆滤波器。您获得的IIR过滤器的过滤器顺序远小于相应的FIR滤波器的顺序。

设计具有相同采样频率,截止频率,通带约束的椭圆滤波器,以及作为120阶FIR滤波器的阻带衰减。减少椭圆滤波器的过滤器顺序为10。

n = 10;lp_iir = dsp.lowpassfilter('采样率',fs,'filtertype''IIR'......'designforminimunder',错误的,'筛选道',n,......'Passband职业',fp,'passbandropple',ap,'stopbandattenuation',AST);

比较FIR和IIR设计。计算两种实现的成本。

hfvt = fvtool(lp_fir,lp_iir,'fs',fs);传奇(HFVT,'FIR Equiripple,n = 120''IIR椭圆,n = 10');cost_fir =成本(lp_fir)cost_iir =成本(lp_iir)
cost_fir = struct with字段:numseffients:121 numstates:120多拼接putinputsample:121 costsputsample:120 cost_iir = struct with字段:numcofients:25 numstates:20多匹配项pultumputsample:25

FIR和IIR过滤器具有类似的幅度响应。IIR过滤器的成本约为FIR滤波器的成本约为1/6。

运行IIR过滤器

IIR过滤器设计为各种滤波器。要将过滤器应用于数据,请使用与冷杉案例相同的命令。

过滤器10秒的白色高斯噪声,零均值和单位标准偏差,256个样本的帧,第10阶IIR低通滤波器。在Spectrum Analyzer上查看结果。

sa = dsp.spectrumanalyzer('采样率',fs,'spectralaverages'5);Tic.尽管toc <10 x = randn(256,1);y = lp_iir(x);说);结尾

可变带宽FIR和IIR过滤器

您还可以设计允许您在运行时更改截止频率的过滤器。dsp.variaseBandWidthfirfilter.dsp.variaseBandWidthiirfilter.可用于此类案例。

相关话题