主要内容

实际的介绍了数字滤波

这个例子展示了如何设计、分析和应用数据的数字滤波器。它将帮助你回答这样的问题:我该如何弥补延迟引入了一个过滤器吗?,我怎么避免扭曲我的信号吗?,How do I remove unwanted content from my signal?, How do I differentiate my signal?, and How do I integrate my signal?

过滤器可用于信号频谱形状所需的方式或执行数学运算如分化和整合。在下面您将学习一些实用的概念,将缓解过滤器的使用,当你需要他们。

这个例子着重于数字滤波器的应用程序,而不是在他们的设计。如果你想了解更多关于如何设计数字滤波器看到实用介绍数字滤波器的设计的例子。

延迟补偿引入的过滤

数字滤波器引入延迟你的信号。根据滤波器的特点,延迟可以恒定频率,也可以随频率。延迟的类型决定了你必须采取的行动去弥补它。的grpdelay函数允许您查看过滤器延迟作为频率的函数。看这个函数允许您识别的输出的延迟滤波器是常量或者随频率(换句话说,如果频率相关)。

滤波器延时,对所有的频率是恒定的可以很容易地将信号补偿的时间。FIR滤波器通常有持续的延迟。另一方面,延迟随频率引起的相位失真,可以显著改变的信号波形。补偿频率相关延迟不是这样琐碎的事情不断推迟的情况。IIR滤波器引入频率相关延迟。

补偿延迟常数过滤器

如前所述,可以测量滤波器的群延迟,以确认它是一个常数频率的函数。您可以使用grpdelay测量滤波器延时函数,D,弥补这个延迟通过添加D零输入信号和输出信号的改变及时D样本。

考虑一个嘈杂的心电图信号,你想过滤去除高频噪声高于75赫兹。你想申请一个FIR低通滤波器,补偿滤波器延时,这样嘈杂和过滤信号正确对齐,可以绘制的相互比较。

Fs = 500;在赫兹%采样率N = 500;%信号样本的数量rng默认的;x =心电图(N) + 0.25 * randn (N, 1);%的波形t = (0: n - 1) / Fs;%的时间向量

设计一个70阶低通数字滤波器的截止频率75赫兹。

Fnorm = 75 / (Fs / 2);%归一化频率df = designfilt (“lowpassfir”,“FilterOrder”,70,“CutoffFrequency”,Fnorm);

情节滤波器的群时延,以确认它是恒定在所有频率表明线性相位滤波器。使用滤波器的群时延测量延迟。

grpdelay (df、2048 Fs)%的阴谋群延迟

{“字符串”:“图图1:群延迟包含一个坐标轴对象。坐标轴对象与标题群延迟包含一个类型的对象。”、“特克斯”:“群延迟”、“乳胶”:[]}

D =意味着(grpdelay (df))%过滤器延迟样本
D = 35

之前过滤、附加D 0结束时输入数据矢量,x。这将确保所有的有用的样本是刷新的过滤器,和输入信号和delay-compensated输出信号具有相同的长度。过滤器和弥补延迟的数据转移维样本的输出信号。这最后一步瞬态有效地消除了过滤器。

y =过滤器(df, [x;0 (D, 1)]);% D零附加到输入数据y = y (D + 1:结束);%的数据转移到弥补延迟情节(t t, x,, y,“线宽”,1.5)标题(过滤后的波形的)包含(“时间(s)”)传说(“原始噪声信号”,“过滤信号”网格)

图包含一个坐标轴对象。坐标轴对象与标题过滤波形包含2线类型的对象。这些对象代表原始噪声信号,过滤信号。

补偿频率相关的延迟

频率相关的延迟导致信号相位失真。补偿这种类型的延迟不是这样琐碎的事情不断推迟的情况。如果您的应用程序允许脱机处理,您可以删除通过实现零相位滤波使用频率相关延迟filtfilt函数。filtfilt执行零相位滤波的处理输入数据在正向和反向两个方向。你获得的主要作用是零相位失真,即。,you filter data with an equivalent filter that has a constant delay of 0 samples. Other effects are that you get a filter transfer function which equals the squared magnitude of the original filter transfer function, and a filter order that is double the order of the original filter.

考虑在前一节中定义的ECG信号。过滤这个信号,及时补偿。设计一个7阶低通IIR椭圆滤波器截止频率为75赫兹。

Fnorm = 75 / (Fs / 2);%归一化频率df = designfilt (“lowpassiir”,“PassbandFrequency”Fnorm,“FilterOrder”7“PassbandRipple”,1“StopbandAttenuation”、60);

滤波器的群时延。群时延随频率,表明过滤器延迟是频率相关。

grpdelay (df, 2048,“一半”Fs)

{“字符串”:“图图2:群延迟包含一个坐标轴对象。坐标轴对象与标题群延迟包含一个类型的对象。”、“特克斯”:“群延迟”、“乳胶”:[]}

过滤数据,看看每个过滤器的影响实现时间信号。零相位滤波有效地去除过滤器延迟。

日元=过滤器(df, x);%的非线性相位滤波器——没有延迟补偿y2 = filtfilt (df, x);%实现零相位延迟补偿情节(t, x)情节(t, y1,“r”,“线宽”1.5)情节(t, y2,“线宽”,1.5)标题(过滤后的波形的)包含(“时间(s)”)传说(原始信号的,“非线性相位IIR输出”,“零相位IIR输出”网格)xlim ([0.25 - 0.55])

图包含一个坐标轴对象。坐标轴对象与标题过滤波形包含3线类型的对象。这些对象代表原始信号,非线性相位IIR输出,零相位IIR输出。

零相位滤波是一个伟大的工具,如果您的应用程序允许非因果向前/向后过滤操作,和过滤器的变化应对广场最初的反应。

过滤器介绍常数延时线性相位滤波器。过滤器介绍频率相关延迟非线性阶段过滤器。

删除不必要的光谱信号的内容

过滤器是常用来删除不需要的光谱信号的内容。你可以选择从各种各样的过滤器。你想选择一个低通滤波器去除高频内容,或者一个高通滤波器当您想要删除低频率的内容。你也可以选择一个带通滤波器去除低,高频内容,同时保留一个中间带的频率。你选择一个bandstop过滤器当您想要删除的频率在给定乐队。

考虑一个音频信号,电源的嗡嗡声和白噪声。电源嗡嗡声是由一个60 Hz的基调。白噪声是一个信号,表明存在在所有音频带宽。

加载音频信号。指定一个44.1 kHz的采样率。

Fs = 44100;y = audioread (“noisymusic.wav”);

信号的功率谱。红三角标记显示了强大的60赫兹语气干扰音频信号。

[P F] = pwelch (y)的(8192 1),8192/2,8192 Fs,“权力”);helperFilterIntroductionPlot1 (F P [60 60], [-9.365 - -9.365],{原始信号功率谱的,“60 Hz的语气”})

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表原始信号功率谱,60赫兹的基调。

您可以先删除尽可能多的白噪声谱内容使用低通滤波器。滤波器的通带应该设置为一个值,提供了一个良好的降噪和音频之间的平衡恶化由于高频损失的内容。应用低通滤波器之前删除60 Hz的嗡嗡声是很方便,因为你将能够downsample带限信号。低利率信号将允许您设计一个尖锐和窄60 Hz bandstop过滤器与一个较小的过滤器的顺序。

设计一个低通滤波器的通带频率1 kHz和阻带1.4 kHz的频率。选择一个最小订单设计。

《外交政策》= 1 e3;%在赫兹频率通带置= 1.4 e3;在赫兹%阻带频率美联社= 1;在dB %通带波纹Ast = 95;在dB %阻带衰减df = designfilt (“lowpassfir”,“PassbandFrequency”《外交政策》,“StopbandFrequency”置,“PassbandRipple”据美联社,,“StopbandAttenuation”Ast,“SampleRate”Fs);

分析滤波器的响应。

fvtool (df,“Fs”Fs,“FrequencyScale”,“日志”,“FrequencyRange”,“指定freq.向量”,“FrequencyVector”F)

{“字符串”:“图图3:级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

过滤数据和弥补延迟。

D =意味着(grpdelay (df));%过滤器延迟ylp =过滤器(df, [y;0 (D, 1)]);ylp = ylp (D + 1:结束);

看看低通滤过的信号的频谱。频率1400赫兹以上内容已被删除。

Flp (Plp) = pwelch (ylp (8192 1), 8192/2, 8192 Fs,“权力”);Flp helperFilterIntroductionPlot1 (F P、Plp{原始信号的,“低通滤过的信号”})

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表原始信号,低通滤波器过滤信号。

从上面的功率谱图中,你可以看到的最大花费低通滤波器过滤信号的频率含量在1400赫兹。采样定理,采样率 2 × 1400年 = 2800年 赫兹将足以代表正确的信号,然而,你使用的是44100 Hz的采样率是一种浪费,因为你将需要处理更多的样品比必要的。可以downsample信号降低采样率,减少计算负荷,减少样本的数量你需要的过程。较低的采样率还将允许您设计一个尖锐和窄bandstop过滤器,需要删除60 Hz噪音,较小的滤波器的订单。

Downsample 10倍的低通滤过的信号获得Fs / 10 = 4.41 kHz的采样率。情节将采样前后的光谱信号。

Fs = f / 10;码= downsample (ylp 10);(Pds, Fds) = pwelch(码,(8192 1),8192/2,8192 Fs,“权力”);helperFilterIntroductionPlot1 (F P Fds, Pds,{在44100赫兹的信号采样的,“Downsampled信号,Fs = 4410 Hz '})

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表信号采样在44100赫兹,Downsampled信号,Fs = 4410 Hz。

现在删除60 Hz语气使用IIR bandstop滤波器。让阻带的宽度4赫兹集中在60赫兹。选择一个IIR滤波器实现大幅频率,通带波纹小,和相对较低的秩序。

df = designfilt (“bandstopiir”,“PassbandFrequency1”现年55岁的“StopbandFrequency1”58岁的“StopbandFrequency2”,62,“PassbandFrequency2”,65,“PassbandRipple1”,1“StopbandAttenuation”现年60岁的“PassbandRipple2”,1“SampleRate”Fs,“DesignMethod”,“ellip”);

分析级响应。

fvtool (df,“Fs”Fs,“FrequencyScale”,“日志”,“FrequencyRange”,“指定freq.向量”,“FrequencyVector”Fds (Fds > F (2)))

{“字符串”:“图图4:级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

执行零相位滤波避免相位失真。使用filtfilt函数来处理数据。

yb = filtfilt (df、码);

最后,upsample信号,把它带回原始音频44.1 kHz的采样率与音频声卡兼容。

yf =插值函数(yb, 10);Fs = f * 10;

看最后一个原始和处理信号的频谱。高频噪声地板和60 Hz语气减毒的过滤器。

[Pfinal, Ffinal] = pwelch (yf, (8192 1), 8192/2, 8192 Fs,“权力”);helperFilterIntroductionPlot1 (F P Ffinal Pfinal,{原始信号的,“最终过滤信号”})

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表原始信号,最后过滤信号。

如果你的电脑声卡,可以听信号前后处理。正如上面提到的,最终的结果是,就可以有效地减60 Hz的嗡嗡声和高频噪声的音频文件。

%的原始信号,取消下两行% hplayer = audioplayer (y, Fs);% (hplayer)玩%的低噪声信号,取消下两行% hplayer = audioplayer (yf, Fs);% (hplayer);

区分一个信号

MATLABdiff功能区分信号的缺点你可以增加输出的噪音水平。一个更好的选择是使用微分滤波器作为微分器的乐队感兴趣的,其他所有频率的衰减器,有效地去除高频噪声。

作为一个例子,分析位移的速度在地震中建筑物的地板上。位移或漂移测量记录在一楼的三个故事测试结构在地震条件下和保存在quakedrift。垫文件。数据向量的长度是10 e3,采样率是1 kHz,测量的单位是厘米。

区分位移数据获得的估计速度和加速度地震时建筑物的地板上。比较结果使用diff和冷杉微分器过滤器。

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

设计一个50阶微分滤波器的通带频率100赫兹,即带宽信号的大部分能量被发现。滤波器的阻带频率设置为120 Hz。

df = designfilt (“differentiatorfir”,“FilterOrder”,50岁,“PassbandFrequency”,100,“StopbandFrequency”,120,“SampleRate”Fs);

diff函数可以被看作是一个一阶滤波器响应 H ( Z ) = 1 - - - - - - Z - - - - - - 1 。使用FVTool比较级响应50阶微分器冷杉过滤和的反应diff函数。显然,两个通带地区的反应是等价的(从0到100赫兹)。然而,在阻带地区,50阶滤波器变弱而diff反应放大组件组件。这有效地增加高频噪声的水平。

hfvt = fvtool (df, [1], 1,“MagnitudeDisplay”,“零”,“Fs”Fs);传奇(hfvt“50阶冷杉的区别”,“diff函数的响应”);

{“字符串”:“图图5:零相位响应包含一个坐标轴对象。坐标轴对象与标题零相位响应包含2线类型的对象。这些对象代表50冷杉的区别,差异函数的响应。”、“特克斯”:“零相位响应”、“乳胶”:[]}

区分使用diff函数。添加0来弥补丢失的样品由于diff操作。

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

区分使用50订单冷杉过滤和弥补延迟。

D =意味着(grpdelay (df));%过滤器延迟v2 =过滤器(df,漂移;0 (D, 1)]);v2 = v2 (D + 1:结束);a2 =过滤器(df, v2;0 (D, 1)]);a2 = a2 (D + 1:结束);v2 = v2 / dt;a2 = a2 / dt ^ 2;

情节几个数据点的位移。情节也有一些数据点的速度和加速度计算diff和50订单冷杉过滤器。注意速度估计的噪声略有放大,放大的加速度估计得到diff

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

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象。

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象使用diff代表估计速度,估计使用冷杉过滤速度。

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象使用diff代表估计加速度,加速度估计使用冷杉过滤器。

整合一个信号

漏水的积分器整机全极过滤器过滤是一个传递函数 H ( Z ) = 1 / ( 1 - - - - - - c Z - - - - - - 1 ] 在哪里 c 是一个常数必须小于1,确保稳定的过滤器。它是不足为奇 c 方法一,破积分器的逆方法diff传递函数。应用破积分器获得的加速度和速度估计在前一节中分别回到速度和漂移。使用获得的估计diff因为它们是吵着函数。

使用一个漏水的积分器 一个 = 0 9 9 9 。情节的幅度响应漏水的积分器过滤器。滤波器作为低通滤波器有效地消除高频噪声。

fvtool (1 [1 -.999]“Fs”Fs)

{“字符串”:“图图6:级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含一个类型的对象。”、“特克斯”:“级响应(dB)”,“乳胶”:[]}

过滤速度和加速度漏水的积分器。乘以时间微分。

v_original = v1;a_original = a1;d_leakyint =过滤器(1 -0.999 [1]v_original);v_leakyint =过滤器(1 -0.999 [1]a_original);d_leakyint = d_leakyint * dt;v_leakyint = v_leakyint * dt;

情节的位移和速度估计和比较原始信号。

helperFilterIntroductionPlot3 (t,漂移,d_leakyint、v_original v_leakyint)

图包含2轴对象。坐标轴对象1包含2线类型的对象。这些对象代表漏水的积分器估计,原始位移。坐标轴对象包含2线类型的对象。这些对象代表漏水的积分器估计,原来的速度。

您还可以使用的集成信号cumsumcumtrapz功能。获得的结果将类似漏水的积分器。

结论

在这个示例中,您了解了线性和非线性阶段过滤器和你学会了如何补偿引入的相位延迟由每个滤波器类型。您还了解了如何应用过滤器去除不必要的信号频率成分,以及如何downsample信号后限制其与低通滤波器的带宽。最后,您学习了如何区分和集成一个信号用数字滤波器的设计。在示例中您还了解了如何使用分析工具来研究响应和群延迟你的过滤器。

有关过滤应用程序的更多信息,请参见信号处理工具箱™文档。有关如何设计数字滤波器的更多信息查看实用介绍数字滤波器的设计的例子。

引用

Proakis, j·G。,和D. G. Manolakis.数字信号处理:原理、算法和应用程序。恩格尔伍德悬崖,台北:普伦蒂斯·霍尔出版社,1996年。

Orfanidis, s . J。介绍了信号处理。恩格尔伍德悬崖,台北:普伦蒂斯·霍尔出版社,1996年。

附录

本例中使用以下辅助函数:

另请参阅

||||||||

Baidu
map