如何使用python平滑这些信号跟踪?

如何使用python平滑这些信号跟踪?,python,numpy,scipy,signal-processing,Python,Numpy,Scipy,Signal Processing,你可以看到左边绿色的快速上升和指数衰减瞬变“尖峰”代表随着时间的推移而变化的神经活动。蓝色表示基线参考信号。正如你所看到的,蓝色和绿色都有一些漂移 因为我遇到了基线漂移和一个通常有噪声的信号,所以我尝试使用高通滤波器。我能够通过反向低通滤波对它们进行高通滤波(参见简要教程)。右边是滤波后的信号 N=101 Fc=0.001 Fs=1.14 # it's imaging data being acquired at just over 1Hz h=scipy.signal.firwin(N

你可以看到左边绿色的快速上升和指数衰减瞬变“尖峰”代表随着时间的推移而变化的神经活动。蓝色表示基线参考信号。正如你所看到的,蓝色和绿色都有一些漂移

因为我遇到了基线漂移和一个通常有噪声的信号,所以我尝试使用高通滤波器。我能够通过反向低通滤波对它们进行高通滤波(参见简要教程)。右边是滤波后的信号

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)
虽然它引入了一些人工制品,例如在开始时引入了“假峰”,缩小了原始的绿色峰,并在其中一个绿色峰的底部造成了看起来像“下冲”的现象,但它还是成功地消除了漂移

我可能可以容忍一些这些人工制品,但它仍然太波涛汹涌,我不喜欢。有没有办法消除这里的噪音


< P>可以考虑通过使用

消除数据中不希望的线性趋势。
scipy.signal.detrend
文件是

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


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

如果目标是平滑,您不想使用低通滤波器(相对于高通滤波器)吗?不确定。事实上,我对过滤引入的所有工件都有点困扰。想知道平滑是否更安全。。。但是,是的,我现在会尝试低通滤波(或者从带通开始)我知道高通可以消除基线漂移,我记得那天有人告诉我避免这样做(可能是人为原因)。我认为低传球可能更好。我将独自尝试,没有高通,然后一起尝试。六羟甲基三聚氰胺六甲醚。。这里的基线漂移是由“光漂白”引起的,并遵循线性衰减。我敢打赌,如果我能算出斜率,就很容易纠正。高通将消除直流电,但如果你想平滑,也许可以尝试一个短的MA滤波器,确保你不会平滑掉感兴趣的信号。谢谢。我明天会试试这个,并更新我的进度。当然,你对信号所做的任何事情都会有一定程度的伪影。您确实应该了解应用于信号的变换的频率响应,以了解伪影的性质。你所看到的尖峰可以想象是由需要在输入信号上设置的滤波器产生的。尽管FIR滤波器通常比IIR滤波器更多,但任何滤波器都需要一点这种功能。考虑扔掉过滤后响应的第一部分。但实际上,您需要确定对项目非常重要的频段,并为此设计滤波器。