我有一个 1 维信号(EEG 信号),我想将其转换为 2D 信号,以便将其用作 CNN 模型的输入。我可以使用傅里叶变换来做到这一点吗?
问问题
1300 次
2 回答
0
在这里 x 而不是 np.linspace 使用您的数据点(一维)数组。您的 2D 将由 (x,freq)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 5, 100)
y = np.sin(2 * np.pi * x)
## fourier transform
f = np.fft.fft(y)
## sample frequencies
freq = np.fft.fftfreq(len(y))
plt.plot(freq, abs(f) ** 2)
plt.show()
print( "Shape of singal array : {}".format(x.shape))
print( "Shape of frequency array : {}".format(freq.shape))
new_2D_array = np.vstack((x, freq)).T
print(new_2D_array)
于 2020-08-06T14:39:22.153 回答
0
您可能正在寻找“频谱图”:https ://en.wikipedia.org/wiki/Spectrogram 这是幅度与时间和频率的二维图。
您可以通过对信号的连续重叠部分应用短时傅里叶变换来实现。
Scipy 有一些方法可以为你做到这一点:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.stft.html https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.spectrogram.html
频率的数量与窗口大小成正比(上述文档中的 nperseg)。您需要为 EEG 确定适当的频率分辨率才能进行设置。
于 2020-08-08T17:23:02.680 回答