UNIVERSIDAD NACIONAL DE PIURA FACULTAD DE CIENCIAS
E.P. ING. ELECTRNICA Y TELECOMUNICACIONES
PROCESAMIENTO DIGITAL DE SEALES II
DISEO DE FILTROS DIGITALES CON MATLAB
ALUMNO: GUERRERO ANCAJIMA JOS ALEJANDRO DOCENTE: ING. JULIO ANCAJIMA MAURIOLA.
I.- OBJETIVO GENERAL: ELABORAR UN PROGRAMA QUE SEA CAPAZ DE ECUALIZAR 10 SEALES DE DISTINTAS FRECUENCIAS.
II.- OBJETIVOS ESPECIFICOS: UTILIZAR EL SOFTWARE MATLAB ECUALIZADOR DE 10 BANDAS. DISEAR 10 FILTROS FRECUENCIAS. DIGITALES PARA ELABORAR UN
DE
DE
DIFERENTES
OBSERVAR SU RESPUESTA EN FRECUENCIA DE LOS FILTROS MEDIANTE GRAFICOS. UNA VEZ DISEADO EL PROGRAMA, UTILIZARLO PARA ECUALIZAR SEALES OBTENIDAS POR EL MICROFONO O SEALES DE ALGUNA CANCION.
III.- RESUMEN: Cualquier algoritmo o sistema de tratamiento puede interpretarse como un filtro. Aqu se entiende por filtro aquel sistema lineal e invariante que permite el paso de las componentes de la seal existentes en un determinado intervalo frecuencial, y elimina las dems. De forma ideal, el mdulo de la respuesta frecuencial del filtro toma un valor constante en el margen de frecuencias que queremos conservar, que se denomina banda de paso. Para este diseo, utilizaremos el comando FIR1 para disear nuestros filtros digitales; para ello necesitamos la frecuencia de corte y el orden del filtro a disear.
IV.- MARCO TEORICO: El rango de frecuencias que puedeor el ser humano es limitado. Va aproximadamente desde 20 Hz hasta 20 kHz. Estos lmites varan en funcin de la persona y de su edad. Este rango hace que no sea necesario que los altavoces reproduzcan ms all de esas frecuencias, ya que no sern audibles, pero a normalmente se hace que reproduzcan frecuencias de ms para mantener una cierta linealidad y que no se degrade el sonido al llegar a los extremos de la banda.
Normalizacin de las frecuencias crticas: Debido a que las funciones trabajan con frecuencia normalizada en radianes W en vez de hacerlo con F en Hz necesitaremos hacer un cambio en las variables y el modo de presentarlas en la frmula. Para normalizar stas frecuencias fp y fs (frecuencias de paso y corte en Hz):
Donde Fs es la frecuencia de muestreo y Ts su recproco, es decir el perodo de muestreo. Ts=1/Fs El rango de frecuencias Audibles:
RANGO DE FRECUENCIAS AUDIBLES GRAVES MEDIOS AGUDOS
V.- DESCRIPCION DE LOS COMANDOS UTILIZADOS EN EL PROGRAMA: REPRODUCCION DEL SONIDO: Para escuchar o manipular vectorialmente un sonido almacenado en formato wav se utilizan dos comandos. wavread('File.wav') sound(Var) Para el ejemplo anterior File es el nombre del archivo que se desea escuchar, los valores de amplitud deben estar en el rango [- 1,+1]. La variable Var corresponde al vector que se desea escuchar cuya frecuencia de muestreo por defecto ser de 8192 Hz. Si se utiliza sound(var,Fs) el resultado ser un sonido con una frecuencia de muestreo definida por el usuario. Se asume que los valores estn dentro del rango [-1,1] ya que los valores que estn fuera del rango son clipeados. Si se emplea sound(var,Fs,Bits) sonar con una frecuencia de muestreo definida por el usuario y determinados nmero de Bits por muestra. Por ejemplo, para escuchar la seal guardada anteriormente como sonido_uno, se asigna a una variable s el comandowavread y luego se escucha con el comando sound. s= wavread('sonido_uno.wav'); sound(s,44100) Si se desean conocer los datos de un archivo en formato wav, como los valores del vector, sufrecuencia de muestreo o el nmero de bits NBits por muestra, se emplea la siguientes sintaxis: [y,Fs,NBits]=wavread('file.wav') En la variable y se almacenan los valores del vector, en la variable Fs se almacena la frecuencia de muestreo y en la variable Nbits se almacena el nmero de bits por muestra del archivo con formato wav. Si se desea saber la dimensin de los canales del archivo en formato wav, se utiliza el siguiente comando: siz=wavread('file.wav','size') En la variable siz se almacena la dimensin del archivo en formato wav. Si se desean leer las primeras N muestras del archivo en formato wav se emplea el siguiente comando:
[n]=wavread('file.wav',Num) En donde la variable Num corresponde a la cantidad de muestras que se desean tomar del archivo. Si se desea obtener la informacin adicional contenida en un archivo de formato wav, como el copyright o el ttulo, se emplea el siguiente comando [y,Fs,NBits,Opts]=wavread('file.wav') En la variable y se almacenan los valores del vector, en la variable Fs se almacena la frecuencia de muestreo, en la variableNbits se almacena el nmero de bits por muestra y en la variable Opts se almacena el resto de la informacin. FUNCIN FIR1: >> B = fir1(N,Wn,type,window); Disea un filtro FIR paso bajo de orden N (longitud N+1) y frecuencia de corte Wn (normalizada con respecto a la frecuencia de Nyquists, 0 pueden especificar otro tipo de filtros de lamisma forma que con los filtros IIR mediante el parmetro type. Por ejemplo, para un filtro pasabajo: B = fir1(N,[W1 W2],'low');
FUNCIN FREQZ: [h w] = freqz(b,a,512) Donde: a = numerador b = denominador h,w = respuesta en frecuencia 512 = numero de puntos calculados La funcin freqz() evala la respuesta en frecuencia de un sistema que viene definido por una ecuacin en diferencias. Permite de esta forma evaluar la transformada de respuestas impulsionales de duracin infinita, cuando estas se corresponden con sistemas racionales, o lo que es lo mismo, definidos por ecuaciones en diferencias.
FUNCIN FILTER: La funcin filter de Matlab cuya cabecera es funcin y = filter(B,A,x,) evala la salida y de un sistema descrito mediante ecuacin en diferencias, donde x es el vector de entrada; A y B son los vectores que se usaran para crear la data filtrada Y
TRANSFORMADA RAPIDA DE FOURIER: Si se desea obtener la transformada rpida de Fourier, se utiliza la sentencia x=abs(fft(vector a trabajar)) en donde abs se refiere al valor absoluto o a la magnitud. Por su parte fft(x) es la transformada discreta de Fourier de un vector x.
PROPIEDADES DE LA SEAL DIGITAL DE ENTRADA: Para seal de una cancin: Velocidad de transmisin: 705 kbps Tamao de muestras de sonido: 16 bit Canales: 1 (mono) Velocidad de muestra de sonido: 44 Khz Formato de audio: PCM Para obtener estas propiedades de audio,utilizamos el programa Small WMA MP3 Converter , el cual nos permiti convertir nuestra cancin a formato wav y adems poder modificar sus propiedades para que pueda ser ecualizada por el programa diseado en Matlab.
FILTRO BP = 500 Hz FILTRO BP = 1 Khz FILTRO BP = 2 Khz FILTRO BP = 4 Khz
gBP
+ gBP gBP gBP
SEAL DIGITAL DE SALIDA
FILTRO HP = 8 KHz FILTRO HP = 16 KHz
gHP gHP
VII.- DESARROLLO Considerando todo lo visto anteriormente y basndonos en el diagrama se ha desarrollado el siguiente programa que se muestra a continuacin: Programa en MATLAB: %Borrar todo clear clc %Lee la grabacion prueba2 [x,fs]=wavread('Danilo Parra-Cuando vuelva a verla.wav'); %Grafica seal de la cancin figure(1) subplot(2,1,1); plot(x);grid %Orden del filtro N = 50; %Frecuencia de corte para los filtros diseados Wn1 = 0.0035; Wn2 = 0.0071; Wn3 = 0.014; Wn4 = 0.028; Wn5 = [0.057,0.089]; Wn6 = [0.11,0.18]; Wn7 = [0.23,0.36]; Wn8 = [0.45,0.71]; Wn9 = 0.89; Wn10= 0.95; %Filtro pasabajo LP1 = fir1(N,Wn1,'low'); LP2 = fir1(N,Wn2,'low'); LP3 = fir1(N,Wn3,'low'); LP4 = fir1(N,Wn4,'low'); %filtro pasa banda BP5 = fir1(N,Wn5); BP6 = fir1(N,Wn6); BP7 = fir1(N,Wn7); BP8 = fir1(N,Wn8); %filtro pasa alto HP9 = fir1(N,Wn9,'high'); HP10 =fir1(N,Wn10,'high'); %Grafica filtros pasa bajos figure(2) freqz(LP1); figure(3) freqz(LP2); figure(4) freqz(LP3); figure(5) freqz(LP4); % %Graficas filtros pasa banda figure(6) freqz(BP5); figure(7) freqz(BP6); figure(8) freqz(BP7); figure(9)
freqz(BP8); % %Grafica filtro pasa alto figure(10) freqz(HP9); figure(11) freqz(HP10); % %Ganancias para los filtros g=1; %Creacin de filtros yA = filter(LP1,g,x); yB = filter(LP2,g,x); yC = filter(LP3,g,x); yD = filter(LP4,g,x); yE = filter(BP5,g,x); yF = filter(BP6,g,x); yG = filter(BP7,g,x); yH = filter(BP8,g,x); yI = filter(HP9,g,x); yJ = filter(HP10,g,x); %Creacion de archivos de audio Fs=44100; wavwrite(yA,fs,'Pasabajo31Hz'); wavwrite(yB,fs,'Pasabajo63Hz'); wavwrite(yC,fs,'Pasabajo125Hz'); wavwrite(yD,fs,'Pasabajo250Hz'); % wavwrite(yE,fs,'Pasabanda500Hz'); wavwrite(yF,fs,'Pasabanda1K'); wavwrite(yG,fs,'Pasabanda2K'); wavwrite(yH,fs,'Pasabanda4K'); % wavwrite(yI,fs,'Pasaalto8K'); wavwrite(yJ,fs,'Pasaalto16K'); % yS = yA + yB + yC + yD + yE + yF + yG + wavwrite(yS,fs,'Suma'); %Graficas seales filtradas %Grafica filtros pasa bajos figure(12) subplot(4,1,1); plot(yA);grid;title('Seal de 1 Filtro % subplot(4,1,2); plot(yB);grid;title('Seal de 2 Filtro % subplot(4,1,3); plot(yC);grid;title('Seal de 3 Filtro % subplot(4,1,4); plot(yD);grid;title('Seal de 4 Filtro % %Graficas filtros pasa banda figure(13); subplot(4,1,1); plot(yE);grid;title('Sealde 1 Filtro % subplot(4,1,2); plot(yF);grid;title('Seal de 2 Filtro %
yH +yI + yJ ;
Pasa Bajo')
Pasa Bajo')
Pasa Bajo')
Pasa Bajo')
Pasa Banda')
Pasa Banda')
subplot(4,1,3); plot(yG);grid;title('Seal de % subplot(4,1,4); plot(yH);grid;title('Seal de % %Grafica filtro pasa alto figure(14); subplot(2,1,1); plot(yI);grid;title('Seal de % subplot(2,1,2); plot(yJ);grid;title('Seal de %Graficas de los espectros de figure(15) eyA=abs(fft(yA)); subplot(4,1,1),plot(eyA),grid pasa bajo') % eyB=abs(fft(yB)); subplot(4,1,2),plot(eyB),grid pasa bajo') % eyC=abs(fft(yC)); subplot(4,1,3),plot(eyC),grid pasa bajo') % eyD=abs(fft(yD)); subplot(4,1,4),plot(eyB),grid pasa bajo') % figure(16) eyE=abs(fft(yE)); subplot(4,1,1),plot(eyE),grid pasa banda') % eyF=abs(fft(yF)); subplot(4,1,2),plot(eyF),grid pasa banda') % eyG=abs(fft(yG)); subplot(4,1,3),plot(eyG),grid pasa banda') % eyH=abs(fft(yH)); subplot(4,1,4),plot(eyH),grid pasa banda') % figure(17) eyI=abs(fft(yI)); subplot(2,1,1),plot(eyI),grid pasa alto') % eyJ=abs(fft(yJ)); subplot(2,1,2),plot(eyJ),grid pasa alto') % figure(18) eyS=abs(fft(yS)); subplot(1,1,1),plot(eyS),grid los filtros')
3 Filtro Pasa Banda')
4 Filtro Pasa Banda')
1 Filtro Pasa Alto')
2 Filtro Pasa Alto') las seales filtradas
on,zoom,title('Espectro de 1er filtro
on,zoom,title('Espectro de 2do filtro
on,zoom,title('Espectro de 3erfiltro
on,zoom,title('Espectro de 4to filtro
on,zoom,title('Espectro de 1er filtro
on,zoom,title('Espectro de 2do filtro
on,zoom,title('Espectro de 3er filtro
on,zoom,title('Espectro de 4to filtro
on,zoom,title('Espectro de 1er filtro
on,zoom,title('Espectro de 2do filtro
on,zoom,title('Espectro de la suma de
VIII.- GRFICAS: SEAL DE ENTRADA (CANCIN):
RESPUESTA EN FRECUENCIA DE LOS FILTROS PASA BAJOS:
Filtro pasabajo fc=31 Hz
Filtro pasabajo fc=63 Hz
Filtro pasabajo fc=125 Hz
Filtro pasabajo fc=250 Hz
RESPUESTA EN FRECUENCIA DE LOS FILTROS PASA BANDA:
Filtro pasabanda fc=500 Hz
Filtro pasabanda fc= 1Khz
Filtro pasabanda fc= 2 Khz
Filtro pasabanda fc= 4 Khz
RESPUESTA EN FRECUENCIA DE LOS FILTROS PASA ALTOS:
ESPECTRO DE SEALES: NOTA: Las figuras que se muestran a continuacin corresponden a los espectros de las seales pero solo hasta la mitad del grfico mostrado (lado izquierdo), ya q la otra mitad es el reflejo del espectro. ESPECTRO DE SEALES PASABAJOS:
ESPECTRO DE SEALES PASABANDAS:
ESPECTRO DE SEALES PASAALTOS:
ESPECTRO DE LA SUMA DE LOS FILTROS:
IX.- USO DEL ECUALIZADOR USANDO LA TARJETA DE SONIDO DE NUESTRA PC: Si deseamos ecualizar una sealde voz, se puede utilizar el mismo programa diseado, solo que ahora al momento de llamar el archivo de micro, primero tenemos que grabar nuestra voz, veamos: GRABACION DEL SONIDO: Para capturar una seal por la entrada auxiliar de la tarjeta de sonido del computador, MATLAB cuenta con la funcin wavrecord(t*Fs,Fs,Ch) cuyos parmetros corresponden al tiempo en segundos de captura de la seal, frecuencia de muestreo (admite 8000, 11025, 22050 y 44100), el tipo de canal (1 para mono y 2 para stereo). Si se desea capturar una seal en stereo con 5 segundos de duracin, con una frecuencia de muestreo de 11.025 podemos emplear las siguientes funciones: Fs = 11025; y = wavrecord(5*Fs, Fs, 2); Para guardar una seal capturada en formato wav se puede hacer uso de la funcin wavwrite(y,Fs,NBits,'Nombre.wav') cuyos parmetros corresponden a la seal grabada, la frecuencia de muestreo, el nmero de bits (puede ser 8, 16, 24 o 32) y el nombre del archivo en el cual se grabar el sonido. Hay que tener en cuenta que los valores de amplitud que estn fuera del rango [-1,+1] son clipeados. Si no se especifican los NBits el programa asume por defecto 16 Bits. Si no se determina una Fs, el programa asume por defecto 8000 Hz. Por ejemplo, para guardar el sonido capturado anteriormente se emplear el siguiente comando: wavwrite(y,Fs,16,'sonido_uno.wav') Despus de este procedimiento, y una vez obtenida nuestraseal de audio, el cdigo en matlab es similar al anterior, la diferencia es que cambiaremos esta lnea: %Lee la grabacion micro [x,fs]=wavread('micro.wav');
X.- RESULTADOS: Cuando ecualizamos el primer sonido, que es el que grabamos en el micro, los resultados obtenidos de las seales filtradas, no son muy notorios en algunas bandas, ya que la voz humana no contiene una gama de frecuencias. Cuando ecualizamos una cancin, aqu los resultados obtenidos son mas notorios, que cuando solo se ecualizaba voz, ya que en una cancin encontramos una gama de diferentes sonidos a diferentes frecuencias; entonces, al ser ecualizadas podemos distinguir los seales filtradas. En las graficas de respuesta en frecuencia de los filtros, podemos observar que el orden del filtro que se us para la elaboracin de este programa es muy alto, pero para un objeto de simulacin se mantuvo este valor, ya que en un filtro a mayor sea el orden nuestro filtro tiende a ser ideal, pero tambin esto provoca un mayor rizado en la seal tratada. XI.- CONCLUSION: Comprobamos las diferentes tonalidades de los sonidos, desde las graves hasta las agudas. Tambin pudimos comprobar que la voz es una seal aleatoria con la aplicacin de filtros pasa altas. Y esto gracias al diseo de filtros digitales en Matlab, el uso de comandos como fir1, es el primer paso para la elaboracin de filtros, ya que despus de lo experimentado con estesoftware, existen otros comandos en el mismo Matlab mas eficientes para la elaboracin de filtros digitales, que esperamos luego poder hacer uso de herramientas como el fdesign o filter design. XII:- DISCUSIN: Talvez, concluido este trabajo, nos queda como discusin la eleccin de los filtros en este ecualizador de 10 bandas; ya que se eligi 4 filtros pasabajos para filtrar frecuencias entre 30Hz y 250 Hz; 4 filtros pasabandas, para filtrar frecuencias entre 500 Hz y 4 Khz y 2 filtros pasaaltos para las frecuencias de 8 kHz y 16 Khz. Para la eleccin de estos filtros, influy la investigacin realizada; ya que se averigu que dentro del rango audible del ser humano las frecuencias se clasifican as: Bajas frecuencias: 20Hz a 250 Hz Frecuencias media baja: 250Hz A 2 KhZ Frecuencias media alta: 2Khz a 4 Khz Frecuencias altas: 4Khz a 20 Khz Y la eleccin de las frecuencias a filtrar se debi a que hemos elaborado un ecualizador de una octava en el que encontramos 10 puntos de control. Recordemos que el ancho de banda audible recorre 10 octavas: 30, 60, 125, 250, 500Hz, 1, 2, 4, 8 y 16KHz, y estas son las frecuencias de actuacin del ecualizador.
XIII.- ANEXOS: Para entender mejor la teora de un ecualizador de una octava: El odo humano no responde linealmente con la frecuencia, sino que lo hace logartmicamente: esto es, el paso de 100Hz a 150Hz (50Hz de diferencia) le parece idntico alque existe entre 1000Hz y 1500Hz (500Hz de diferencia). Por esta razn, por ejemplo, el teclado de los pianos est simblicamente dividido en octavas, en las que la frecuencia de la primera nota de una de ellas es el doble que la de la primera nota de la octava anterior. De la misma forma, el espectro de frecuencias de audio se dividir en bandas logartmicas, octavas o mltiplos de esta, sobre las cuales se actuar. Los controles de tono tambin son ecualizadores, aunque con un margen de actuacin muy pobre, ya que cada uno de los mandos tiene asignada una banda de frecuencias de orden de cuatro octavas, aproximadamente. En general, la experiencia prctica demuestra que si la banda bajo control es de media octava la regulacin conseguida es muy buena; si el de una octava el control conseguido es bueno; con dos octavas se consigue una actuacin suficiente, y as se puede ir disminuyendo hasta grados de actuacin peores. LOS ECUALIZADORES GRFICOS El ecualizador grafico recibe su nombre de la inteligente disposicin de sus potencimetros deslizantes, colocados de tal manera que permiten visualizar la compensacin realizada. Algunos de ellos disponen de un led de color en cada potencimetro deslizante, lo cual permite una rpida visin de la misma. Este es, sin duda, el tipo de ecualizador de mayor difusin. Puede presentar diversos aspectos y pueden encontrarse desde ecualizadores con cincocontroles hasta con 33 o ms. El ms tpico es el ecualizador de octava en el que encontramos 10 puntos de control. Recordemos que el ancho de banda audible recorre 10 octavas: 30, 60, 125, 250, 500Hz, 1, 2, 4, 8 y 16KHz, y estas son las frecuencias de actuacin del ecualizador. En general los ecualizadores grficos permiten reforzar o atenuar la seal en unos 6 a 15dB, siempre sobre la misma frecuencia de trabajo.
EFECTOS DE LA ECUALIZACIN SOBRE LAS FRECUENCIAS 40-50Hz Es donde estn esos graves tan de moda en msica de baile. Aqu, principalmente, deberemos hacer trabajar el bombo y evitar meter en estas frecuencias las voces. 70-100Hz Ahora aparte del bombo tenemos el bajo; lo importante es diferenciar estos dos instrumentos. 200-400Hz En este rango de frecuencias podemos determinar el sonido de la caja, podemos tambin aadir calidez en las voces o llenar un poco las guitarras. 400-800Hz Podemos esclarecer el bajo en estas frecuencias, tambin en este rango de frecuencia se encuentran los primeros armnicos de la caja, que son muy importantes a la hora de precisar su ataque.En este rango de frecuencias podemos tambin reducir las vibraciones existentes en los timbales. 800-1000Hz Este rango es muy importante para las voces, ya que le dar ms fuerza, tambin le dar claridad al bajo y ms pegada al bombo. 1-3KHz Aqu conviene realzar entre 1 y 2 kHz para perfilar las guitarras y bajos;evidentemente, al llegar a esta parte tan sensible del odo deberemos disminuir las voces alrededor de los 2,5KHz. 3-6KHz Este rango es bastante crtico para las voces. Bsi-camente como hemos mencionado antes podemos bajar el nivel sobre los 3KHz, pero tambin deberemos hacerlo alrededor de 6KHz, ya que ah es donde est el siseo en la palabra, de esto se desprende que la parte comprendida entre 3 y 5KHz nos dar mas claridad. 6-10KHz A partir de estas frecuencias podemos esclarecer nuestra mezcla, ya que el sonido tiene ms aire. Observaremos tambin cmo le damos ms frescura a las guitarras acsticas. 10-16KHz Aqu debemos olvidarnos de los instrumentos ms graves, sencillamente cortando estas frecuencias para estos instrumentos (bombo, bajo,...) con un filtro paso-bajo, por ejemplo. En estas frecuencias le podemos dar ms aire a las voces y los platos tambin. Tomado de http://members.fortunecity.es/zemogd/ecualizadores.html.
XV.- BIBLIOGRAFA:
TUTORIAL BSICO PARA EL MANEJO DE SEALES CON MATLAB http://musica.unq.edu.ar/personales/ebonnier/cam2/matlab/tutorial2993.html?pa ge=funcondas2
EL USO DE ECUALIZADORES EN DIRECTO http://www.ispmusica.com/articulo.asp?id=834
DEMOSTRACIONES CON MATLAB http://www.lpi.tel.uva.es/~nacho/docencia/ing_ond_1/trabajos_02_03/Acustica_ arquitectonica/practica/MATLAB.HTML
PROCESAMIENTO DIGITAL DE SEALES 2 http://pds2unp.wordpress.com