主要内容

MATLAB中的低通滤波器设计

这个例子展示了如何设计低通滤波器。该示例突出显示了DSP System Toolbox™中一些最常用的命令行工具。或者,您可以使用Filter Builder应用程序来实现这里介绍的所有设计。有关更多设计选项,请参见低通FIR滤波器的设计

介绍

在设计低通滤波器时,首先要选择是设计FIR滤波器还是IIR滤波器。当线性相位响应很重要时,通常选择FIR滤波器。FIR滤波器也倾向于定点实现,因为它们通常对量化效果更健壮。FIR滤波器也被用于许多高速实现,如fpga或asic,因为它们适合流水线操作。IIR滤波器(特别是双四滤波器)用于不考虑相位线性的应用(如音频信号处理)。IIR滤波器通常在计算上更高效,因为它们可以用比FIR滤波器更少的系数来满足设计规范。IIR滤波器也倾向于有更短的瞬态响应和更小的组延迟。然而,使用最小相位和多速率设计可以使FIR滤波器在群延迟和计算效率方面与IIR滤波器相媲美。

FIR低通设计-指定滤波器顺序

在许多实际情况下,您必须指定过滤顺序。一种情况是,如果您的目标硬件限制了过滤顺序为特定数量。另一个常见的场景是,当您已经为您的实现计算了可用的计算预算(MIPS),这为您提供了一个有限的过滤器顺序。信号处理工具箱中的FIR设计函数(包括fir1firpmfirls)都能够按照指定的顺序设计低通滤波器。在DSP系统工具箱中,指定阶数的低通FIR滤波器设计的首选函数为firceqrip.该函数设计具有指定通带/阻带纹波值和指定通带边缘频率的最优等纹波低通/高通FIR滤波器。阻带边缘频率是由设计决定的。

设计一个低通FIR滤波器,用于48 kHz采样数据。通带边缘频率为8khz。通带纹波为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。

最小订单的设计

最优等纹波滤波器的另一个设计函数是firgrfirgr可以设计一个滤波器,满足通带/阻带纹波限制,以及指定的过渡宽度与最小可能的滤波器顺序。例如,如果阻带边缘频率指定为10khz,那么得到的滤波器的阶数为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。FIRFilterdsp。FIRFilter具有在循环中执行时管理状态的优势。dsp。FIRFilter还具有定点功能,支持C代码生成,HDL代码生成,以及ARM®Cortex®M金宝app和ARM Cortex A的优化代码生成。

用120阶FIR低通滤波器对256个样本帧中10秒均值为零、单位标准差为零的白噪声进行滤波。在频谱分析仪上查看结果。

LP_FIR=dsp.FIRFilter(“分子”, NUM);SA = dsp。简介(“SampleRate”Fs,...“SpectralAverages”5);抽搐虽然toc<10x=randn(256,1);y=LP_FIR(x);阶跃(SA,y);结束

使用dsp。LowpassFilter

dsp。LowpassFilter是替代使用吗firceqripfirgr结合dsp。FIRFilter.基本上,dsp。LowpassFilter将两步过程浓缩为一步。dsp。LowpassFilter提供了相同的优势dsp。FIRFilter提供了定点支持、C代码生成支持、HDL代码生成支持和ARM Cor金宝apptex代码生成支持。

为48 kHz采样的数据设计一个低通FIR滤波器。通带边缘频率为8 kHz。通带纹波为0.01 dB,阻带衰减为80 dB。将滤波器阶数限制为120。创建dsp。FIRFilter根据您的规格。

LP_FIR = dsp。LowpassFilter(“SampleRate”Fs,...“DesignForMinimumOrder”错误的“FilterOrder”N...“通带频率”《外交政策》,...“PassbandRipple”据美联社,,“止损绷带”, Ast);

的系数LP_FIR和里面的系数相同吗全国矿工联盟

NUM_LP =特遣部队(LP_FIR);

你可以用LP_FIR直接过滤数据,如前一示例所示。您还可以使用FVTool分析过滤器或使用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阻带Atten过渡宽度:1.64 kHz

基于dsp的最小订单设计。LowpassFilter

你可以用dsp。LowpassFilter设计最小阶滤波器并使用测量验证设计符合规定的规格。过滤器的顺序还是100。

LP_FIR_minOrd = dsp。LowpassFilter (“SampleRate”Fs,...“DesignForMinimumOrder”,真的,...“通带频率”《外交政策》,...“StopbandFrequency”置,...“PassbandRipple”据美联社,,...“止损绷带”,Ast);度量(LP_FIR_minOrd)Nlp=顺序(LP_FIR_minOrd)
ans =采样率:48 kHz通频带边缘:8 kHz 3-dB点:8.7136 kHz 6-dB点:8.922 kHz阻带边缘:10 kHz通频带纹波:0.0098641 dB阻带Atten。转换宽度:2 kHz Nlp = 100

IIR滤波器的设计

椭圆滤波器是最优等纹波FIR滤波器的IIR对等物。因此,您可以使用相同的规范来设计椭圆滤波器。你得到的IIR滤波器的阶数比相应的FIR滤波器的阶数要小得多。

设计一个与120阶FIR滤波器具有相同采样频率、截止频率、通带纹波约束和阻带衰减的椭圆滤波器。将椭圆滤波器的滤波顺序减少到10。

N = 10;LP_IIR = dsp。LowpassFilter(“SampleRate”Fs,...“FilterType”“IIR”...“DesignForMinimumOrder”错误的...“FilterOrder”N...“通带频率”《外交政策》,...“PassbandRipple”据美联社,,...“止损绷带”, Ast);

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

hfvt = fvtool (LP_FIR LP_IIR,“Fs”Fs);传奇(hfvt‘FIR等波纹,N=120’...'IIR Elliptic, N = 10');成本FIR=成本(LP FIR)成本IIR=成本(LP IIR)
cost_FIR = struct with fields: NumCoefficients: 121 NumStates: 120 MultiplicationsPerInputSample: 121 AdditionsPerInputSample: 120 cost_IIR = struct with fields: NumCoefficients: 25 NumStates: 20 MultiplicationsPerInputSample: 25 AdditionsPerInputSample: 20

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

运行IIR过滤器

IIR滤波器设计为双四滤波器。要对数据应用过滤器,请使用与FIR情况相同的命令。

用10阶IIR低通滤波器对256个样本帧中均值为零、单位标准差为零的10秒高斯白噪声进行滤波。在频谱分析仪上查看结果。

SA = dsp。简介(“SampleRate”Fs,...“SpectralAverages”5);抽搐虽然toc<10 x=randn(256,1);y=LP_IIR(x);SA(y);结束

可变带宽FIR和IIR滤波器

您还可以设计允许您在运行时更改截止频率的过滤器。dsp。VariableBandwidthFIRFilterdsp。VariableBandwidthIIRFilter可用于此类情况。

相关话题