You are on page 1of 21

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO

FACULTAD DE INGENIERIA

NOMBRE: CORREA ESPINOSA IVN SALVADOR

ASIGNATURA: LAB. DE SISTEMAS DE COMUNICACIONES

PRCTICA NO.5 .- Matlab.- Transformada de Fourier

PROFESOR: M.I. ELIZABETH FONSECA CHAVEZ

GRUPO: 21

FECHA: 2 de Octubre de 2009

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.

Material: 1 computadora con MatLab y Simulink Desarrollo:

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.

FFT con MATLAB

>> 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

Practica 2 2.-Porque la voz es una seal aleatoria? Porque no es periodica


clear all clc A=4; f=100; %hz 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(2) simple=fft(senoidal) %No da como debera stem(fref,simple) 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 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

Practica 4 Aqu es donde suena biiiiiiiiiiiiiiiiiiiiii y la grfica Siguiente es el resultado

Esta de arriba es de 1000Hz

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)));

Filtro Pasa Altas


clear all clc %filtro pasaaltas [b,a]=butter(9,300/500,'high') %[b,a]=butter(n,Wn,'Tipo') figure(1) Freqz(b,a,128,1000) %similar a bode. Freqz es lineal. Bode logaritmico %freqz(num, den,w) se puede sust en los prog. %anteriores figure(2) %H=tf(a,b) bode(b,a) %freqz(b,a) %filtro pasabajas de 5 orden que corte en 300hz [b,a]=butter(5,300/500,'high'); %Se establece los parmetros del filtro figure(3) Freqz(b,a,128,1000); %Grfica de la frecuencia en decibeles y defazamiento de ngulo. %respuesta al impulso de un filtro pasabandas de 100 a 200hz de 5orden.

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.

MESOGRAFIA: http://es.wikipedia.org/wiki/Filtro_de_Butterworth http://www.tecnun.es/asignaturas/tratamiento%20digital/TEMA6/tsld041.htm

You might also like