文件

数字滤波实际介绍

这个例子说明了如何设计,分析和应用数字滤波器到您的数据。它会帮助你解答问题,如:我怎么补偿由滤波器引入的延迟?如何避免扭曲我的信号?如何从我的信号中去除不想要的内容?我如何区分我的信号?而如何整合我的信号?

滤波器可用于以期望的方式形状或执行诸如差分和集成的数学运算。在下面,您将学习一些实用的概念,当您需要时,会缓解过滤器的使用。

此示例侧重于数字过滤器的应用而不是在设计中。如果您想了解有关如何设计数字过滤器的更多信息,请参阅“数字滤波器设计的实际介绍”示例。

滤波引起的延迟补偿

数字过滤器在信号中引入延迟。根据滤波器特性,延迟在所有频率上都可以是恒定的,或者它可以随频率变化。延迟类型确定您必须采取的操作来弥补它。当grpdelay功能允许您将过滤器延迟视为频率的函数。查看此功能的输出允许您识别过滤器的延迟是否常量,或者如果它随频率而变化(即,如果它依赖于频率)。

滤波器延迟在所有频率上都是恒定的,可以很容易地通过在时间上移动信号来补偿。FIR滤波器通常有恒定的延迟。另一方面,随频率变化的延迟会引起相位失真,并显著改变信号波形。对频率相关延迟的补偿不像对常量延迟的补偿那么简单。IIR滤波器引入频率相关延迟。

补偿恒定过滤延迟

如前所述,可以测量滤波器的延迟组,以验证它是频率的常数函数。你可以使用grpdelay通过将D Zeros附加到输入信号并及时通过D样品将输出信号移位,来测量滤波器延迟,D,并补偿该延迟的功能。

考虑有噪声的心电图信号与要过滤,以除去超过75赫兹的高频噪声。要应用的FIR低通滤波器和补偿滤波器延迟,使得嘈杂和滤波后的信号正确对齐,并且可以在彼此的顶部进行比较来绘制。

Fs = 500;Hz中的样品率%n = 500;信号采样百分比rng默认;X = ECG(N)'+ 0.25 * randn(N,1);%噪音波形t =(0:n-1)/ fs;%时间向量%设计一个70阶低通FIR滤波器有75赫兹的截止频率。FNORM = 75 /(FS / 2);%归一化频率df = designfilt('低通道'“FilterOrder”70,'CutoffFrequency',fnorm);

绘制滤波器的组延迟,以验证它是常数跨越所有频率,表明滤波器是线性相位。使用组延迟来测量滤波器的延迟。

grpdelay (df、2048 Fs)%绘图组延迟D =均值(GRPDELAY(DF))样本中的滤波器延迟%
d = 35.

之前,在输入数据向量x的端部过滤,追加d零。这确保了所有有用样本被冲出的过滤器的,而且该输入信号和延迟补偿的输出信号具有相同的长度。过滤数据和由d样本的输出信号移位补偿延迟。这最后一步有效去除过滤瞬变。

Y =滤波器(DF,[X;零(d,1)]);%将d zeros附加到输入数据y = y(d + 1:结束);%换档数据以补偿延迟图图(T,X,T,Y,'r''linewidth',1.5);标题('过滤波形');Xlabel(“时间(s)”) 传奇(“原本喧闹的信号”“过滤信号”);网格紧的

补偿频率相关延迟

频率相关的延迟导致信号中的相位失真。补偿这种类型的延迟并不像恒定延迟情况一样微不足道。如果您的应用程序允许离线处理,则可以通过使用零阶段过滤来消除频率依赖延迟filtfilt函数。filtfilt通过在正向和反向方向上处理输入数据来执行零相滤波。主要效果是您获得零相位失真,即,使用具有0个样本的恒定延迟的等效滤波器过滤数据。其他效果是您获得一个过滤器传输函数,其等于原始滤波器传输功能的平方幅度,以及原始滤波器顺序的滤波器顺序。

考虑前一节中所定义的ECG信号。与不延迟补偿滤波器这个信号。

设计一种具有截止频率的7阶低通IIR椭圆滤波器%75赫兹的。FNORM = 75 /(FS / 2);%归一化频率df = designfilt('洛链'......“PassbandFrequency”,fnorm,......“FilterOrder”7,......'PassbandRipple',1,......“StopbandAttenuation”、60);

积在过滤器和通知它与频率指示该滤波器延迟是依赖于频率的变化的群延迟。

Grpdelay(DF,2048,'半'Fs)

过滤数据,并查看每个滤波器实现对时间信号的影响。

y1 =滤波器(df,x);%非线性相位滤波器-无延迟补偿y2 = filtfilt(df,x);%零阶段实施 - 延迟补偿图绘图(t,x);抓住情节(T,Y1,'r''linewidth',1.5);绘图(t,y2,'G''linewidth',1.5);标题('过滤波形');Xlabel(“时间(s)”) 传奇('原始信号''非线性相位IIR输出'......'零阶段IIR输出');轴=轴;轴([0.25 0.55 AX(3:4)])网格

注意零相位滤波是如何有效地消除滤波延迟的。

如果您的应用程序允许非因果前进/后向滤波操作,以及用于对原始响应的平方的滤波器响应的更改,则零相位过滤是一个很好的工具。

引入恒定延迟的滤波器是线性相位滤波器。引入频率相关延迟的滤波器是非线性相位滤波器。

从信号中移除不需要的光谱内容

滤波器通常用于去除信号中不需要的光谱内容。您可以从各种过滤器中进行选择。当你想要去除高频内容时,你可以选择低通滤波器,或者当你想要去除低频内容时,你可以选择高通滤波器。您也可以选择带通滤波器,以去除低频和高频内容,而留下一个中间频带的频率完好无损。当你想要去除给定频带上的频率时,你可以选择带阻滤波器。

考虑具有电源线HUM和白噪声的音频信号。电源线蜂鸣是由60 Hz音调引起的。白噪声是所有音频带宽存在的信号。

加载音频信号。

FS = 44100;%采样率y = audioread('noisymusic.wav');

绘制信号的功率谱。红色三角标记显示了干扰音频信号的强60 Hz音调。

[p,f] = pwelch(y,y(8192,1),8192 / 2,8192,fs,'力量');helperFilterIntroductionPlot1 (F P [60 60], [-9.365 - -9.365],......{“原始信号的功率谱”'60 hz tone'})

您可以首先使用低通滤波器删除尽可能多的白噪声谱内容。滤波器的通带应设置为在降噪与音频劣化之间提供良好折衷的值,由于高频内容丢失。在移除60 Hz HUM之前应用低通滤波器非常方便,因为您能够将带限量的信号缩小。较低的速率信号将允许您使用较小的过滤器顺序设计更锐利和更窄的60 Hz BandStop过滤器。

设计一个低通滤波器为1 kHz的通频带频率,和1.4千赫的阻带频率。选择一个最低订货设计。

fp = 1e3;Hz中的%通带频率FST = 1.4E3;Hz中的%阻带频率美联社= 1;DB中%通带纹波AST = 95;DB中的%停滞衰减%设计过滤器df = designfilt('低通道'“PassbandFrequency”,FP,......'StopbandFrequency',的Fst,'PassbandRipple'据美联社,,......“StopbandAttenuation”,AST,'采样率',fs);%分析过滤器响应hfvt = fvtool(df,'FS'Fs,'验证''日志'......'频率范围'“指定freq.向量”“FrequencyVector”,F);

%过滤数据并补偿延迟d =平均值(Grpdelay(DF));%过滤器延迟ylp =滤波器(df,[y; zeros(d,1)]);YLP = YLP(D + 1:结束);关闭(HFVT)

再看低通滤波信号的频谱。注意如何高于1400赫兹的频率内容已被删除。

[PLP,FLP] = pwelch(YLP,酮(8192,1),8192 / 2,8192,FS'力量');helperFilterIntroductionPlot1(F,P,FLP,PLP,......{'原始信号''低通滤波信号'})

从上面的功率谱曲线图中,可以看到的是,低通滤波的信号的最大不可忽略的频率含量在1400赫兹。通过采样定理,2 * 1400 = 2800 Hz的采样频率就足以正确地表示信号,则然而,使用44100赫兹这是因为你将需要处理比必要更多的样本的浪费的采样率。你可以下采样信号,以降低采样速率,并通过减少样本的数量,你需要过程减少计算量。较低的采样率也将允许你设计更清晰和更窄的带阻滤波器,以去除60Hz的噪声,具有更小的过滤器,以便在需要。

对低通滤波信号进行10倍的下采样,以获得Fs/10 = 4.41 kHz的采样率。绘制下采样前后的信号频谱。

FS = FS / 10;YDS =下击(YLP,10);[PDS,FDS] = PWELCH(YDS,yds(8192,1),8192 / 2,8192,fs,'力量');HelperFilterIntroductionPlot1(F,P,FDS,PD,......{'信号采样在44100 Hz''下采样信号,Fs = 4410hz '})

现在使用IIR BandStop过滤器删除60 Hz音调。让阻带的宽度为4 Hz,以60 Hz为中心。我们选择IIR过滤器来实现尖锐的频率凹口,小通带纹波,以及相对较低的顺序。使用数据filtfilt以避免相位失真。

%设计过滤器df = designfilt('bandstopiir''passbandfrequency1'现年55岁的......'stopbandfrequency1'58,'stopbandfrequency2', 62,......'passbandfrequency2'', 65,'passbandripple1',1,......“StopbandAttenuation”现年60岁的'passbandripple2',1,......'采样率'Fs,'DesignMethod'“ellip”);分析幅度响应hfvt = fvtool(df,'FS'Fs,'验证''日志'......'频率范围'“指定freq.向量”“FrequencyVector”Fds (Fds > F (2)));

执行零相位滤波以避免失真。

YBS = FILTFILT(DF,YDS);

最后,上采样信号,使其恢复到44.1千赫这是与音频声卡兼容的原始音频采样率。

YF = Interp(YBS,10);FS = FS * 10;

最后看一下原始和处理过的信号的频谱。注意高频噪声底和60赫兹的音调是如何被滤波器衰减的。

[Pfinal,Ffinal] = pwelch(YF,酮(8192,1),8192 / 2,8192,FS'力量');关闭(HFVT)HelperFilterIntroductionPlot1(F,P,Ffinal,Pfinal,......{'原始信号''最终过滤信号'})

处理之前和之后听信号。如上所述,最终的结果是,已有效地衰减60Hz的嗡嗡声和在音频文件中的高频噪声。

播放原始信号hplayer = audioplayer(Y,FS);玩(hplayer);%播放噪声降低信号hplayer = audioplayer(yf,fs);玩(hplayer);

差异化信号

MATLAB函数区分信号的缺点是,您可能会在输出时增加噪声水平。一个更好的选择是使用微分器滤波器,在感兴趣的频带中作为微分器,在所有其他频率上作为衰减器,有效地去除高频噪声。

例如,在地震期间分析建筑地板的位移速度。在地震条件下的三层测试结构的一层上记录位移或漂移测量,并保存在QuakEdRift.mat文件中。数据矢量的长度是10E3,采样率为1kHz,测量单元是CM。

区分位移数据以获得地震期间建筑地板的速度和加速度的估计。使用Diff和FIR差异化器过滤器进行比较结果。

加载quakedrift.matFS = 1000;%采样率DT = 1 / Fs的;%时间差异t =(0:长度(漂移)1)* dt;%时间向量

设计具有100赫兹其是在其大部分信号能量被发现的带宽的通带频率的50次微分滤波器。设置过滤器,以120赫兹的阻带频率。

df = designfilt(“differentiatorfir”“FilterOrder”, 50岁,......“PassbandFrequency”,100,'StopbandFrequency',120,......'采样率',fs);

功能可以看作是一个带有响应的第一阶FIR滤波器。使用FVTool比较50阶微分FIR滤波器的幅频响应和的响应函数。显然,这两个响应在通带区域(从0到100hz)是等效的。然而,在阻带区域,50阶滤波器衰减分量,而差分响应放大分量。这有效地增加了高频噪声的水平。

hfvt = fvtool(df,[1 -1],1,'magnitudedisplay''零阶段''FS',fs);传说(hfvt,“50阶FIR微分器”'差异函数的响应');

使用这件函数。由于区分操作添加零来补偿缺失样本。

v1 = diff / dt(漂移);a1 = diff / dt (v1);v1 = [0;v1);a1 = [0;0;a1];

使用50级FIR滤波器进行区分并补偿延迟。

d =平均值(Grpdelay(DF));%过滤器延迟v2 =滤波器(df,[漂移; zeros(d,1)]);v2 = v2(d + 1:结束);A2 =滤波器(DF,[V2;零(D,1)]);A2 = A2(D + 1:END);v2 = v2 / dt;A2 = A2 / DT ^ 2;

绘制一些地板位移的数据点。绘制速度和加速度的几个数据点,用Diff和第50次FIR滤波器计算。请注意如何在速度估计中略微放大噪声,并在加速估计中大幅放大

helperFilterIntroductionPlot2 (t,漂移,v1、v2, a1, a2)

整合一个信号

漏式积分器滤波器是一种具有传递函数的全极滤波器在哪里是,必须小于1,以确保过滤器的稳定性常数。这是毫不奇怪,因为趋近于1,漏积器趋近于传递函数。将泄漏积分器应用于前一节中获得的加速度和速度估计,以分别恢复速度和漂移。使用所获得的估计因为它们噪音更大。

使用带泄漏积分。绘制泄漏积分器过滤器的幅度响应。请注意,过滤器充当低通滤波器,有效地消除了高频噪声。

关闭(hfvt) fvtool (1 [1 -.999]'FS'Fs)

用泄漏的积分器过滤速度和加速度。

v_original = v1;a_original = a1;D_leakyint = filter(1,[1 -0.999],v_original);V_leakyint = filter(1,[1 -0.999],a_original);%差分差分d_leakyint = d_leakyint * dt;V_LEAKYINT = V_LEAKYINT * DT;

绘制位移和速度估计并与原始信号V1和A1进行比较。

helperFilterIntroductionPlot3(吨,漂移,d_leakyint,v_original,v_leakyint)

你也可以用cumsumCumtrapz.功能。结果与泄漏积分器获得的结果类似。

结论

在此示例中,您了解了线性和非线性阶段过滤器,并且您学习了如何补偿每个过滤器类型引入的相位延迟。您还了解了如何应用过滤器以从信号中删除不需要的频率分量,以及如何在利用低通滤波器限制其带宽之后向下采样信号。最后,您学习了如何使用数字滤波器设计来区分和集成信号。在整个示例中,您还学习了如何使用分析工具来查看滤波器的响应和组延迟。

进一步阅读

有关滤波器应用程序的更多信息,请参阅信号处理工具箱。有关如何设计数字滤波器的更多信息,请参阅“数字滤波器设计实用介绍”示例。

参考文献:J.G. Proakis和d.g. Manolakis,“数字信号处理”。原理、算法和应用”,Prentice-Hall, 1996。

S. J. Orfanidis,“信号处理介绍”,Prentice-Hall,1996。

附录

以下的辅助函数被用于本实施例。