首页 > 解决方案 > 如何正交化时间序列

问题描述

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

标签: pythonpython-3.xsignal-processingorthogonalspectral-python

解决方案


问题在于它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


推荐阅读