【问题标题】:How can I smooth out these signal traces using python?如何使用 python 平滑这些信号轨迹?
【发布时间】:2014-09-15 23:59:27
【问题描述】:

您可以在左侧以绿色看到的快速上升和指数衰减瞬变“尖峰”代表随时间变化的神经活动。蓝色是基线参考信号。如您所见,蓝色和绿色都有一些超时漂移。

因为我遇到了基线漂移和一般嘈杂的信号,所以我尝试了高通滤波器。我能够通过对它们进行反向低通滤波来对它们进行高通滤波(参见简短教程here)。右边是滤波后的信号。

N=101
Fc=0.001  
Fs=1.14  # it's imaging data being acquired at just over 1Hz

h=scipy.signal.firwin(N, Fc, Fs/2)
h=-h
h[N/2] = h[N/2] + 1

#this is filter design output from the tutorial
#mfreqz(h)
#show()

y=scipy.signal.lfilter(h, 1.0, data)
yy=scipy.signal.lfilter(h, 1.0, data2)

尽管它引入了一些伪像,例如在开始时引入了“假峰”,缩小了原始绿色峰,并导致其中一个底部看起来像“下冲”,但它还是有效地消除了漂移。绿色的山峰。

我可能可以容忍其中一些伪影,但它仍然太波涛汹涌,不符合我的喜好。有没有办法消除这里的噪音?

【问题讨论】:

  • 如果目标是平滑,您是否不想进行低通滤波(而不是高通)?
  • 不确定。实际上,我对过滤引入的所有伪影有点困扰。想知道平滑是否更安全......但是,现在将尝试低通滤波(或完全从带通开始)
  • 我知道高通可以消除基线漂移,我记得以前有人告诉我不要这样做(也许是人工制品)。我认为低通可能会更好。我会单独尝试,没有高通,然后两者一起。嗯.. 这里的基线漂移是由“光漂白”引起的,并遵循线性衰减。我敢打赌,如果我能算出斜率,那将很容易纠正。
  • 高通会去除直流,但如果你想平滑,也许可以尝试一个短的 MA 滤波器,但要确保你不会平滑你感兴趣的信号。

标签: python numpy scipy signal-processing


【解决方案1】:

您可以考虑首先使用删除数据中不需要的线性趋势

scipy.signal.detrend

文档是here

您可能还想尝试从具有科学意义的(绿色)信号中减去适合您的基线(蓝色)信号的最小二乘。

然后,为了平滑数据,请考虑使用低通滤波器,可能是移动平均 (MA) 滤波器或其他类型的低通滤波器。您可能需要尝试定义一个过滤器来去除噪声成分,但不会去除您感兴趣的信号。

【讨论】:

  • 谢谢。我明天会试试这个并更新我的进度。
  • 当然,你对信号所做的任何事情都会有一定程度的伪影。您确实应该了解应用于信号的变换的频率响应,以了解伪影的性质。您看到的尖峰可以认为是由需要稳定输入信号的滤波器产生的。尽管 FIR 滤波器通常比 IIR 多,但任何滤波器都需要一些此功能。考虑丢弃过滤响应的第一部分。但实际上,您需要确定对项目很重要的频段并为此设计滤波器。
猜你喜欢
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多