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

目的

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

有时,当您检查输入数据时,您可能希望平滑处理数据以便看到信号的趋势。在我们的示例中,我们有一组 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)')

matlab 实时信号平滑,信号平滑处理 - MATLAB & Simulink Example - MathWorks 中国_第1张图片

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

一种移动平均滤波器

移动平均滤波器的最简单形式是其长度为 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)')

matlab 实时信号平滑,信号平滑处理 - MATLAB & Simulink Example - MathWorks 中国_第2张图片

滤波器延迟

请注意,滤波后的输出存在大约 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)')

matlab 实时信号平滑,信号平滑处理 - MATLAB & Simulink Example - MathWorks 中国_第3张图片

提取平均

你可能感兴趣的:(matlab,实时信号平滑)