2017-02-23 1 views
2

Je ne sais pas très bien comment gérer cela car c'est un sujet qui est nouveau pour moi, donc tout conseil avec mon code serait grandement apprécié. J'ai un ensemble d'enregistrements eeg (18949 enregistrements EEG avec un taux d'échantillonnage de 500Hz, où les enregistrements sont en NV). J'essaie de créer un graphique Frequency contre Voltage à partir des données mais je n'ai pas de chance jusqu'à présent.Graphe de tension de fréquence à partir de données EEG - FFT en Python

Mon code est le suivant:

data = pd.read_csv('data.csv') 
data = data['O1'] 
Fs = 500.0 
Ts = 1.0/Fs 
t = np.arange(len(data))/Fs 

n = len(data) # length of the signal 
k = np.arange(n) 
T = n/Fs 
frq = k/T # two sides frequency range 
frq = frq[range(int(n/2))] 

Y = np.fft.fft(data)/n 
Y = Y[range(int(n/2))] 

fig, ax = plt.subplots(2, 1) 
ax[0].plot(t,data) 
ax[0].set_xlabel('Time') 
ax[0].set_ylabel('Voltage') 
ax[1].plot(frq,abs(Y),'r') 
ax[1].set_xlabel('Freq (Hz)') 

plt.draw() 
plt.show() 

fig.savefig("graph.png") 

Et mon graphe résultant ressemble:

Graph

Quelqu'un pourrait-il donner quelques indications quant à l'endroit où je vais peut-être le problème?

Répondre

1

Votre signal a un décalage CC assez important (au moins par rapport aux autres variations de signal) dans le domaine temporel. Dans le domaine fréquentiel, ceci serait tracé comme une ligne forte à 0Hz (qui est cachée par l'axe de la courbe), alors l'amplitude des autres composantes de fréquence est relativement proche de 0.

Pour une meilleure visualisation, vous devez tracer le spectre de fréquence en Decibels (dB) en utilisant la formule 20*log10(abs(Y)), de sorte que vous pourriez réellement voir ces autres composants de fréquence.