Как преобразовать одномерный сигнал в двухмерный? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть одномерный сигнал (сигнал ЭЭГ), и я хочу преобразовать его в двухмерный сигнал, чтобы использовать его в качестве входных данных для модели CNN. Могу ли я использовать для этого преобразование Фурье?

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Вероятно, вы ищете «спектрограмму»: 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 в приведенных выше документах). Вам необходимо определить соответствующее частотное разрешение для ЭЭГ, чтобы установить это.

0 голосов
/ 06 августа 2020

Здесь 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)
...