Professional Documents
Culture Documents
FACULTAD DE INGENIERIA
GRUPO: 21
Introduccion: MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un software matemtico que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programacin propio (lenguaje M). Est disponible para las plataformas Unix, Windows y Apple Mac OS X. Entre sus prestaciones bsicas se hallan: la manipulacin de matrices, la representacin de datos y funciones, la implementacin de algoritmos, la creacin de interfaces de usuario (GUI) y la comunicacin con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulacin multidominio) y GUIDE (editor de interfaces de usuario - GUI). Adems, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). Es un software muy usado en universidades y centros de investigacin y desarrollo. En los ltimos aos ha aumentado el nmero de prestaciones, como la de programar directamente procesadores digitales de seal o crear cdigo VHDL. Objetivo: Aprender a aplicar la transformada de Fourier en Matlab y sus variantes con el Analisis de Voz De Igual Forma aprender a aplicar transformada de Fourier (discreta) mediante MatLab, con el comando FFT.
Practica 1: Realice un programa en matlab de un seno a una frecuencia de 300hz, 1000hz y 5000hz, graficar en tiempo, aplicar el FFT y graficar.
>> X = fft(x) o Hace la FFT del vector x. X es un vector de nmeros complejos ordenados desde k=0...N-1. Se recomienda que la longitud del vector x sea una potencia de 2. Lo que no se recomienda es que la longitud de x sea un nmero primo. o Otra opcin del la FFT es especificar el nmero de puntos con el que se quiere hacer la FFT. o >> X = fft(x,N) Si la longitud de x es menor que N, el vector se rellena con ceros. Si es mayor, el vector es truncado. >> x = ifft(X)
o o
Hace la FFT inversa del vector X. Tambin se puede especificar el nmero de puntos N con el que quiero hacer la IFFT. >> x = ifft(X,N)
>> X = fftshift(X) o Reordena el vector X en orden creciente de frecuencia. Si X es el vector resultante de hacer una FFT, utilizando esta funcin reordenamos los puntos en funcin de la frecuencia.
1.-Qu es el filtro Butterworth y como se utiliza en Matlab? El filtro de Butterworth es uno de los filtros electrnicos ms bsicos, diseado para producir la respuesta ms plana que sea posible hasta la frecuencia de corte. En otras palabras, la salida se mantiene constante casi hasta la frecuencia de corte, luego disminuye a razn de 20n dB por dcada ( ~6n dB por octava), donde n es el nmero de polos del filtro. 1.- 300 Hz
Funcion
clear all clc A=4; f=5000; %hz fs=4400; T=1/f; %Periodo de seal Tm=3*T; %Duracin de muestra w0=2*pi*f; N=50; %Num muestras tao=Tm/N; %intervalo muestreo t=0:tao:Tm; fs=1/tao; %frecuencia muestreo df=fs/N; fref=-fs/2:df:fs/2; fase=pi/6; senoidal=A*sin(w0*t+fase); figure(1) plot(t,senoidal) figure(3) tfsin=abs(fftshift(fft(senoidal))); %k=[?N/2+1:N/2] % stem(fref,tfsin)
2.- 1000Hz
3.- 5000Hz
tfsin=abs(fftshift(fft(senoidal/length(senoidal))));% desplazamos stem(fref,tfsin) figure(4) %para frecuencias positivas stem(fref,2*tfsin) %multiplico por 2 y obtengo lo que debe aparecer axis([0,1000,0,4])
___________________________________________________________________________ Practica 3
clear all clc A=4; f1=100; %hz f2=300; T1=1/f1; %Periodo de seal T2=1/f2; Tm=3*T2;%Duracin de muestra de la frec mas grande w01=2*pi*f1; w02=2*pi*f2; N=256; %Num muestras, potencia de dos grande tao=Tm/N; %intervalo muestreo t=0:tao:Tm; fs=1/tao; %frecuencia muestreo df=fs/N; fref=-fs/2:df:fs/2; fase=pi/16; senoidal1=A*sin(w01*t+fase); senoidal2=A*sin(w02*t+fase); senoidal=senoidal1+senoidal2;%finalmente las sumo. %plot(senoidal) figure(1) plot(t,senoidal1) hold on plot(t,senoidal2,'r')
figure(3) tfsin=abs(fftshift(fft(senoidal)/length(senoidal)));% desplazamos stem(fref,tfsin) figure(4) %para frecuencias positivas stem(fref,2*tfsin) %multiplico por 2 axis([0,1000,0,2.2*max(tfsin)])%controlando ejes x y y
Esta es de 10000 Hz
Practica 5 Voz
Funcion
tiempoReg = 5; %-Periodo de la grabacin fs = 44100; %-Frecuencia de muestreo NO MODIFICAR farm = 200; %-Frecuencia fundamental samples = fs*tiempoReg; %-Num de muestras display('****MENU DE OPCIONES DE SEAL****'); display('.'); display(' a) Muestreo de voz'); display(' b) Recuperar una muestra de voz ya grabada'); display('.'); opcion=input('Elija una opcin ','s'); %debes oprimir tecla s if (opcion=='a'||opcion=='A') display('.'); display('Se muestrear a 44100Hz por 5 segundos'); input('Presiona cualquier tecla para empezar a grabar'); signal = wavrecord (samples,fs,1,'double'); display('.'); input('Presiona cualquier tecla para reproducir lo grabado'); wavplay ( signal,fs) %Para escuchar lo grabado display('.'); display('El registro de voz quedar en un archivo de disco: voz.dat'); [fid,message] = fopen ('voz.dat','wt');
fprintf(fid,'%f\n',signal); fclose(fid); elseif (opcion=='b'||opcion=='B') %debers oprimir b o B display('.'); display('Se tomar una frase ya grabada en disco') load voz.dat %Crea la variable vozQ12 signal=voz; clear voz; opcion=input('Desea escuchar el archivo? ','s'); if (opcion=='s'||opcion=='S') wavplay ( signal,fs) %Para escuchar lo grabado end end %******************************************************** % seal: oscilograma y espectro % % variables % signal : contiene oscilograma % signalw : contiene espectro % frecDomain : contiene dominio frecuencia %******************************************************** display('.'); display('********************************************************'); display(' seal: oscilograma y espectro'); display('********************************************************'); display('.'); display('Presione una tecla para observar el oscilograma y el espectro'); input('de la seal de voz'); figure(1); plot(signal); title('Oscilograma de la seal de voz'); ylabel('Amplitud'); signalw=fft(signal,samples); %Clculo de la DFT frecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hz figure(2);plot(frecDomain(400:44100),abs(signalw(400:44100)));%exhibicindel espectro title('Espectro de la seal de voz'); display('.'); display('********************************************************'); display(' seal + ruido: oscilograma y espectro'); display('********************************************************'); display('.'); display('Presione una tecla para observar el oscilograma y el espectro'); input('de la seal + ruido'); t=(0:1/fs:tiempoReg)'; t=t(1:samples); noisySignal = signal + 0.01*sin(2*pi*farm*t); figure(3);plot(noisySignal(1:samples)); title('Oscilograma de la seal + ruido'); ylabel('Amplitud'); noisySignalw=fft(noisySignal,samples); %Clculo de la DFT frecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hz figure(4);plot(frecDomain(400:44100),abs(noisySignalw(400:44100)));
%exhibicin del espectro title('Espectro de la seal + ruido'); ylabel('Amplitud'); xlabel('Frecuencia en Hz'); opcion=input('Desea escuchar el archivo? ','s'); if (opcion=='s'|| opcion=='S') wavplay ( noisySignal,fs) %Para escuchar lo grabado end %******************************************************** % filtrado( seal + ruido): oscilograma y espectro %******************************************************** display('.'); display('********************************************************'); display(' filtrado( seal + ruido): oscilograma y espectro'); display('********************************************************'); display('.'); display('Presione una tecla para observar el oscilograma y el espectro'); input('de la seal + ruido'); %Filtro supersor de banda orden=3; [b,a] = butter(orden,[(farm-30)*2/fs,(farm+30)*2/fs],'stop'); filteredSignal=filter(b,a,noisySignal); figure(5);plot(filteredSignal(1:samples)); title('Osilograma de la seal + ruido fitlrada'); ylabel('Amplitud'); filteredSignalw=fft(filteredSignal,samples); %Clculo de la DFT frecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hz figure(6);plot(frecDomain(400:44100),abs(filteredSignalw(400:44100))); %exhibicin del espectro title('Espectro de la filtro seal + ruido'); ylabel('Amplitud'); xlabel('Frecuencia en Hz'); opcion=input('Desea escuhcar el archivo? ','s'); if (opcion=='s'||opcion=='S') wavplay ( filteredSignal,fs) %Para escuchar lo grabado end %******************************************************** display('.'); display('Presione una tecla para observar la respuesta'); input('en frecuencia del filtro'); [H,W]=freqz(b,a,256); %256 muestras W=W*fs/(2*pi); figure(7);plot(W(1:128),abs(H(1:128)));
n=5;Wn=[100 200]/500; %parmetros del filtro [b,a]=butter(n,Wn); %comando para un filtro butterworth [y,t]=impz(b,a,101); %cambio de dominio figure(4) stem(t,y)
CONCLUSIONES Se aprendi a utilizar los comandos fft para transformadas de Fourier , que con base en ello nos permiti disear filtros Pasa altas y analizar nuestra voz, por medio del micrfono, de ah se constata que nuestra voz es una seal aleatoria. Si bien, subimos ms la frecuencia en el experimento 4 para escuchar una senoidal, es muy difcil percibirla, ya que el odo humano no alcanza a tanta frecuencia a escuchar. De igual forma que lo anterior se aprendi a sumar dos seales en el dominio del tiempo y frecuencia. Claramente regresando al poner las frecuencias para las notas musicales, muchas de ellas se efectuaron y como resultado, pudimos constatar la varianza de la frecuencia. Por todo lo anterior Matlab es una herramienta de desarrollo y de anlisis muy poderosa que facilita el estudio de las seales que se vern el resto del curso.