如何将时间序列正交化

2024-10-02 02:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理MEG信号,为了解决空间泄漏问题,我想对时间序列进行正交化。 为了更好地理解,我开始使用正弦信号。 我用python编写了一段代码,为了实现正交化,我在[spectral python][1]模块中使用了一个函数。 如果您运行以下代码并绘制信号,您将发现如所附图片所示的内容。我认为正交化信号也应该看起来像原始信号。它不应该急剧改变。 请让我知道是否有更好的方法正交信号。 [在此处输入图像描述][2] 这是我的密码:

import matplotlib.pyplot as plt
import spectral
from scipy import signal
from scipy.signal import hilbert

#Computing Sine wave#
t = np.linspace(-0.02, 0.05, 1000)
sig = 325 * np.sin(2*np.pi*50*t)
sig1 = 200 * np.sin(2*np.pi*50*t)
signal = np.zeros((2, 1000))
signal[0] = sig
signal[1] = sig1

#Orthogonalisation
ortho = spectral.orthogonalize(signal)

#Plotting
plt.figure()
plt.plot(signal[0], 'Blue')
plt.plot(signal[1], 'Green')
plt.title('Signal')
plt.figure()
plt.plot(ortho[0], 'Red')
plt.plot(ortho[1], 'Black')
plt.title('Ortho')```


  [1]: https://www.spectralpython.net/class_func_ref.html#orthogonalize
  [2]: https://i.stack.imgur.com/GKVZ9.png

Tags: 代码fromimportsignal信号plotnppi
1条回答
网友
1楼 · 发布于 2024-10-02 02:30:31

问题是sig1只是sig的标量倍数,因此两个信号之间没有正交分量。由于机器精度/舍入,正在绘制的黑色正交分量只是噪声。请尝试以下方法:

sig1 = sig + 200 * np.cos(2*np.pi*50*t)

结果如下所示,两个信号是正交的:

In [4]: np.dot(ortho[0], ortho[1])
Out[4]: 1.9263943063278366e-16

ortho_image

相关问题 更多 >

    热门问题