• Martes 30 de Abril de 2024, 03:00

Autor Tema:  frecuencia de una señal en matlab  (Leído 33152 veces)

sdmf87

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
frecuencia de una señal en matlab
« en: Jueves 11 de Junio de 2009, 23:03 »
0
Hola soy nuevo en el foro estoy haciendo un proyecto y necesito un poco de ayuda espero que puedan prestarmela.
Necesito saber como consigo la frecuencia de una señal en matlab... la señal es un .wav donde esta grabado un sonido y quiero saber como consigo la frecuencia de esta señal... como se realizaria esto? es alguna instruccion?? o no se... espero que puedan ayudarme.

De antemano muchas gracias..

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #1 en: Viernes 12 de Junio de 2009, 04:14 »
0
saludos y bienvenido al foro


bueno para comenzar, si quieres obtener la frecuencia de una señal debes aplicarle la transformada rapida de fourier
o FFT (  Fast Fourier Transform)
en los demos de matlab hay uno muy bueno sobre analisis de señales en el dominio de la frecuencia


espero te sirva

Victor Pasilla Campos
Puebla, Pue.

sdmf87

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #2 en: Viernes 12 de Junio de 2009, 06:18 »
0
Muchas gracias allisap por la respuesta... Algunos profesores me dijeron eso de la FFT en matlab, me dijeron que tenía que hacer eso para trabajar en frecuencia... pero ya tengo el .WAV y le aplico la FFT pero de ahí no se cómo obtener la frecuencia de esta señal, no sé si se hace por medio de una instrucción o tengo que hacerla... si sabes algo o alguien que sepa le agradecería que me ayudara o por los menos que me ubiquen para saber dónde buscar por que ando un poco perdido  :ouch: ...

Muchas gracias de antemano espero que me puedan ayudar.

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #3 en: Viernes 12 de Junio de 2009, 17:21 »
0
saludos

ya revisaste los demos como te dije?

busca el demo que se llama "Using FFT in MATLAB"  y el "FFT for Spectral Analysis"
leelos y con eso solucionas tus problema, de hecho el segundo hace exactamente lo que necesitas
pero debes leerte algo de teoria por separado, en algun libro de procesamiento de señales (te recomiendo el Lathi o el Openheim),
porque si no sabes lo que buscas no sabras como encontrarlo,

saludos y espero te sirva.

Victor Pasilla Campos
Puebla  Pue

sdmf87

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #4 en: Martes 23 de Junio de 2009, 07:33 »
0
Me leí los ejemplos que me dijiste y si me sirvieron logre graficar la señal puedo ver la frecuencia, lo que necesito ahora es poder sacarla en alguna variable osea poder tener ese número en algún lado donde puede procesarla... Hay algo que no entiendo aun... la función FFT me devuelve una matriz con muchos valores pero esos valores ¿¿¿corresponden a qué???, ¿esas son las frecuencias que hay en la señal? la verdad es que no entiendo bien eso  :ouch: porque estuve probando y creo que esos valores corresponden a la amplitud de la señal , no sé si me explico, yo estoy grabando la señal como .wav luego X=abs(fft(señal.wav)) (los valores que se guardan en X ¿a que corresponden?) luego hago max(X) y según tenía entendido con conseguir la mayor tendría la frecuencia fundamental... pensé que en X estaban todas las armónicas que tenia la señal y buscaba la mayor para encontrar la frecuencia fundamental ... pero creo que no es así por que gravo varias veces la misma nota pero con diferente volumen y me varia el max es decir que estos valores guardados en X deben corresponder a la amplitud de la señal... la verdad es que estoy bastante confundido   :(  espero que puedan ayudarme…

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #5 en: Martes 23 de Junio de 2009, 19:41 »
0
mira la transformada de Fourier y su contraparte en tiempo discreto la FFT son las herramientas mas poderosas que existen en el
analisis de señales, y por ello son algo complicadas, por eso te recomendaba que leyeras algo de teoria,
busca estos dos libros, son muy buenos:

Lathi - Introducción a la Teoría y Sistemas De Comunicación
Oppenheim -Señales y Sistemas.  

mientras tanto, una explicacion ligera, cuando aplicas la FFT a una señal real lo que obtienes es el espectro de frecuencias (que es un valor complejo,por eso haces el abs),es decir las frecuencias que componen tu señal, pero ademas obtienes la potencia con la que cada frecuencia aparece (por eso tambien se le llama Power spectrum) , es por ello que tambien varian tus valores cuando cambias el volumen, porque estas cambiando la potencia de las frecuencias de tu señal

Saludos  :good:

Victor Pasilla Campos
Puebla,Pue

j0semg

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #6 en: Miércoles 14 de Octubre de 2009, 19:21 »
0
buenas, sdfm87 yo tengo la misma duda, me gustaría saber que devuelve y=fft(y,n) ya que las gráficas plot(y) y plot(f,y) son distintas (aunque muy parecidas) y yo necesito un vector con la información de plot (f,y) que es de verdad la representación grafica frecuencial que me vale.
Es decir si en la gráfica plot(f,y) hay un pico de amplitud 50 en x=300, me gustaria tener un vector tal que vector(300) sea igual a 50.
Si resolviste tu duda o alguien puede echar una manilla lo agradecería!!

Gracias de antemano, un saludo!

Jose

underwaterCLO

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: frecuencia de una señal en matlab
« Respuesta #7 en: Sábado 10 de Abril de 2010, 20:53 »
0
Hola espero que esta respuesta te ayude.
En primer lugar decirte que la fft es una función de matlab que puede que desaparezca, pues existen funciones mejores para obtener la densidad espectral de potencia de una señal.

Lo primero que tienes que entender es qué es tu función wav: cuando haces un wavread

[cancion, fs, nbits]=wavread('MiPCMis Documentoscancion.wav');

Lo que obtienes es simplemente una serie de muestras de la canción (cancion), también conoces a qué frecuencia de muestreo (fs) se ha tomado cada muestra de la canción cuando se creó ese wav y el número de bits (nbits) que se usan para codificar cada muestra.

La función cancionfft=fft(canción,nfft) devuelve la transformada de fourier de la señal canción calculada en tantas frecuencias como le indiques con el número nfft, es decir, tú puedes ajustar la precisión con la que va a calcular la transformada, evidentemente hasta el límite que le permite la información que tiene. La función fft tiene para un principiante algunos problemas: el primero es que si haces un plot(cancionfft) verás que obtienes algo simétrico, es decir, ha calculado la parte positiva y la negativa del espectro. Sabes que el centro de simetría es la frecuencia cero, pero estás tratando de analizar un wav y la parte negativa del espectro no te interesa para nada. Por otra parte, para saber a qué frecuencia corresponde cada muestra calculada has de tener en cuenta la nfft y la fs y calcularla.  
Por último la transformada no es la densidad de potencia de la señal, en realidad, como un wav no tiene ninguna referencia de potencia real, calcular la potencia exacta pero si puedes toda la información espectral relativa. Me estoy liando.

Existe otro camino más sencillo que te recomiendo para obtener lo que necesitas, y es utilizar la función Pwelch, que calcula directamente la densidad espectral de potencia de tu señal wav. Pwelch hace una fft modificada, no es difícil pero es algo largo de explicar. Te permite ajustar bastantes parámetros, y algunos los ajusta por defecto, y obtiene directamente la densidad espectral de potencia de la señal (la transformada al cuadrado). Los siguientes pasos te servirán:

[cancion, fs, nbits]=wavread('MiPCMis Documentoscancion.wav');
[DEPcancion,eje_frecuencias]=Pwelch(cancion,[],[],[],fs);

ahora te recomiendo que lo pases a decibelios para verlo más claro, si supieras que las unidades de potencia de tus muestras wav codifican unidades de Pascales tendrías que hacer

DEPcancion_dB=10*log10(DEPcancion./4e-10);

En realidad no lo sabes, pero si lo haces (aunque no dividas por la referencia 4e-10 eso da lo mismo), verás el espectro mucho más claro.

Ahora haz
plot(eje_frecuencias,DEPcancion_dB);
ylabel('dB');
xlabel('Hercios');
title('DEP cancion');

Y ya está, el eje x es el eje de frecuencia real en Hercios correspondiente a cada muestra, y en el eje tienes la forma de la DEP en unidades logarítmicas.

Espero que te saque del apuro, mucha suerte!

yamivane

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:frecuencia de una señal en matlab
« Respuesta #8 en: Sábado 22 de Octubre de 2011, 21:51 »
0
Hola a todos, somo estudiantes de Licenciatura en Cs Aplicadas, y queremos saber cómo se calcula la FRECUENCIA FUNDAMENTAL de una SEÑAL (en nuestro caso es la voz);

también si hay una función o algoritmo en MATLAB, por favor informennos, les agredeceremos.

URGENTE NECESITAMOS AYUDA POR FAVOR!!!