Matlab - Procesado archivos .wav

 
Vista:

Procesado archivos .wav

Publicado por Carlos (27 intervenciones) el 27/10/2008 13:16:24
Hola a todos!!!

Tengo unas dudas con un tema de procesado de archivos de audio. El tema es el siguiente:

Tengo que generar un programa que cargue un archivo .wav seleccionado por el usuario, una vez cargado, lo que tengo que hacer es atenuar una serie de frecuencias, para ello tengo un vector de frecuencias y un vector de atenuaciones que se corresponden, es decir, el primer elemento del vector de frecuencias contiene una frecuencia determinada, y el primer elemento del vector de atenuaciones contiene la atenuación de dicha frecuencia...es decir:

freq = [100 200 300];
aten = [10 20 30];

Esto es, a 100Hz tengo una atenuación de 10dB, a 200Hz de 20dB.....

Espero que alguien sepa orientarme un poco, por la verdad no sé muy bien cómo actúar sobre frecuencias concretas y no sobre todo el archivo en sí...

Espero vuestros comentarios..

Muchas gracias de antemano!!!

Un saludo!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Procesado archivos .wav

Publicado por Marco (17 intervenciones) el 27/10/2008 16:01:44
Mira puede buscar información en el help de Matlab de las siguientes funciones

uiputfile
fullfile
wavread: Te entrega los datos muestreados del archivo wav en función del tiempo
fft ( Transformada rapida de fourier) Para pasar tus datos desde el tiempo al dominio de la frecuencia
find(para encontrar el indice de las frecuencias que necesitas en la matriz de tu archivo wav pasado al dominio de la frecuencia )
bar(grafico de barras)


Bueno eso es lo que te puedo ayudar por ahora

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procesado archivos .wav

Publicado por Carlos (27 intervenciones) el 27/10/2008 20:53:28
Hasta ahí bien...

El problema es que, no me aclaro mucho de cómo atenúar las frecuencias. Los primeros pasos los tengo más o menos claro, serían más o menos así:

[y Fs bits] =wavread('guitar.wav');

y=y.';
T=1/Fs;
L=length(y);
t=(0:L-1)*T;

NFFT=2^nextpow2(L); .
Y=fft(y);.
f=Fs/2*linspace(0,1,NFFT/2);

Hasta ahí más o menos claro, en "Y" tengo el vector "y" en el dominio de la frecuencia...pero el tema, es cómo atenuar ahora las componentes frecuenciales que yo desee...

Para simplificar un poco el tema, cómo se haría si quisiera aplicar una atenuación de 10 dB a todo el espectro???así vamos empezando poco a poco...

Muchas gracias por vuestro tiempo!!!!

Un saludo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procesado archivos .wav

Publicado por Marco (17 intervenciones) el 27/10/2008 22:47:29
mira puedes crear una matriz de 1:...hasta donde quieras que sea tu matriz de frecuencias o puedes ocupar esa misma matriz que tienes ahi f , ahora tienes que ubicar en que indice se encuentra la frecuencias que necesitas atenuar eso lo haces con find luego que encontraste los indices donde estan tus frecuencias puedes evaluar f(index)

index=find(indice de frecuencia)

luego a f le restas la matriz de atenuacion . Acuerdate que las matrices deben ser del mismo orden

Me cachaste

bueno eso

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procesado archivos .wav

Publicado por lidia (4 intervenciones) el 01/12/2008 17:14:20
Hola Carlos!!!

Tengo un archivo wav estereo en el dominio del tiempo, y le quiero aplicar una atenuación en dB a todo el archivo, si no te importa dime el procedimiento que seguiste porque se ve que algo estoy haciendo mal, que haciendo la fft del archivo y restando lamatriz de atenuación no obtengo buenos resultados.

Muxas gracias!!!!!!!!!!!!!

Un Saludo!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procesado archivos .wav

Publicado por Carlos (27 intervenciones) el 01/12/2008 17:29:38
Hola Lidia!!!

Vamos a ver, no sé exactamente dónde quieres llegar, porque yo todavía no he conseguido exactamente lo que buscaba, pero te comento los pasos a seguir a ver si a tí sí que te sirve:

1º.- wavread del archivo, obtenemos el vector en el dominio del tiempo.
2º.- convertimos en unidades naturales el vector de atenuaciones (si es que estaba en dB's), un simple for con la ecuación es suficiente.
3º.- Hacemos la fft del vector de audio, pasando al domoinio de la frecuencia.
4º.- Multiplicamos uno a uno los elementos del vector en el domino f por los elementos del vector de atenuaciones en unidades naturales

Con eso obtendrías en el dominio de la frecuencia el vector de audio atenuedo.

NOTA: Cuidado con el signo de las atenuaciones, se supone que deben ser negativas si son atenuaciones y positiva si se trata de ganancia...

Espero que te sirva,

Suerte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar