matlab 实时信号平滑,信号平滑处理 - MATLAB & Simulink Example - MathWorks 中国

本文介绍了如何使用 MATLAB 对实时信号进行平滑处理,以揭示数据趋势并消除噪声。通过移动平均滤波器、加权平均滤波器、Savitzky-Golay 滤波器、中位数滤波器和 Hampel 滤波器等方法,展示了平滑不同类型信号的方法,并提供了实际示例,包括温度数据和信号去噪。
摘要由CSDN通过智能技术生成

目的

通过平滑处理,我们可以发现数据中的重要模式,同时忽略不重要的内容(如噪声)。我们使用滤波来执行这种平滑处理。平滑处理的目标是呈现值的缓慢变化情况,以便更容易看到数据的趋势。

有时,当您检查输入数据时,您可能希望平滑处理数据以便看到信号的趋势。在我们的示例中,我们有一组 2011 年 1 月洛根机场每小时的摄氏温度读数。

load bostemp

days = (1:31*24)/24;

plot(days, tempC)

axis tight

ylabel('Temp (\circC)')

xlabel('Time elapsed from Jan 1, 2011 (days)')

title('Logan Airport Dry Bulb Temperature (source: NOAA)')

ceb9163d45427e90223c64ad1fc5a7a4.png

请注意,我们可以直观地看到一天中的时间对温度读数的影响。如果您只关注月内的每日温度变化,则每小时的波动只会产生噪声,使得每日的变化很难辨别。为了去除时间的影响,我们现在希望使用移动平均滤波器来平滑处理数据。

一种移动平均滤波器

移动平均滤波器的最简单形式是其长度为 N 并且取波形的每 N 个连续采样的平均值。

为了对每个数据点应用移动平均滤波器,我们构造滤波器的系数,使得每个点的权重相等且占比为总均值的 1/24。这样我们可以得出每 24 小时的平均温度。

hoursPerDay = 24;

coeff24hMA = ones(1, hoursPerDay)/hoursPerDay;

avg24hTempC = filter(coeff24hMA, 1, tempC);

plot(days,[tempC avg24hTempC])

legend('Hourly Temp','24 Hour Average (delayed)','location','best')

ylabel('Temp (\circC)')

xlabel('Time elapsed from Jan 1, 2011 (days)')

title('Logan Airport Dry Bulb Temperature (source: NOAA)')

6ed921e0b4a2a6c4c95b73e71c65c5c4.png

滤波器延迟

请注意,滤波后的输出存在大约 12 个小时的延迟。这是因为我们的移动平均滤波器有延迟。

长度为 N 的任何对称滤波器都存在 (N-1)/2 个采样的延迟。我们可以人为去除这种延迟。

fDelay = (length(coeff24hMA)-1)/2;

plot(days,tempC, ...

days-fDelay/24,avg24hTempC)

axis tight

legend('Hourly Temp','24 Hour Average','location','best')

ylabel('Temp (\circC)')

xlabel('Time elapsed from Jan 1, 2011 (days)')

title('Logan Airport Dry Bulb Temperature (source: NOAA)')

19f75d6c5cd38d4ade26f7d881c752a5.png

提取平均

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值