MATLAB低通滤波器设计
这个例子展示了如何设计低通滤波器。该示例重点介绍了DSP System Toolbox™中一些最常用的命令行工具。或者,您可以使用过滤器生成器应用程序来实现这里提供的所有设计。有关更多设计选项,请参见设计低通FIR滤波器.
简介
在设计低通滤波器时,首先要做的选择是设计FIR滤波器还是IIR滤波器。当线性相位响应很重要时,通常选择FIR滤波器。FIR滤波器也倾向于用于定点实现,因为它们通常对量化效应更健壮。FIR滤波器也用于许多高速实现,如fpga或asic,因为它们适合流水线。IIR滤波器(特别是双方滤波器)用于相位线性无关的应用(如音频信号处理)。IIR滤波器通常在计算上更有效,因为它们可以比FIR滤波器以更少的系数满足设计规范。IIR滤波器也倾向于具有更短的瞬态响应和更小的群延迟。然而,使用最小相位和多速率设计可以导致FIR滤波器在群延迟和计算效率方面与IIR滤波器相当。
FIR低通设计-指定滤波器顺序
在许多实际情况中,您必须指定筛选器顺序。其中一种情况是,如果您的目标硬件已经将过滤器顺序限制为特定的数字。另一种常见的情况是,当您已经计算了实现的可用计算预算(MIPS),这为您提供了有限的过滤器顺序。信号处理工具箱中的FIR设计功能(包括fir1
,firpm
,firls
)都能够按照指定的顺序设计低通滤波器。在DSP系统工具箱中,指定顺序的低通FIR滤波器设计的首选函数为firceqrip
.该函数设计具有指定通带/阻带纹波值和指定通带边频率的最佳等纹波低通/高通FIR滤波器。阻带边缘频率是由设计决定的。
设计一个低通FIR滤波器用于48千赫的数据采样。通带边缘频率为8千赫。通带纹波为0.01 dB,阻带衰减为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);
设计滤波器firceqrip
看一下幅值频率响应。
NUM = firceqrip(N,Fp/(Fs/2),[Rp Rst],“passedge”);fvtool (NUM“Fs”Fs)
由此产生的止带边缘频率约为9.64 kHz。
最小订单的设计
最优等纹波滤波器的另一个设计函数是firgr
.firgr
可以设计一个滤波器,满足通带/阻带纹波约束以及指定的过渡宽度与最小的滤波器顺序。例如,如果将阻带边缘频率指定为10 kHz,则得到的滤波器的阶数为100,而不是设计时的120阶滤波器firceqrip
.较小的滤波器阶数是由较大的过渡带引起的。
指定止带边缘频率为10khz。获得一个通带纹波为0.01 dB和阻带衰减为80 dB的最小阶FIR滤波器。
Fst = 10e3;NumMin = firgr(“minorder”,[0 Fp/(Fs/2) Fst/(Fs/2) 1],…[1 1 0 0],[Rp,Rst]);
绘制最小阶FIR滤波器的幅频响应firgr
以及设计的120阶滤波器firceqrip
.最小阶设计的结果是一个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®Cortex®M和ARM Cortex A的优化代码生成。
使用120阶FIR低通滤波器在256个样本帧中以零均值和单位标准差滤波10秒的白噪声。在频谱分析仪上查看结果。
LP_FIR = dsp。FIRFilter (“分子”, NUM);光谱分析仪(“SampleRate”Fs);抽搐而Toc < 10 x = randn(256,1);y = LP_FIR(x);步骤(SA_FIR, y);结束发行版(SA_FIR)
使用dsp。LowpassFilter
dsp。LowpassFilter
有替代使用的方法吗firceqrip
而且firgr
连同dsp。FIRFilter
.基本上,dsp。LowpassFilter
将两步过程浓缩为一个步骤。dsp。LowpassFilter
提供了相同的优势dsp。FIRFilter
提供了定点支持、C代码生成支持、HDL代码生成支持和ARM Cortex代码生成支持。
设计一个低通FIR滤波器用于48千赫的数据采样。通带边缘频率为8千赫。通带纹波为0.01 dB,阻带衰减为80 dB。将过滤器的顺序限制为120。创建一个dsp。FIRFilter
根据您的规格。
LP_FIR = dsp。LowpassFilter(“SampleRate”Fs,…“DesignForMinimumOrder”假的,“FilterOrder”N…“PassbandFrequency”《外交政策》,…“PassbandRipple”据美联社,,“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 (“SampleRate”Fs,…“DesignForMinimumOrder”,真的,…“PassbandFrequency”《外交政策》,…“StopbandFrequency”置,…“PassbandRipple”据美联社,,…“StopbandAttenuation”, Ast);测量(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 = order(LP_FIR_minOrd)
Nlp = 100
IIR滤波器的设计
椭圆滤波器是IIR的最优等纹波FIR滤波器。因此,您可以使用相同的规格来设计椭圆滤波器。为IIR滤波器获得的滤波器阶数比相应的FIR滤波器的阶数要小得多。
设计一个与120阶FIR滤波器具有相同采样频率、截止频率、通带纹波约束和阻带衰减的椭圆滤波器。将椭圆滤波器的滤波阶数减少到10。
N = 10;LP_IIR = dsp。LowpassFilter(“SampleRate”Fs,…“FilterType”,“信息检索”,…“DesignForMinimumOrder”假的,…“FilterOrder”N…“PassbandFrequency”《外交政策》,…“PassbandRipple”据美联社,,…“StopbandAttenuation”, Ast);
比较FIR和IIR设计。计算两个实现的成本。
hfvt = fvtool(LP_FIR,LP_IIR,“Fs”Fs);传奇(hfvt'FIR等纹波,N = 120',…IIR椭圆,N = 10);
成本(LP_FIR)
cost_FIR =带字段的结构:NumCoefficients: 121 NumStates: 120 MultiplicationsPerInputSample: 121 AdditionsPerInputSample: 120
cost(LP_IIR)
cost_IIR =带字段的结构:NumCoefficients: 25 NumStates: 20 MultiplicationsPerInputSample: 25 AdditionsPerInputSample: 20
FIR和IIR滤波器具有相似的幅度响应。IIR滤波器的成本大约是FIR滤波器成本的1/6。
运行IIR过滤器
IIR滤波器被设计成一个双角滤波器。要将过滤器应用于数据,请使用与FIR情况相同的命令。
利用10阶IIR低通滤波器对256个样本帧中均值为零、单位标准差为零的10秒高斯白噪声进行滤波。在频谱分析仪上查看结果。
光谱分析仪(“SampleRate”Fs);抽搐而Toc < 10 x = randn(256,1);y = LP_IIR(x);SA_IIR (y);结束发行版(SA_IIR)
可变带宽FIR和IIR滤波器
您还可以设计允许您在运行时更改截止频率的滤波器。dsp。VariableBandwidthFIRFilter
而且dsp。VariableBandwidthIIRFilter
可用于此类情况。