如何正交化时间序列

How to orthogonalize time series

我正在处理 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

问题在于 sig1 只是 sig 的标量倍数,因此两个信号之间没有正交分量。您正在绘制的黑色正交分量只是机器 precision/roundoff 引起的噪声。试试这个:

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

结果如下图,两个信号正交:

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