如何过滤几乎周期性的噪声?

信息处理 matlab 噪音 Python 过滤 周期性的
2022-02-12 20:00:14

我的信号看起来像这样: 在此处输入图像描述

正如你所看到的,背景中有一些几乎周期性的脉冲,幅度约为 1000。我说的是几乎,因为如果你放大,你可能会看到它们彼此之间略有不同,而且可能会有没有它们的间隔,有些比如35000到40000之间。

我怎样才能摆脱这些脉冲?

带有数据的csv

2个回答

我认为你在这里遇到了一个难题。平滑您的信号(例如,使用移动平均线)可能对您没有帮助。我想您可以尝试将信号通过窄带陷波滤波器,其陷波中心频率是您不需要的脉冲的频率。MBaz 是正确的。考虑一个合适的滤波器意味着你必须知道你的信号在没有被那些不需要的脉冲污染的情况下会是什么样子。例如,您的未污染信号是否如下所示?

在此处输入图像描述

我意识到我没有以任何有意义的方式回答你的问题,但我在想:我假设你的嘈杂信号是 A/D 转换器的输出,它对被某种电噪声严重污染的模拟电压信号进行采样,一些电干涉。我认为您应该尽一切可能消除原始模拟信号中的电噪声,而不是消除数字样本中的噪声。

2015 年 12 月 12 日根据 Vlad 的评论更新:@Vladimir:啊,有趣!你写的很有道理。这些脉冲不是噪声污染,它们您信号的一部分。为了减弱这些脉冲,我想到了三件事:

[ 1 ] 我想看看将您的信号应用于移动平均过程的结果。

[2] 虽然我对这种滤波器没有任何有意义的经验,但我想知道将您的信号应用于中值滤波器会产生什么结果。

[3] 在我的 DSP 书籍的“DSP 技巧”一章中有一个方案,描述了如何衰减信号中非常窄的脉冲噪声。我不知道该方案对您的脉搏是否有用,但谁知道呢?如果您希望我向您发送有关此计划的信息,请给我发送一封私人电子邮件,地址为:R_dot_Lyons_@_ieee_dot_org。

您可以做的一件事(特别是对于这样的问题)是:

  1. 平滑信号
  2. 获取信号的峰值
  3. 连接峰值以消除脉冲。

假设 x 包含噪声信号

%Define a smoothing filter
h = ones(1, 10)./10;

smoothedSignal = filtfilt(h,1,x); 
[~,locs] = findpeaks(smoothedSignal);

% Connect the peaks together
plot(locs,smoothedSignal(locs));

示例图

这只是一个示例,您当然可以使用不同的平滑方法并选择效果最佳的方法。