我有一个受电尖峰影响的加速数据集。
我正在寻找一种好的方法来过滤或减少这些尖峰,因为需要根据这些数据计算 FFT 的滚动窗口和其他统计指标(例如峰度和偏度)。我不能简单地删除这些异常值或用 NaN 替换它们。 采样2000[hz]
到目前为止,我已经尝试过 MATLAB 2012b:
- 小波去噪(Haar 小波)
- 中值滤波器
- 尖峰和迭代方法
您能建议一种处理这些数据的正确方法吗?
最佳答案
我建议进行一些局部平滑。通过定义阈值并对低于和高于的所有值求平均值。
Af = data.example1;
% Thresholds
Tl = -0.6;
To = 0.6;
peaks = find( Af < Tl | Af > To);
Af(peaks) = ( Af(peaks-1) + Af(peaks+1) ) / 2;
这种方法的问题是您的大纲有时最多包含 6 个样本。 因此,您需要使用 while 循环分多个步骤进行平滑:
Af = data.example1;
% Thresholds
Tl = -0.6;
To = 0.6;
% initialisation
peaks = find( Af < Tl | Af > To);
counter = 0;
while ~isempty(peaks)
peaks = find( Af < Tl | Af > To);
Af(peaks) = ( Af(peaks-1) + Af(peaks+1) ) / 2;
counter=counter+1;
end
经过 6 次迭代后,您将得到以下结果:
关于Matlab 滤波器加速数据中的电尖峰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19154067/