Как преобразовать одномерный сигнал в двухмерный?
У меня есть одномерный сигнал (сигнал ЭЭГ), и я хочу преобразовать его в двухмерный сигнал, чтобы использовать его в качестве входных данных для модели CNN. Могу ли я использовать для этого преобразование Фурье?
2 ответа
Здесь 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. Это двухмерный график зависимости амплитуды от времени и частоты.
Вы делаете это, применяя кратковременное преобразование Фурье к последовательным перекрывающимся частям вашего сигнала.
У 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 в приведенных выше документах). Вам необходимо определить соответствующее частотное разрешение для ЭЭГ, чтобы установить это.