0

我有一个 1 维信号(EEG 信号),我想将其转换为 2D 信号,以便将其用作 CNN 模型的输入。我可以使用傅里叶变换来做到这一点吗?

4

2 回答 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 回答