主要内容

信号平滑

这个例子展示了如何使用移动平均滤波器和重采样分离周期的影响组件的时间每小时温度读数,以及删除不需要的行从一个开环电压测量噪声。示例还展示了如何光滑的水平一个时钟信号,同时保留边缘使用中值滤波。示例还展示了如何使用一个Hampel过滤器去除较大的离群值。

动机

平滑是我们发现重要的模式数据而不重要的事情(即噪声)。我们使用执行这种平滑滤波。平滑的目标是生产缓慢的变化值,这样更容易看到我们的数据的趋势。

有时您可能希望当你检查输入数据平滑为了看到一个趋势的数据信号。在我们的例子中,我们有一组温度在摄氏度每小时在波士顿洛根机场为整个月1月,2011年。

负载bostemp天=一句子* 24)/ 24;情节(天,tempC)轴ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含一个类型的对象。

注意,我们可以直观地看到效果,一天中不同的时间温度读数。如果你只有兴趣在月每日温度变化,每小时波动只贡献噪音,这会让《每日变化难以辨别。删除一天中不同的时间的影响,我们现在要平滑数据通过使用移动平均滤波器。

移动平均滤波器

在其最简单的形式,一个长度为N的移动平均滤波器需要的平均每N个连续波形的样本。

移动平均滤波器应用于每个数据点,我们构造系数滤波器,每个点同样加权和贡献1/24的总平均水平。这给了我们在每一个24小时期间的平均温度。

hoursPerDay = 24;hoursPerDay coeff24hMA = 1 (1) / hoursPerDay;avg24hTempC =过滤器(coeff24hMA 1 tempC);情节(天,[tempC avg24hTempC])传说(每小时的临时的,“24小时平均(延迟)”,“位置”,“最佳”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含2线类型的对象。这些对象代表每小时临时,24小时平均(延迟)。

过滤器延迟

注意,过滤后的输出是推迟了大约12个小时。这是由于这样的事实:我们的移动平均滤波器有延迟。

任何对称滤波器长度为N的将会有一个延迟(N - 1) / 2样本。我们可以手动占这个延迟。

fDelay =(长度(coeff24hMA) 1) / 2;情节(天,tempC,avg24hTempC days-fDelay / 24日)轴传奇(每小时的临时的,24小时平均的,“位置”,“最佳”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含2线类型的对象。这些对象代表每小时临时,24小时的平均水平。

提取的平均差异

此外,我们还可以使用移动平均滤波器获得更好地估计一天中不同的时间如何影响整体温度。要做到这一点,首先,减去平滑的数据每小时温度测量。然后,段差数据转化为天,以平均超过所有31天。

图deltaTempC = tempC - avg24hTempC;deltaTempC =重塑(deltaTempC, 24岁,31)。';情节(桥,意味着(deltaTempC))轴标题(24小时平均的平均气温差的)包含(“一天的小时(因为午夜)”)ylabel (“温差(\ circC)”)

图包含一个坐标轴对象。坐标轴对象与标题的意思是温差从24小时平均包含一个类型的对象。

提取包络峰值

有时我们也想有一个顺利的不同估计温度信号的高点和低点每日更换。这样做我们可以使用信封功能连接极端高点和低点发现在24小时内的一个子集。在这个例子中,我们确保至少有16个小时之间极高和极低。我们也可以了解高点和低点是如何通过两个极端之间的平均趋势。

[envHigh, envLow] =信封(tempC 16“高峰”);envMean = (envHigh + envLow) / 2;情节(天,tempC,天,envHigh,天,envMean,天,envLow)轴传奇(每小时的临时的,“高”,“的意思是”,“低”,“位置”,“最佳”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含4线类型的对象。这些对象代表每小时温度,高,低。

加权移动平均滤波器

其他类型的移动平均滤波器不同样重量每个样本。

另一个常见的过滤器的二项展开式 ( 1 / 2 , 1 / 2 ] n 。这种类型的滤波器近似于一个正常的曲线大值n。它是用于滤除高频噪声对小n。寻找二项式系数滤波器,盘旋 ( 1 / 2 , 1 / 2 ] 与自身,然后迭代卷积和的输出 ( 1 / 2 , 1 / 2 ] 规定的次数。在这个例子中,使用五总迭代。

h = (1/2 1/2);binomialCoeff = conv (h, h);n = 1:4 binomialCoeff = conv (binomialCoeff h);结束图fDelay =(长度(binomialCoeff) 1) / 2;binomialMA =过滤器(binomialCoeff 1 tempC);情节(天,tempC,binomialMA days-fDelay / 24日)轴传奇(每小时的临时的,“二项加权平均”,“位置”,“最佳”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含2线类型的对象。这些对象代表每小时临时,二项加权平均。

另一个过滤器有点类似于高斯滤波器是指数移动平均滤波器扩张。这种类型的加权移动平均滤波器易于构建和不需要一个很大的窗口大小。

你调整一个α指数加权移动平均滤波器的参数在0和1之间。更高的阿尔法值会减少,平滑。

α= 0.45;exponentialMA =过滤器(α,alpha - [1], tempC);情节(天,tempC,binomialMA days-fDelay / 24日,days-1/24 exponentialMA)轴传奇(每小时的临时的,“二项加权平均”,指数加权平均的,“位置”,“最佳”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) ')

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含3线类型的对象。这些对象代表每小时临时,二项加权平均、指数加权平均。

放大一天的阅读。

轴([3 4 5 2])

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含3线类型的对象。这些对象代表每小时临时,二项加权平均、指数加权平均。

Savitzky-Golay过滤器

您会注意到,通过平滑数据极端值是有些剪。

跟踪信号更密切,你可以使用一个加权移动平均滤波器,试图适应指定顺序的一个多项式在最小二乘意义上的指定数量的样本。

方便,可以使用函数sgolayfilt实现一个Savitzky-Golay平滑滤波器。使用sgolayfilt,你指定一个奇数长的段的数据和一个多项式秩序严格小于段长度。的sgolayfilt内部函数计算多项式平滑系数,执行延迟对齐,和照顾瞬态效应的数据记录的开始和结束。

cubicMA = sgolayfilt (tempC 3 7);quarticMA = sgolayfilt (tempC 4 7);quinticMA = sgolayfilt (tempC、5、9);情节(天,[tempC cubicMA quarticMA quinticMA])传说(每小时的临时的,“马Cubic-Weighted”,“马Quartic-Weighted”,“马Quintic-Weighted”,“位置”,“东南”)ylabel (“临时(\ circC)”)包含(从2011年1月1日的时间(天))标题(“洛根机场干球温度(来源:NOAA) '轴([3 5 5 2])

图包含一个坐标轴对象。坐标轴对象与标题Logan机场干球温度(来源:NOAA)包含4线类型的对象。这些对象代表每小时临时,Cubic-Weighted马,马Quartic-Weighted Quintic-Weighted MA。

重采样

有时它有利于重新取样信号以适当应用移动平均线。

在我们下一个示例中,我们的开环电压输入采样模拟仪器的干扰从60 Hz交流电源线路噪声。我们用1千赫采样率采样电压。

负载openloop60hertzfs = 1000;t =(0:元素个数(openLoopVoltage) 1) / fs;情节(t, openLoopVoltage) ylabel (“电压(V)”)包含(“时间(s)”)标题(开环电压测量的)

图包含一个坐标轴对象。坐标轴对象与标题开环电压测量包含一个类型的对象。

让我们尝试删除线路噪声的影响通过使用移动平均滤波器。

如果你构建一个均匀加权移动平均滤波器,它将删除任何组件定期对过滤器的持续时间。

大约有1000/60 = 16.667 60 Hz的样品在一个完整的周期采样时1000 Hz。让我们尝试“围捕”并且要使用一个过滤器。这将给我们最大过滤的基本频率1000赫兹/ 17 = 58.82赫兹。

情节(t, sgolayfilt (openLoopVoltage 1 17) ylabel (“电压(V)”)包含(“时间(s)”)标题(开环电压测量的)传说(“移动平均滤波器操作在58.82赫兹”,“位置”,“东南”)

图包含一个坐标轴对象。坐标轴对象与标题开环电压测量包含一个类型的对象。该对象代表了移动平均滤波器操作在58.82赫兹。

注意,当电压显著平滑,它还包含一个小的60赫兹的涟漪。

我们可以显著降低纹波如果我们重新取样信号捕获一个完整的全循环的60赫兹信号移动平均滤波器。

如果我们重新取样信号17 * 60 Hz = 1020 Hz,我们可以使用17点移动平均滤波器去除60 Hz线噪音。

fsResamp = 1020;vResamp =重新取样(openLoopVoltage fsResamp, fs);tResamp =(0:元素个数(vResamp) 1) / fsResamp;vAvgResamp = sgolayfilt (vResamp 1 17);情节(tResamp vAvgResamp) ylabel (“电压(V)”)包含(“时间(s)”)标题(开环电压测量的)传说(移动平均滤波器操作60赫兹的,“位置”,“东南”)

图包含一个坐标轴对象。坐标轴对象与标题开环电压测量包含一个类型的对象。该对象代表了移动平均滤波器操作60赫兹。

中值滤波器

移动平均线、加权移动平均和Savitzky-Golay过滤器平滑滤波器的所有数据。然而,这可能并不总是什么是想要的。例如,如果我们的数据来自一个时钟信号和锐利的边缘,我们不希望顺利吗?到目前为止讨论的过滤器不工作很好:

负载clockexyMovingAverage = conv (x)的(5 - 1)/ 5,“相同”);ySavitzkyGolay = sgolayfilt (x, 3、5);情节(t x,t yMovingAveraget, ySavitzkyGolay)传说(原始信号的,“移动平均”,“Savitzky-Golay”)

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象。这些对象代表原始信号,移动平均线,Savitzky-Golay。

移动平均线,分别Savitzky-Golay过滤器如果正确和时钟信号的边缘附近矫枉过正一样。

一个简单的方法来保存边缘,但仍然是使用中值滤波平滑水平:

yMedFilt = medfilt1 (x 5“截断”);情节(t x,t, yMedFilt)传说(原始信号的,“中值滤波”)

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

离群值通过Hampel过滤去除

许多过滤器是敏感的离群值。过滤器是密切相关的中值滤波器是Hampel过滤器。这个过滤器有助于消除异常值从一个信号没有过度平滑数据。

看到这,加载一个火车汽笛的录音和添加一些人工噪声峰值:

负载火车y(1:400:结束)= 2.1;情节(y)

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

因为每个高峰我们介绍的时间只有一个样品,我们可以用三个元素的中值滤波去除峰值。

持有情节(medfilt1 (y, 3))传奇(原始信号的,“过滤信号”)

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

过滤器移除的峰值,但也删除大量数据点的原始信号。Hampel过滤器的工作原理类似于中值滤波器,然而它取代就相当于几标准差的值从当地的中值。

传说hampel (y, 13) (“位置”,“最佳”)

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象。这些对象代表原始信号、过滤信号、离群值。

只有离群值从原始信号中删除。

进一步的阅读

更多信息过滤和重采样信号处理工具箱。

参考:肯德尔,莫里斯·G。,Alan Stuart, and J. Keith Ord.先进的统计理论,卷3:设计与分析,时间序列。第四。伦敦:麦克米兰,1983年。

另请参阅

||||