matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理

简介: matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理

此示例显示如何使用移动平均滤波器和重采样来隔离每小时温度读数的时间周期分量的影响,以及从开环电压测量中消除不需要的线路噪声。该示例还显示了如何使用Hampel过滤器来移除大异常值。


动机

平滑是我们如何发现数据中的重要模式,同时忽略不重要的事物(即噪音)。我们使用过滤来执行此平滑。平滑的目标是产生缓慢的价值变化,以便更容易看到我们数据的趋势。

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


请注意,我们可以直观地看到一天中的时间对温度读数的影响。如果您只对每月的日常温度变化感兴趣,则每小时波动只会产生噪音,这会使日常变化难以辨别。为了消除时间的影响,我们现在想通过使用移动平均滤波器来平滑我们的数据。


移动平均滤波器

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

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


过滤延迟

请注意,过滤后的输出会延迟大约十二小时。这是因为我们的移动平均滤波器有延迟。

任何长度为N的对称滤波器都将具有(N-1)/ 2个样本的延迟。


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




提取平均差异

我们也可以使用移动平均滤波器来更好地估计一天中的时间如何影响整体温度。为此,首先从每小时温度测量值中减去平滑后的数据。然后,将差异数据细分为几天,并获取该月所有31天的平均值。


deltaTempC = reshape(deltaTempC,24,31)。';


提取峰值包络

有时我们也希望对每天温度信号的高低变化有一个平滑变化的估计。为此,我们可以使用该envelope功能连接在24小时内检测到的极高和低点。在这个例子中,我们确保每个极高和极低之间至少有16个小时。我们还可以通过取两个极端之间的平均值来了解高点和低点的趋势。


加权移动平均滤波器

其他类型的移动平均滤波器不会对每个样本进行相同的加权

另一个常见的过滤器遵循二项式扩展。这种类型的滤波器近似于大的n值的正常曲线。它可用于滤除小n的高频噪声。要找到二项式滤波器的系数,请与其自身进行卷积,然后以规定的次数迭代地对输出进行卷积。在此示例中,使用五次总迭代。

binomialCoeff = conv(h,h);
fDelay =(length(binomialCoeff)-1)/ 2;



另一种类似于高斯扩展滤波器的滤波器是指数移动平均滤波器。这种类型的加权移动平均滤波器易于构造,并且不需要大的窗口 。

您可以通过0到1之间的alpha参数调整指数加权移动平均滤波器。较高的alpha值将具有较少的平滑。

exponentialMA = filter(alpha,[1 alpha-1],tempC);
plot(days,tempC,...
     days-fDelay / 24,binomialMA,...



 


Savitzky-Golay过滤器

为了更紧密地跟踪信号,您可以使用加权移动平均滤波器,该滤波器尝试在最小二乘意义上拟合指定数量的样本上的指定顺序的多项式。

为方便起见,您可以使用该功能sgolayfilt实现Savitzky-Golay平滑滤波器。

cubicMA = sgolayfilt(tempC,3,7);
quarticMA = sgolayfilt(tempC,4,7);
quinticMA = sgolayfilt(tempC,5,9);



重采样

我们在存在60 Hz交流电源线噪声干扰的情况下对模拟仪器输入端的开环电压进行采样。我们以1 kHz的采样率对电压进行采样。

fs = 1000;
t =(0:numel(openLoopVoltage)-1)/ fs;

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

如果构造一个均匀加权的移动平均滤波器,它将删除任何相对于滤波器持续时间而言是周期性的分量。

当以1000Hz采样时,在60Hz的完整周期中大约有1000/60 = 16.667个样本。让我们尝试“围捕”并使用17点过滤器。这将使我们在1000 Hz / 17 = 58.82 Hz的基频下进行最大滤波。


请注意,虽然电压显着平滑,但仍然包含60 Hz的小纹波。

如果我们重新采样信号,我们可以显着减少纹波,这样我们就可以通过移动平均滤波器捕获60 Hz信号的完整周期。

如果我们以17 * 60 Hz = 1020 Hz重新采样信号,我们可以使用我们的17点移动平均滤波器来消除60 Hz线路噪声。


中位数过滤器

移动平均线,加权移动平均线和Savitzky-Golay滤波器可以平滑它们过滤的所有数据。然而,这可能并不总是想要的。例如,如果我们的数据来自时钟信号并且具有我们不希望平滑的锐边,该怎么办?到目前为止讨论的过滤器效果不佳:


移动平均线和Savitzky-Golay滤波器分别在时钟信号边缘附近欠校正和过校正。

保留边缘但仍然平滑水平的一种简单方法是使用中值滤波器:


通过Hampel过滤器去除异常值

许多过滤器对异常值很敏感。与中值滤波器密切相关的滤波器是Hampel滤波器。此滤波器有助于从信号中删除异常值,而不会过度平滑数据。


由于我们引入的每个尖峰只有一个样本的持续时间,我们可以使用仅三个元素的中值滤波器来消除尖峰。


滤波器移除了尖峰,但它也删除了原始信号的大量数据点。Hampel滤波器的工作方式类似于中值滤波器,但它只取代了相当于远离局部中值的几个标准偏差的值。


仅从原始信号中移除异常值。

相关文章
|
9天前
|
运维 算法
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
|
2月前
|
算法 数据挖掘 vr&ar
基于ESTAR指数平滑转换自回归模型的CPI数据统计分析matlab仿真
该程序基于ESTAR指数平滑转换自回归模型,对CPI数据进行统计分析与MATLAB仿真,主要利用M-ESTAR模型计算WNL值、P值、Q值及12阶ARCH值。ESTAR模型结合指数平滑与状态转换自回归,适用于处理经济数据中的非线性趋势变化。在MATLAB 2022a版本中运行并通过ADF检验验证模型的平稳性,适用于复杂的高阶自回归模型。
|
2月前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
5月前
|
存储 算法 计算机视觉
m基于FPGA的FIR低通滤波器实现和FPGA频谱分析,包含testbench和滤波器系数MATLAB计算程序
在Vivado 2019.2平台上开发的系统,展示了数字低通滤波器和频谱分析的FPGA实现。仿真结果显示滤波效果良好,与MATLAB仿真结果一致。设计基于FPGA的FIR滤波器,利用并行处理和流水线技术提高效率。频谱分析通过离散傅里叶变换实现。提供了Verilog核心程序以示例模块工作原理。
50 4
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
5月前
|
机器学习/深度学习 算法 语音技术
基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真
**语音识别算法概览** MATLAB2022a中实现,结合MFCC与GRNN技术进行说话人身份检测。MFCC利用人耳感知特性提取语音频谱特征,GRNN作为非线性映射工具,擅长序列学习,确保高效识别。预加重、分帧、加窗、FFT、滤波器组、IDCT构成MFCC步骤,GRNN以其快速学习与鲁棒性处理不稳定数据。适用于多种领域。
|
6月前
|
存储 算法
m考虑时偏影响的根升余弦滤波器matlab仿真
MATLAB 2022a仿真实现了根升余弦滤波器(RRC)的效果,该滤波器常用于通信系统以消除码间干扰。RRC滤波器设计考虑了时偏影响,其脉冲响应由理想矩形脉冲卷积得到,滚降系数控制衰减速度。在有同步误差时,滤波器需保持良好ISI抑制能力。MATLAB代码展示了计算时偏量并应用RRC滤波于连续样本的过程,以降低误码率并优化系统性能。
69 2
|
6月前
|
数据可视化 数据库
matlab中使用VMD(变分模态分解)对信号去噪
matlab中使用VMD(变分模态分解)对信号去噪
matlab中使用VMD(变分模态分解)对信号去噪
|
6月前
matlab使用样条插值重采样估计INR数据研究
matlab使用样条插值重采样估计INR数据研究
|
6月前
|
数据可视化
matlab使用经验模式分解emd 对信号进行去噪
matlab使用经验模式分解emd 对信号进行去噪