I can do an FFT. Help Please

8 views (last 30 days)
Jair
Jair on 1 Dec 2012
I need to analyze this data with an Fourier but it keeps giving me an error. Please help!!
senal=importdata('/Users/macbook/Desktop/Analisis_Movimiento/EEG/eeg.mat'); %importa contenido de la dirección
eeg=senal.data; %nombra como eeg los datos de la carpeta data de senal
chan=senal.chanlocs;%nombra como chan los datos de la carpeta chanlocs de senal
evento=senal.event;%nombra como evento los datos de la carpeta event de senal
clear senal
% filtrando peak primeros datos
colini = 100;
for i=1:colini
eeg(:,i) = eeg(:,colini+1);
end
%%%%%%%%%%%centrado en cero %%%%%%%%
media=mean(eeg,2);%%calcula la media de las filas. Si escribo mean(senal) es lo mismo que mean(senal,1) calcula el promedio de la senal por columnas; si escribo mean(senal,2) calcula el promedio de cada fila.
for i=1:size(eeg,1); %%size(eeg,1) es el numero de filas de eeg (78)%%
cent(i,:)=eeg(i,:)-media(i,1); %%el centrado (cent) es una matriz de 1 a 78 que es igual a eeg de cada fila y le resto la media de cada fila%%%
end
%%%%%Crear arreglos para localización de canales%%%
loc=char(chan.labels);%%Busca en la estructura de chan, las carpetas labels que da los nombres a los canales)
loc2=loc; %%crea copia de loc llamada loc2%%
for i=1:78; %%%para todas las filas%%%
for j= 1:5; %%%
loc2(i,j+3)=loc(i,j);
end;
end; %%Este "for" le da los nombres a los canales sacandolos de la carpeta labels
loc2(:,1:3)=0;
clear chan media
for i = 1:size(eeg,1);
loc2(i,2) = 48 + mod(i,10);
loc2(i,1) = 48 + floor(i/10);
end %%este "for" da los números del 1 al 78 para cada canal para facilitar la comprensión
clear loc
loc2str = cellstr(loc2(:,4:8));
n_event = (1:39)';
%%%%referenciación mastoides%%%%(es la referencia utilizada usualmente en
%%%%electroencefalogramas)%%Obtiene datos de ambas apofisis mastoides (derecha e izquierda)
mast=[cent(66,:);cent(70,:)]; %al usar [] creo una matriz cuya primera fila es el canal 66, y su segunda fila es el canal 70 (todos los datos de la fila 66 y 70 de cent)%%
ref=mean(mast); %%crea la referencia con el promedio de la matriz mast
clear mast i j %%elimina mast i j
%%debemos a cada canal, referenciarlo a nuestra ref.
for i=1:size(cent,1);
refcen(i,:)=ref(1,:);
end %%Crea matriz de dimensiones correctas (78x775168 en este caso) para poder restar
centref=cent-refcen;
clear refcen
%%%%graficar muestras referenciadas%%%
%plot(centref(1,:)) %%grafica centref para canal 1
%hold on %mantiene grafico
%plot(centref(66,:),'r') %%en grafico anterior agrega señal de canal 66
%hold on
%plot(centref(70,:),'g') %%en grafico anterior agrega señal de canal 70
%%%Frecuencia de muestreo %%
fs=1024;
%%%encontrar pulso de boton 2 tras secuencia 13 - 16 - 2%%
nevento = size(evento,2);
%%%encontrar pulso de boton 2%%
for i=1:size(evento,2); %le pido que me de la cantidad de eventos totales de la estructura eventos (572)
tipo(1,i)=evento(1,i).type; %crea una matriz llamada tipo, en que cada columna (i) tendra el valor de cada estructura del evento y anotara el valor de type
latencia(1,i)=evento(1,i).latency;%crea una matriz latencia, en que cada columna(i) tendra el valor de cada estructura de latencia del evento
end
evsel = [];
evlat = [];
esdlat = [];
for i=1:size(tipo,2); %Crear if para detectar coordenadas 13 - 16 - 2)
if(tipo(i)==2 && tipo(i-1)==16 && tipo(i-2)==13);
evsel = [evsel,i];
evlat = [evlat,evento(1,i).latency];
esdlat =[esdlat,evento(1,i).latency - evento(1,i-2).latency];
end
end
[dlatmax, idlatmax] = max(esdlat);
nevsel = length(evsel);
canalselect = [74]; % seleccion de canales a plotear
dtime = 300; % ventana de tiempo a graficar 300 mseg antes de evento 2
for c=1:length(canalselect)
canal = canalselect(c);
nt = size(centref,2);
% plotear señal completa
figure;
hold on;
plot(1:nt,centref(canal,1:nt),'b-');
plot(evlat,centref(canal,floor(evlat)),'ro','MarkerSize',8);
title(loc2str(canal))
xlabel('tiempo(s)')
ylabel('amp')
% grafica todos los intervalos en un solo plot superpuestos
figure
hold on
for i=1:nevsel
lenx = floor(dtime);
x = (0:lenx-1)/fs; % tiempo
endx = floor(evlat(i));
domx = endx-lenx+1:endx;
y = centref(canal,domx);
y = y - mean(y);
plot(x,y,'b-')
%title(n_event)
xlabel('tiempo(s)')
ylabel('amp')
end
% grafica todos los intervalos
lenx = floor(dtime);
x = (0:lenx-1)/1024; % tiempo
yprom = zeros(size(x));
figure()
hold on
for i=1:nevsel
endx = floor(evlat(i));
domx = endx-lenx+1:endx;
y = centref(canal,domx);
y = y - mean(y);
subplot(8,5,i), plot(x,y,'b-');
xlabel('tiempo(s)')
ylabel('amp')
if (i == 3)
title(loc2str(canal))
end
yprom = yprom + y;
end
yprom = yprom/nevsel;
% plotea promedio de todos los eventos en canal
figure
plot(x,yprom,'b-');
title(loc2str(canal))
xlabel('tiempo(s)')
ylabel('amp')
%%%FFT de señal
for NFFT=2.^nextpow2(size(yprom));
Y=fft((yprom),NFFT)/(yprom);
f==fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1)));
title('FTP')
xlabel('Frecuencia (Hz)') %%%Título del eje x
ylabel('|Y(f)|') %%%Título del eje y
end
end
  2 Comments
Image Analyst
Image Analyst on 1 Dec 2012
We can't run it because we don't have your data file. It doesn't get past that line. What is the error you're getting? By the way, my Spanish is substantially worse than yours so I don't completely understand all the comments.
Jair
Jair on 1 Dec 2012
Thanks for your soon answer, I get this message: for NFFT=2.^nextpow2(size(yprom)); Y=fft((yprom),NFFT)/(yprom); f=fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1)));
title('FTP')
xlabel('Frecuencia (Hz)') %%%Título del eje x
ylabel('|Y(f)|') %%%Título del eje y
end ??? Error using ==> mldivide Matrix dimensions must agree.
I understand that the matrix dimension are wrong, but dont know how to fix this

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 1 Dec 2012
f and 2*abs(Y(1:NFFT/2+1)) don't have the same number of elements. Split them up to check:
whos f
whos NFFT
yValues = 2*abs(Y(1:NFFT/2+1))
whos yValues

More Answers (0)

Categories

Find more on EEG/MEG/ECoG in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!