Espectro de señal
Publicado por ivan (5 intervenciones) el 27/08/2014 00:35:58
Hola que tal, soy nuevo por esta comunidad...
Estoy trabajando con señales EEG (electroencefalograma), a dichas señales les aplico el filtro FIR pasa altas y posteriormente la FFT pero creo que me esta fallando la FFT ya que la gráfica para todos los canales que tengo (14) siempre es la misa.
Alguna sugerencia de como hacerlo correctamente?
Como puedo obtener el espectro para ondas alpha (8 - 13 Hz) con la FFT?
Este es el código que estoy utilizando
muestras por segundo: 128
cada 0.0078125 s se toma una muestra
Saludos y muchas gracias por la ayuda.
Estoy trabajando con señales EEG (electroencefalograma), a dichas señales les aplico el filtro FIR pasa altas y posteriormente la FFT pero creo que me esta fallando la FFT ya que la gráfica para todos los canales que tengo (14) siempre es la misa.
Alguna sugerencia de como hacerlo correctamente?
Como puedo obtener el espectro para ondas alpha (8 - 13 Hz) con la FFT?
Este es el código que estoy utilizando
muestras por segundo: 128
cada 0.0078125 s se toma una muestra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
%se carga el archivo csv y se asignan los datos a data
data = csvread('csv.csv', renglon, 0);%csvread('csv.csv', row, col)
%se asignana los datos a cada canal
tiempo = data(:,1);
AF3 = data(:,3);
F7 = data(:,4);
F3 = data(:,5);
FC5 = data(:,6);
T7 = data(:,7);
P7 = data(:,8);
O1 = data(:,9);
O2 = data(:,10);
P8 = data(:,11);
T8 = data(:,12);
FC6 = data(:,13);
F4 = data(:,14);
F8 = data(:,15);
AF4 = data(:,16);
cont = 130;
%cambair a secuencia los numeros de muestra
for t = (cont-1):length(tiempo)-1
tiempo(cont) = t;
cont = cont+1;
end
%multiplicar cada muestra por 0.0078125 (tiempo en que se toma cada muestra)
for t = 1:length(tiempo)
tiempo(t) = (tiempo(t)*0.0078125);
end
%APLICANDO FILTRO FIR PASA AILTAS
sample_rate = 128; %frecuencia de muestreo
nsamples = 512; %muestras
t1 =([tiempo(1:512)]); %t = ([F4(:512)]-1);
% Choose filter cutoff frequency ()
cutoff_hz = 0.2;
% Normalize cutoff frequency (wrt Nyquist frequency)
nyq_freq = sample_rate / 2; %calcular el numero de Nyquist
cutoff_norm = cutoff_hz / nyq_freq;
% FIR filter order (i.e. number of coefficients - 1)
order = 2;
fir_coeff = fir1(order, cutoff_norm,'high');
% Filter the signal with the FIR filter
filtered_signal = filter(fir_coeff, 1, F3);
plot(tiempo(1:128),filtered_signal(1:128),'b',tiempo(1:128),O1(1:128),'r')
%--------------
% Group delay as a scalar, in number of samples
group_delay = median(grpdelay(fir_coeff));
% Group delay in seconds
group_delay_s = group_delay / sample_rate;
% Plot the original signal...
figure(1)
plot(t1(1:512), O1(1:512))
% ...and allow adding more plots
hold on
% Align and plot the filtered signal
% (On top of existing one)
plot(t1(order:end)-group_delay_s, filtered_signal(order:512), 'g')
% Align and plot only the d6esired part of the filtered signal (discarding
% the transient)
plot(t1(order:end)-group_delay_s, filtered_signal(order:512), ... %plot(t1(order:end)-group_delay_s, filtered_signal(order:end), ...
'r');
grid on
hold on
%ESTA PARTE ES DE LA FFT
%serie temporal
n=2^14; % 2^12 = 4096 datos
dt=0.0078125; %intervalo de tienpo (muestreo)
t=(0:n-1)*dt; %vector de tiempos (0:n-1)*dt
%amplitud-fase vs. frecuencias
g=fft(filtered_signal); %g=fft(x);
power=abs(g).^2;
dw=2*pi/(n*dt);
w=(0:n-1)*dw; %vector de frecuencias angulares
plot(w,power(1:length(w)),'m')
xlabel('\omega')
ylabel('P(\omega)')
title('Espectro de potencia')
grid on
hold off
Saludos y muchas gracias por la ayuda.
Valora esta pregunta
0