Professional Documents
Culture Documents
SISTEMAS DE COMUNICACIONES
PRACTICA 7
MATLAB II
Objetivo:
Aplicar la transformada de Fourier (discreta) mediante MATLAB, con el comando FFT y ver algunas de las variantes que tiene este comando, as como su utilidad en el trabajo con seales.
Metas:
El alumno habr aprendido a manejar la herramienta de MATLAB para obtener las transformadas de furrier, as como a graficarlas en el tiempo y frecuencia, esto servir para el manejo de seales.
Introduccin:
FFT es la abreviatura usual (del ingls Fast Fourier Transform) de un eficiente algoritmo que permite calcular la transformada de Fourier discreta (DFT) y su inversa. La FFT es de gran importancia en una amplia variedad de ap licaciones, desde el tratamiento digital de seales y filtrado digital en general a la resolucin de ecuaciones diferenciales parciales o los algoritmos de multiplicacin rpida de grandes enteros. El algoritmo pone algunas limitaciones en la seal y en el espectro resultante. Por ejemplo: la seal de la que se tomaron muestras y que se va a transformar debe consistir de un nmero de muestras igual a una potencia de dos. La mayora de los analizadores TRF permiten la transformacin de 512, 1024, 2048 o 4096 muestras. El rango de frecuencias cubierto por el anlisis TRF depende de la cantidad de muestras recogidas y de la proporcin de muestreo. En Matlab se utiliza la funcin fft para obtener la transformada de fourier, por ejemplo: Y = fft(X) nos regresa la transformada discreta de fourier (DFT) del vector X, realizada con el algoritmo de la transformada rpida de Fourier (FFT).
Vargas Luna Carlos Arturo >> x = ifft(X) o Hace la FFT inversa del vector X. Tambin se puede especificar el nmero de puntos N con el que quiero hacer la IFFT. o >> 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.
Materiales:
Una computadora con MATLAB instalado
Desarrollo:
Se realizaron los siguientes programas con ayuda de MATLAB, en los cuales se observo la salida, de ellos los cuales mostraban seales con su transformada de Fourier.
clear all clc A=4; f=1; %hz w0=2*pi*f; t=0:.001:1; fase=pi/6; senoidal=A*sin(w0*t+fase); figure(1) plot(t,senoidal) cosenoidal= A*cos(w0*t+fase); figure(2) plot(t,cosenoidal)
Posteriormente se fueron quitando algunas funciones al cdigo original, como fftshift, abs, etc. Para ver lo que ocurra con las graficas
clear all clc A=4; f=100; %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)))); %tfsin=abs(fftshift(fft(senoidal))); %k=[?N/2+1:N/2] % stem(fref,tfsin)
%lab3 Sumando dos seales 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 % para graficar dos seales a la vez plot(t,senoidal2,'r')% la 'r' es para darle color a la grafica 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
Despus utilizamos el comando help para saber que hace la funcin pulstran en matlab, lo que hace bsicamente esta funcin es crear un tren de pulsos, aqu la explicacin completa: posteriormente se genero un cdigo del cual podemos observar lo siguiente:
%seal triangular clear all clc A=4; f=100; %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; %t = 0 : 1/1e3 : 1; % 1 kHz sample freq for 1 sec
Se procedi a realizar unas pruebas con las funciones zeros y ones, las cuales generan un vector del tamao especificado donde todos sus elementos son ceros(para la funcin zeros) o unos (para la funcin ones)
Vargas Luna Carlos Arturo Por ultimo se realizo un programa que graba la voz:
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');
Conclusiones:
En esta prctica pudimos aprender a utilizar la transformada de Fourier as como algunas de sus variantes y la aplicacin que estas tienen en el rea de sistemas de comunicaciones en Matlab, as como graficar seales en tiempo y en frecuencia, la funcin pulstran, ones y zeros y tomando como base el ultimo cdigo podremos empezar modificar cdigo para la entrega de el proyecto.