laboratorio matlab dtft

14
[Laboratorio de PDS] [FIEE-UNMSM] LABORATORIO N5 (Tarea) 1. Escriba el código de una función que, utilizando la función fft(), calcule la Transformada de Fourier de una señal discreta de la siguiente forma: function [H,W] = dtft(h,no,N) % h: vector de entrada % no: instante de tiempo en el cual comienza h % N: número de puntos a calcular de la transformada de h % H: vector de la transformada de Fourier de H % w: frecuencias en las que se evalua la transformada N=fix(N); %aproxima a entero redondeando al entero inferior L=length(h); if(L>N) error(' DTFT: numero de muestras, L, debe ser inferior al numero de frec a calcular N') end % wk=2*pi*k/N con k=0,1,2, ... ,N-1 W=2*pi/N*(0:N-1); w=W; medio=ceil(N/2)+1; %aproxima a entero redondeando al entero inferior % evaluamos la DTFT de -pi a pi W(medio:N)=W(medio:N)-2*pi; W=fftshift(W); a=fft(h,N); e=exp(-1i*no*w); h1=zeros(1,N) for k=1:N h1(k)=a(k)*e(k); end H=fftshift(h1); end Para realizar la función hay que tener en cuenta la propiedad de desplazamiento de la Transformada de Fourier, cuyo significado implica que un desplazamiento en el tiempo equivale a un desplazamiento en frecuencia: 1

Upload: mars1107488

Post on 13-Sep-2015

269 views

Category:

Documents


0 download

DESCRIPTION

DTFT

TRANSCRIPT

[Laboratorio de PDS]

[Laboratorio de PDS][FIEE-UNMSM]

LABORATORIO N5(Tarea)

1. Escriba el cdigo de una funcin que, utilizando la funcin fft(), calcule la Transformada de Fourier de una seal discreta de la siguiente forma:

function [H,W] = dtft(h,no,N) % h: vector de entrada % no: instante de tiempo en el cual comienza h % N: nmero de puntos a calcular de la transformada de h % H: vector de la transformada de Fourier de H % w: frecuencias en las que se evalua la transformada N=fix(N); %aproxima a entero redondeando al entero inferior L=length(h); if(L>N) error(' DTFT: numero de muestras, L, debe ser inferior al numero de frec a calcular N') end % wk=2*pi*k/N con k=0,1,2, ... ,N-1 W=2*pi/N*(0:N-1); w=W; medio=ceil(N/2)+1; %aproxima a entero redondeando al entero inferior % evaluamos la DTFT de -pi a pi W(medio:N)=W(medio:N)-2*pi; W=fftshift(W); a=fft(h,N); e=exp(-1i*no*w); h1=zeros(1,N) for k=1:N h1(k)=a(k)*e(k); end H=fftshift(h1); end

Para realizar la funcin hay que tener en cuenta la propiedad de desplazamiento de la Transformada de Fourier, cuyo significado implica que un desplazamiento en el tiempo equivale a un desplazamiento en frecuencia:

Tener en cuenta que la funcin fft()considera el instante de inicio de la seal en n0=0. Recuerde adems que los valores de las frecuencias en los cuales la funcin fft() calcula la Transformada vienen dadas por:

En donde N es el nmero de valores que se calcula con la Transformada de Fourier, en la que se puede ver que, estn equiespaciados entre 0 y 2. Efectuar el producto punto a punto entre dos vectores de tal modo que los dos sean filas o columnas. De lo contrario se obtendra un error de no correspondencia entre matrices.

A fin de probar la funcin, calcular la Transformada de Fourier de una secuencia de pulso rectangular de longitud 9 y centrado en 0, comprobando que la parte imaginaria de su transformada es 0. Representar la parte real de dicha transformada. Razonar acerca de la forma de la Transformada de Fourier del pulso entre L/2 y L/2 a medida que L tiende a 1.

SolucinLa funcin fue probada con un pulso rectangular de longitud 9 y centrada en 0, lo cual la programacin para esto fue el siguiente.

clear all;close all;clc;h=[1 1 1 1 1 1 1 1 1];subplot(2,3,1)[H,w]=dtft(h,-3,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-3')subplot(2,3,2)[H,w]=dtft(h,-2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-2')subplot(2,3,3)[H,w]=dtft(h,-1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-1')subplot(2,3,4)[H,w]=dtft(h,0,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=0')subplot(2,3,5)[H,w]=dtft(h,1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=1')subplot(2,3,6)[H,w]=dtft(h,2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=2')

Se puede observar que si no tiene a la izquierda aparecern menos lbulos, sea que la parte imaginaria est tendiendo a cero.Ahora ejecutamos la funcin para un pulso rectangular de menor longitud (L=4) y centrada en 0.

clear all;close all;clc;h=[1 1 1 1];subplot(2,3,1)[H,w]=dtft(h,-3,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-3')subplot(2,3,2)[H,w]=dtft(h,-2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-2')subplot(2,3,3)[H,w]=dtft(h,-1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-1')subplot(2,3,4)[H,w]=dtft(h,0,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=0')subplot(2,3,5)[H,w]=dtft(h,1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=1')subplot(2,3,6)[H,w]=dtft(h,2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=2')

Se puede observar que para una longitud ms pequea ocurre lo mismo que en la observacin anterior, sea que la parte imaginaria se hace ms pequea, pero comparando un punto en especfico de no se puede ver que esta reduccin de esta parte imaginaria ser mucho ms reducida. Ahora ejecutamos la funcin para un pulso rectangular con una longitud que tiende a uno y centrada en 0.clear all;close all;clc;h=[1];subplot(2,3,1)[H,w]=dtft(h,-3,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-3')subplot(2,3,2)[H,w]=dtft(h,-2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-2')subplot(2,3,3)[H,w]=dtft(h,-1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=-1')subplot(2,3,4)[H,w]=dtft(h,0,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=0')subplot(2,3,5)[H,w]=dtft(h,1,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=1')subplot(2,3,6)[H,w]=dtft(h,2,128);plot(w,H),gridxlabel('W rad'); ylabel('H'), title('DTFT de h con no=2')

Se puede concluir que mientras disminuamos la longitud L haban menos ondas en su grafica de DTFT, hasta tal punto de obtener una funcin constante.

2. Sea el sistema SDLIT descrito mediante la ecuacin en diferencias siguiente:

y[n] = 1/2y[n-1] + x[n] + x[n-1]

Utilizar la funcin freqz() para obtener una representacin en frecuencia de la respuesta impulsional del sistema, en 512 valores entre 0 y 2: >> b = [... ]; >> a = [... ]; >> [H,w] = freqz(b,a,512,"whole");

a) Tener en cuenta que b representa a los coeficientes asociadas a la variable y[n] y sus retardos, mientras que a representa a los coeficientes asociado a x[n] y sus retardos. b) Evaluar a partir de sus resultados a que frecuencia digital en radianes se hace 0 la respuesta en frecuencia del sistema.c) Teniendo en cuenta esta frecuencia, aplicar como seal de entrada discreta x[n] las muestras de la seal de voz que usted registr en la tarea del Laboratorio No.2 al sistema discreto propuesto. Graficar la respuesta en frecuencia de amplitud y fase tanto de la entrada as como de la salida del sistema discreto. Analizar las grficas de amplitud y fase obtenidas y comente sus hallazgos.

Solucin (a)clear all;close all;clc;b=[1 1];a=[1 -0.5];[H,w]=freqz(b,a,512,'whole');plot(2*pi*(0:511)/512,abs(H),'r');gridtitle('Respuesta en Frecuencia del sistema discreto')xlabel('omega');ylabel('|H(w)|');

Solucin (b)y[n] = 1/2y[n-1] + x[n] + x[n-1]Hallando la Transformada de Fourier de la Respuesta al Impulso:

Igualando a cero para obtener la frecuencia digital en radianes:

Para , se obtiene la siguiente frecuencia analgica .

Solucin (c)Para la seal de entrada (Usamos el audio grabado tipo WAV)[x fs] = wavread('Vocal A.wav');sound(x,fs);subplot(131)plot(x),gridFs=fs/2L=length(x)/2;NFFT=2^nextpow2(L);X=fft(x,NFFT)/L;f2=Fs/2*linspace(0,1,NFFT/2+1);title('Entrada')subplot(132)plot(f2,2*abs(X(1:NFFT/2+1))),gridtitle('Espectro de la Entrada')subplot(133)plot(f2,2*angle(X(1:NFFT/2+1))),gridtitle('Respuesta en Fase de la Entrada')

Para la seal de Salidaclear all;close all;clcA=[1 -0.5];B=[1 1];[x,fs]=audioread('Vocal E.wav');y=filter(B,A,x);player=audioplayer(y,fs); play(player)subplot(131)plot(y),gridFs=fs/2L=length(y)/2;NFFT=2^nextpow2(L);Y=fft(y,NFFT)/L;f1=Fs/2*linspace(0,1,NFFT/2+1);title('Salida')subplot(132)plot(f1,2*abs(Y(1:NFFT/2+1)),'r'),gridtitle('Espectro de la Salida')subplot(133)plot(f1,2*angle(Y(1:NFFT/2+1))),gridtitle('Respuesta en Fase de la Salida')

En la salida se puede or que el sonido es un poco ms grave en comparacin con la entrada y tambin se puede or algo de ruido, tambin en la imagen se ve que la amplitud mxima del espectro de la salida es mayor con la del espectro de la entrada y producto de ello se ve una variacin en la fase.

3. Considere una seal analgica xa(t)=cos(20t+ /4), 0 t 1. Esta es muestreada con un periodo de muestreo de Tm= 0.05 seg para obtener x[n].

a) Graficar xa(t) y superponerla sobre x[n] utilizando la funcin plot(n,x,o). b) Reconstruir la seal analgica ya(t) a partir de las muestras de x[n] utilizando interpolacin sinc (utilice t=0.001) y superpngalo sobre x[n]. c) Reconstruir la seal analgica ya(t) a partir de las muestras de x[n] utilizando interpolacin cubic spline y superpngalo sobre x[n]. d) Debe usted observar que la reconstruccin resultante en cada caso tiene la correcta frecuencia pero diferente amplitud. Explique esta observacin. Comente el role de la fase de xa(t) sobre las seales de muestreo y reconstruccin.

Solucin (a)clear all;close all;clc;t=0:0.001:1; % Vector tiempox1=cos((20*pi*t)+pi/4); % Vector sealsubplot(121)plot(t,x1,'r') %Grafica de la seal x(t)Ts=0.05;fs=1/Ts; % Ts: Periodo de muestreo en segundosN=fs*0.016; % N: Nmero de muestras en 16ms.n=0:20; % Vector Tiempo Discretox=cos((20*pi*Ts*n)+pi/4); subplot(122)stem(n,x,'b') % Grfica de la secuencia x[n]

Solucin (b)

clear all;close all;clc;t=-pi:1/10:pi;x=cos(20*pi*t+pi/4);h=0.001*sin(10*t)/(10*pi*t);x(t>=-2*pi & t=-2*pi & t