2010-01-29 16 views
0

J'ai 4 matrices de données F1, F2, O1, O2. Tous sont des signaux neuronaux recueillis à 1 ms pendant une seconde. F1 et O1 ont été collectés en même temps qu'avec F2 et O2. J'ai besoin de trouver comment les données collectées diffèrent entre les 2 essais et également de comparer les composants de chaque essai (F1 et O1) les uns aux autres pour remarquer et les différences dans les respones. Je suis nouveau à MATLAB mais je crois que j'ai besoin d'utiliser la fonction fft. Je ne sais pas par où commencer, toute aide serait grandement appréciée.Utilisation de FFT dans MATLAB sur plusieurs matrices de données pour trouver des différences dans les réponses

+0

À moins que vous indiquez comment vous mesurez ce dissemblance est difficile de répondre. –

+0

Tout ce qui m'a été donné était "Comment les réponses sur chaque sonde diffèrent-elles pour les visages et les objets?" –

Répondre

0

Si vous essayez de comparer les spectres de fréquences de deux acquisitions distinctes, alors fft est l'outil que vous souhaitez utiliser.

Mathworks a une bonne documentation sur la façon d'utiliser la fonction fft, et vous pouvez probablement couper et coller vos données directement dans l'exemple de code qu'elles fournissent.

Si vous voulez tracer les données sur les mêmes axes, vous pouvez utiliser la commande hold on, tracer différentes couleurs de ligne (Ex: plot(x,y,'r') va tracer une ligne rouge, 'b' un bleu, etc. - voir lineseries properties) et comprennent un legend pour étiqueter les parcelles.

2

En fonction de votre fréquence d'échantillonnage (1000 fois par seconde), vous ne pourrez analyser que les signaux dont la fréquence peut atteindre 500 hz. Tous les composants de signaux neuronaux qui ont des composants plus élevés apparaissent sous forme de signaux de composants inférieurs (sauf si votre appareil a filtre passe-haut etc ..)

La commande pour fft de Matlab Aide est: Y = fft (signal n)

Le signal est F1 ou O1 ou F2 ou O2 et devrait être un vecteur 1000 long. n détermine le nombre d'échantillons de votre FFT. C'est essentiellement comment finement vous diviserez les valeurs de fréquence entre 0 hz et 1000 hz (votre taux d'échantillonnage). Par exemple, si vous choisissez n = 256, votre Y sera un vecteur 256 long avec une mesure correspondant aux fréquences (0 * 1000/256 hz, 1 * 1000/256 hz, ... 255 * 1000/256 hz) .

Y sera un vecteur de valeurs complexes. Souvent, vous voulez voir la force ou la puissance du signal. Vous pouvez utiliser 'abs()' pour trouver l'ampleur. myPSD = abs (Y). Ensuite parce que vos signaux sont de vrais signaux, leurs fft sont symétriques par rapport à la moitié du taux d'échantillonnage (500hz). Ainsi, vous devriez seulement regarder la première moitié. Voici un extrait de code pour regarder la première moitié.

Y = fft (signal, n); % choisissez votre n

myPSD = abs (Y);

myHalfPSD = myPSD (1: ceil (n/2))

myFreqValues ​​= [0: 1000/n: 500-1000/n]% à la fois myHalfPSD et myFreqValues ​​devraient être n/2 longue

plot (myFreqValues, myHalfPSD)

Typiquement, PSD est affiché sur une échelle logarithmique ou même décibale. Vous pourriez donc ajouter une ligne.

Y = fft (signal, n); % choisissez votre n

myPSD = abs (Y);

myHalfPSD = myPSD (1: ceil (n/2))

myHalfDBPSD = 20 * log (myHalfPSD)

myFreqValues ​​= [0: 1000/n: 500-1000/n]% à la fois myHalfPSD et myFreqValues ​​devraient être n/2 à long

parcelle (myFreqValues, myHalfDBPSD)

Si vous voulez tracer tous les 4 graphiques à la fois, vous voudrez peut-être utiliser quelque chose comme intrigue secondaire (4,1,1), sous-parcelle (4,1,2) etc.

espoir qui aide,

Chuan