• Viernes 1 de Noviembre de 2024, 11:28

Autor Tema:  Transformar Señal Del Tiempo A La Frecuencia  (Leído 6789 veces)

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Transformar Señal Del Tiempo A La Frecuencia
« en: Martes 18 de Julio de 2006, 13:09 »
0
Hola, quisiera saber si alguien puede decirme si la siguiente transformación la estoy haciendo correctamente.

Tengo un vector en el dominio del tiempo que representa el comportamiento de un filtro de longitud h[1, 1024], es decir, un vector de 1024 coeficientes. Lo quiero visualizar en el dominio de la frecuencia y lo hago mediante:

H=abs(fft(h));
plot(H)

El caso es que como el vector es sólo de 1024 coeficentes la gráfica de H también llega sólo hasta 1024 en la frecuencia ¿Es lógico que el filtro sólo llegue hasta 1024 Hz? Me gustaría saber el comportamiento del filtro para todas las frecuencias

Adjunto el resultado que obtengo ¿el eje 'y' viene en Hercios o ese valor tendria que multiplicarlo por la frecuncia de muestreo que he utilizado?

Gracias
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #1 en: Martes 18 de Julio de 2006, 18:11 »
0
hola  :hola:
La respuesta en frecuencia no la puedes ver con abs, por que solo te da la magnitud de un valor complejo, la respuesta en frecuencia la puedes visualizar con freqz si tu filtro es digital y tienes los coeficientes en Z (aunque 1024 me parecen muchos coeficientes para un filtro :unsure: )

o con freqs si tu filtro es analogico y esta definido por funciones en S.

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #2 en: Miércoles 19 de Julio de 2006, 10:51 »
0
Hola, muchas gracias por tu respuesta. La señal de entrada al filtro es una señal muestreada a 8KHz, por lo que utilizaría freqz, pero en la version matlab 6.5 que tengo introduzco 'help freqz' y 'help freqs' y me dice que no las encuentra ¿Puedo descargar las funciones de algun sitio?

Yo creia que con abs podias ver el módulo de la respuesta en frecuencia de la tranformada... <_<

Respecto a lo de los coeficientes quizas tengas razón diciendo que son muchos. Estoy trabajando con un cancelador de ecos y para ello he utilizado el algoritmo lms (least mean square, creo que es en inglés), no sé si lo conoces. La 'h' de la que quiero saber la respuesta en frecuencia sería la caracterización de mi canal (en mi caso representa la habitación donde hago las pruebas de sonido de cancelación de ecos). De todas formas estoy probando con distintas cantidades de coeficentes para comprobar si un aumento de estos mejora los resultados.

Un saludo y gracias de nuevo  :rolleyes:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #3 en: Miércoles 19 de Julio de 2006, 12:00 »
0
Hola

Mira a ver si tienes instalados los toolbox necesarios, creo que el de freqz es "signal proccessing toolbox" , yo tengo la version 6.5 y si me viene la funcion freqz

Respecto a la respuesta en frecuencia, yo he usado freqz para obtener la respuesta de un filtro de 1D , en imagenes (2D) no se por que motivo, he usado abs(fft2(filtroM)), quizas no haya un freqz para el caso de filtros matriciales.
Tambien puedes usar la herramienta fvtool para estudiar la respuesta en frecuencia del filtro

http://www.mathworks.com/access/helpdesk/h...nal/fvtool.html

salu2  :hola:

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #4 en: Miércoles 19 de Julio de 2006, 12:18 »
0
HOla, he buscado y no tengo ese toolbox, es q la version que tengo me la bajé gratuita de internet y por eso quizas no esta muy completa ¿Me podrias dar el archivo de la función freqz en concreto o necesito toda la carpeta? ¿Don de puedo conseguirlo? Gracias

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #5 en: Miércoles 19 de Julio de 2006, 13:30 »
0
Hola

He estado mirando y concretamente el archivo .m de la funcion freqz esta en el directorio filterdesign, y este es el toolbox

http://www.mathworks.com/products/filterdesign/tryit.html

Hay una verison trial que no se si te servira.Si no es asi dejame tu correo y te mandare todo el directorio del toolbox , aunque no se si funcionara metiendolo a pelo.

Otra solucion es bajarse una "copia de seguridad" del matlab mediante p2p  :D

salu2  :hola:

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #6 en: Miércoles 19 de Julio de 2006, 13:45 »
0
Hola, mi email es cuspito@hotmail.com, muchas gracias por todo.
Si me envias el toolbox ¿Donde debo guardarlo dentro de matlab?

He entrado al enlace que me has dicho, pero tengo q registrarme y una vez que lo he hecho me dice que no tengo permiso para descargarmelo. :angry:

Ya habia pensado lo de la 'copia de seguridad' B) , pero no tengo configurado el ordenador para ningun p2p, tardaria mucho (abrir puertos y mil historias para emule) y necesito el matlab ya. Aunq si no me queda mas remedio lo tendré que hacer...¿Sabes cual es el p2p más fácil de instalar?

Saludos :hola:

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #7 en: Miércoles 19 de Julio de 2006, 16:47 »
0
Saludos ... :hola:

bueno yo busque la funcion freqz y esta en la carpeta signal (quiza porque tengo matlab 7.0) pero si consigues la carpeta con los archivos, creo que solo bastaria con copiarla al directorio "toolbox" de matlab (a menos que internamente llame a otro toolbox)

bueno,  lo del filtrado...

si h es tu señal de tiempo discreto resultado del proceso de filtrado entonces si  
puedes usar

H=abs(fft(h));
plot(H)

y asi podras ver los componentes de frecuencia de h, (aunque las frecuencias estarian en el rango de 0-1 porque estan normalizadas y solo te sirve la mitad del espectro porque esta desde -w a +w)....

pero si h contiene lo coeficientes del propio filtro(por eso la duda de un filtro tan grande)
la respuesta en frecuencia la puedes ver con freqz

martinto

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #8 en: Sábado 22 de Julio de 2006, 00:42 »
0
hola cleo, si quieres ver la respuesta en frecuencias de una señal discreta en el tiempo puedes hacerlo asi:

M = 256; % tamaño del segmento
T = M/2; % traslapo
close;
[Pxx,F] = pwelch(w,M,44100,hamming(M),T,1,'half','db'); %(donde w es tu secuencia, en estecaso tu filtro )
zoom

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #9 en: Lunes 24 de Julio de 2006, 16:20 »
0
Bueno, si no recuerdo mal, la transformada de fourier devuelve un espectro de frecuencias positivas y negativas.
Esto es, la primera mitad del array de puntos devueltos por la fft es el correspondiente a las frecuencias positivas, el valor del medio es el correspondiente a una frecuencia de 0Hz y la segunda mitad del array es la parte correspondiente a frecuencias negativas....  Por tanto sólo interesa la primera mitad del array.
Además hay que realizar una serie de cálculos para poder visualizar correctamente la amplitud de los picos que corresponden a la frecuencia de la señal.  Prueba con lo siguiente:
Vamos a muestrear una señal con varias componentes (una de 50Hz y otra de 20Hz) a una frecuencia de 1000Hz.

t=[0:0.001:1];
h=2*sin(2*pi*50*t)+5*sin(2*pi*20*t);

H=fft(h);
ptos=H.*conj(H)/1024;
frec=1000*(0:512)/1024;
plot(frec,ptos(1:513));


Y teoricamente deberían aparecer dos picos bastante pronunciados a las frecuencias de 50 y 20Hz respectivamente.
Espero que te sirva de ayuda...
Y espero que esté bien el ejemplo....
No hay tonto más molesto que el ingenioso.

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #10 en: Jueves 27 de Julio de 2006, 16:38 »
0
Hola Carmamezo, he probado tu solución y parece que funciona bien, aunque no entiendo en que te basas para poner las cantidades de 1024 de la variable ptos y las cantidades de la variable frec=1000*(0:512)/1024;
¿Qué tengo que variar si quiero ver la respuesta en frecuencia no sólo hasta 500 Hz como aparece en tu ejemplo?

Muchas gracias

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #11 en: Viernes 28 de Julio de 2006, 14:05 »
0
Perdon, se me olvidó incluir lo siguiente en la llamada a la función fft:
fft (h,1024);

1024 son los puntos devueltos por la fft...
Lo puse así para que se pareciera a lo que querías hacer, variará según los puntos devueltos por la fft.

Lo de la frecuencia es simplemente un vector de puntos que coincidan con las muestras obtenidas de la señal:
Si hemos muestreado a 1000Hz, pues por Nyquist sabemos que la frecuencia de la señal muestreada variará entre 0 y 500Hz.  

Si lo has muestreado a 500Hz, pues tu vector de salida de frecuencia irá de 0 a 250Hz.

y para equiespaciar este vector de frecuencias basta con multiplicar el vector de frecuencia que va de 0 a 250 (si muestreas a 500Hz) por la frecuencia de muestreo y dividirlo por el número de muestras.

Un saludo.
No hay tonto más molesto que el ingenioso.

cleo

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Transformar Señal Del Tiempo A La Frecuencia
« Respuesta #12 en: Viernes 28 de Julio de 2006, 16:38 »
0
Muchas gracias, voy a probar a ver que tal, pero me ha quedado muy clara tu explicación. :smartass:

Saludos