如何将一维信号转换为二维信号?
How to convert a 1D signal to 2D signal?
我有一个一维信号(EEG 信号),我想将其转换为二维信号,以便将其用作 CNN 模型的输入。我可以使用傅里叶变换来做到这一点吗?
在这里 x 而不是 np.linspace 使用您的数据点 (1D) 数组。您的 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)
您可能正在寻找“频谱图”:https://en.wikipedia.org/wiki/Spectrogram
这是振幅与时间和频率的二维图。
您可以通过对信号的连续重叠部分应用 short-time 傅里叶变换来实现。
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
频率数与 window 大小成正比(上述文档中的 nperseg)。您需要为 EEG 确定合适的频率分辨率才能进行设置。
我有一个一维信号(EEG 信号),我想将其转换为二维信号,以便将其用作 CNN 模型的输入。我可以使用傅里叶变换来做到这一点吗?
在这里 x 而不是 np.linspace 使用您的数据点 (1D) 数组。您的 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)
您可能正在寻找“频谱图”:https://en.wikipedia.org/wiki/Spectrogram 这是振幅与时间和频率的二维图。
您可以通过对信号的连续重叠部分应用 short-time 傅里叶变换来实现。
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
频率数与 window 大小成正比(上述文档中的 nperseg)。您需要为 EEG 确定合适的频率分辨率才能进行设置。