matlab时序异常Hampel Filter
时间: 2025-02-27 16:36:43 浏览: 20
使用Matlab实现Hampel滤波器进行时间序列异常检测
Hampel滤波器简介
Hampel滤波器是一种鲁棒统计方法,用于识别和修正时间序列中的离群点。通过滑动窗口技术,该算法能够有效地检测并移除异常值。对于每一个数据点,选取其周围一定数量的数据构成一个局部窗口,并计算这些数据的中位数以及中位数绝对偏差(MAD)[^4]。
Matlab代码示例
下面是一个简单的例子来展示如何在MATLAB环境中应用Hampel滤波:
% 生成带噪声的时间序列信号作为测试对象
Fs = 100; % Sampling frequency (Hz)
t = linspace(0, pi*8, Fs * 8); % Time vector
signal_clean = sin(t);
noise = randn(size(signal_clean)) .* 0.5;
signal_noisy = signal_clean + noise;
figure();
subplot(2, 1, 1), plot(t, signal_noisy,'r'), title('Noisy Signal');
% 应用Hampel滤波器去除异常值
windowSize = round(length(signal_noisy)/10)*2+1; % 定义窗宽为总长度十分之一再加一使其奇数
thresholdFactor = 3; % 设定阈值因子,默认三倍MAD
[filteredSignal, outliersIndices] = hampelFilter(signal_noisy', windowSize, thresholdFactor);
subplot(2, 1, 2), hold on,
plot(t, filteredSignal,'b'); % 绘制过滤后的曲线
scatter(t(outliersIndices)', signal_noisy(outliersIndices)','filled','MarkerFaceColor',[1 0 0]); % 标记被替换掉的异常点
title(['Filtered Signal with Window Size=', num2str(windowSize)]);
legend({'Filtered Data', 'Detected Outliers'},'Location','NorthWest');
hold off;
此段程序首先创建了一个带有随机高斯白噪音干扰的理想正弦波形;接着调用了hampelFilter()
函数来进行实际操作——这里假设已经定义好了相应的自定义版本或使用内置工具箱提供的同名功能[^1][^2]。最后绘制出了原始含噪信号图与经过处理之后的结果对比图像。
关键参数解释
windowSize
: 表示用来评估当前采样位置附近情况的一个固定大小区间内的样本数目;thresholdFactor
: 控制着判断是否属于异常的标准严格程度,通常设置成3左右即可满足大多数应用场景下的需求。