# Analisis espectral fft con Matlab



## cesarSM (Nov 10, 2008)

una consulta toy haciendo mi programa para analisis en el espectro de frecuencias...el programa q tengo lo saque de la pagina oficial de matlab para usar fft ..el problema es que cuando cambio la frecuencia de muestreo para voz q es fs=8000 ..la amplitud de la frecuencia (potencia) aumenta el doble....entonces lo q no entiendo q relacion hay entre la frecuencia de muestreo y el numero de puntos...porq escogieron para una frec de muestreo de 1000 un valor de n=256 ...y q valor deberia usar para mi frec de 8000 o de 4000 por favor ayuda con esa duda....

si tienen otra forma para la amplitud como por ejemplo usar decibeles o no se haganmelo saber....el trabajo es para pds...se esta haciendo capturando la voz por un pic y graficando en java,....necesito arreglar este codigo en matalb para luego pasarlo a java....y poderle graficar mis dudas son con los valores....para poder etener las escalas
clear all
L=1000;%tamaño de la señal
Fs=1000; % frec de muestreo
T=1/Fs;
t=(0:L-1)*T;
N=256;
x=sin(2*pi*100*t);% frec=50
%%tiempo versus voltaje
SUBPLOT(211)
plot(Fs*t(1:50),x(1:50));
Y=fft(x,N)
%%frecuencia versus potencia
Pyy=Y.*conj(Y)/N;  %valor de la amplitud en potencia
f=(Fs/N)*(0:N/2-1);%intErvalo en la frecuencia...frecu de muestro/N*(vector N/2)
SUBPLOT(212)
plot(f,Pyy(1:N/2))


----------



## Ardogan (Nov 11, 2008)

No termino de captar cual es tu(s) duda(s).

Cómo es eso de que al aumentar la frecuencia de muestreo aumenta la potencia?.
Veo que por un lado sacás el espectro de amplitud Y con la fft, y después la densidad espectral de potencia Pyy.

Bueno, si sos más específico/claro con la pregunta me comprometo a responderte.

Saludos


----------



## cesarSM (Nov 11, 2008)

gracias por tu respuesta ahi te mando el archivo adjunto que muestra lo que  quiero explicar osea...en matlab solo cambio la frecuencia de muestreo y la amplitud de la potencia en la frecuencia que mencionas aumenta...de valor..ahi en las graficas que te pongo te explico y para que lo mires solo cambie la frecuencia de muestreo gracias.....espero me ayuden que valor tomar para el numero de muestras.......para mi frecuencia de 8000 que es la que usare


----------



## Ardogan (Nov 12, 2008)

La frecuencia del seno es siempre la misma (100 Hz, no 50 Hz como comentaste en las instrucciones).
Lo que estás cambiando es el vector de tiempos porque tiene de factor a T que en un caso es 1/8000 y en el otro 1/1000.

La cantidad de puntos también es la misma para los dos casos = L.

Pero hay algo que creo puede ser un problema (estoy un poco falto de práctica con Matlab y las transformadorrmadas de Fourier).
Y es que estás calculando la FFT para dos señales que son distintas.
Graficá las señales con los 256 puntos a los que le vas a hacer la FFT y fijate como terminan. Una termina en 0 pero la otra termina con un valor entre 0.8 y 1.
Mi secuencia de comandos:

>> L=1000;
>> Fs1=1000;
>> T1=1/Fs1;
>> t1=(0:L-1)*T1;
>> N=256;
>> x1=sin(2*pi*100*t1);
>> Y1=fft(x1,N);
>> f1=(Fs1/N)*(0:N/2-1);


>> fs2=8000;
>> T2=1/fs2;
>> t2=(0:L-1)*T2;
>> x2=sin(2*pi*100*t2);
>> figure(2);
>> plot(fs2*t2(1:256),x2(1:256));

Tendrías que ver que ésta última también termine en 0 y con pendiente negativa como la primera. Si mal no recuerdo, la FFT lo que te da es el espectro de la señal extendida en forma periódica, esto es, lo mismo que vemos en las figuras pero extendido infinitamente en el tiempo hacia atrás y adelante.

Entonces, como la segunda gráfica no termina en 0 con pendiente negativa, es como que con la FFT se va a interpretar que se salta de ese valor entre 0,8 y 1 a un valor de 0 del siguiente período. No sé si se entiende.

Luego, por un lado estás haciendo la FFT de una sinusoide, y por el otro la FFT de algo parecido a una sinusoide, que tiene una discontinuidad (un salta de un valor entre 0,8 y 1 a 0).

Bueno, eso es lo que veo hasta ahora, me tengo que fijar como influye el período de muestreo.


----------



## juampismaster (Feb 22, 2010)

Que tal Amigo , quisiera saber como haces para pasar un codigo de Matlab a Java, yo tambien estoy analizando el espectro de una señal y quisiera visualizarla y programarla en Java.
Muchas gracias.


----------

