segunda-feira, 5 de maio de 2014

Lab - Transformada de Fourier Discreta






Processamento Digital de sinais

Prof. Débora Meyhofer Ferreira 



Transformada de Fourier Discreta

MatLab


Laboratório

1) Digitar o programa a seguir para determinar a a magnitude e fase, assim como a parte real e imaginária de x(n) = (0,5)n u(n), usando 501 pontos espaçados entre [0, π].

Como:


No Matlab:

w = [0:1:500]*pi/500;   %eixo dividido em 501 pontos
x = exp(j*w) ./ (exp(j*w) - 0.5*ones(1,501));
magx = abs(x);angx = angle(x);
realx = real(x); imagx = imag(x);
subplot(2,2,1); plot(w/pi,magx); grid
xlabel('frenquencia em PI unidades'); title('Parte de Magnetude'); ylabel('Magnetude')
subplot(2,2,3); plot(w/pi,angx); grid
xlabel('frenquencia em PI unidades'); title('Parte do Angulo'); ylabel('Radiano')
subplot(2,2,2); plot(w/pi,realx); grid
xlabel('frenquencia em PI unidades'); title('Parte Real'); ylabel('Real')
subplot(2,2,4); plot(w/pi,imagx); grid
xlabel('frenquencia em PI unidades'); title('Parte Imaginaria'); ylabel('Imaginario')


2). De maneira similar ao exemplo 1, escreva um programa no MatLab que plote |X(ejw)| e X(ejw) da sequência abaixo, usando 501 freqüências equidistantes no intervalo [0,π].

x(n)={1,2,3,4,5}

No Matlab:

n = -1:3; x = 1:5;
k = 0:500; w = (pi/500)*k;
x = x * (exp(-j*pi/500)) .^ (n'*k);
w = [0:1:500]*pi/500;   %eixo dividido em 501 pontos
magx = abs(x);angx = angle(x);
realx = real(x); imagx = imag(x);
subplot(2,2,1); plot(w/pi,magx); grid
xlabel('frenquencia em PI unidades'); title('Parte de Magnetude'); ylabel('Magnetude')
subplot(2,2,3); plot(w/pi,angx); grid
xlabel('frenquencia em PI unidades'); title('Parte do Angulo'); ylabel('Radiano')
subplot(2,2,2); plot(w/pi,realx); grid
xlabel('frenquencia em PI unidades'); title('Parte Real'); ylabel('Real')
subplot(2,2,4); plot(w/pi,imagx); grid
xlabel('frenquencia em PI unidades'); title('Parte Imaginaria'); ylabel('Imaginario')


3) Encontre a resposta em freqüência H(e jw ) de h(n) = 0,9n u(n) (feito em classe). Plote a amplitude e fase.


No Matlab:

w = [0:1:500]*pi/500;   %[0, pi] eixo dividido em 501 pontos
H = exp(j*w) ./ (exp(j*w) - 0.9*ones(1,501));
magH = abs(H);angH = angle(H);
realH = real(H); imagH = imag(H);
subplot(2,2,1); plot(w/pi,magH); grid
xlabel('frenquencia em PI unidades'); title('Parte de Magnetude'); ylabel('Magnetude')
subplot(2,2,3); plot(w/pi,angH); grid
xlabel('frenquencia em PI unidades'); title('Parte do Angulo'); ylabel('Radiano')
subplot(2,2,2); plot(w/pi,realH); grid
xlabel('frenquencia em PI unidades'); title('Parte Real'); ylabel('Real')
subplot(2,2,4); plot(w/pi,imagH); grid
xlabel('frenquencia em PI unidades'); title('Parte Imaginaria'); ylabel('Imaginario')


4) Um filtro passa-baixa de 3. ordem é descrito pela seguinte equação de diferenças:


Plote a resposta em freqüência do filtro para confirmar o seu comportamento.

No Matlab:

b = [0.0181, 0.0543, 0.0543, 0.0181];   %Coeficiente de filtro matriz b
a = [1.0000, -1.7600, 1.1829, -0.2781]; %Coeficiente de filtro matriz a
m = 0:length(b)-1; l = 0:length(a)-1;   %Indice das matrizes m e l
K = 500; k = 0:1:K;                     %Indice da matriz k para frequencias
w = pi*k/K;                             %[0, pi] eixo divido em 501 pontos
num = b * exp(-j*m'*w);                 %Calculos do numerador
den = a * exp(-j*l'*w);                 %Calculos do denominador
H = num ./ den;                         %Resposta à frequencia
magH = abs(H); angH = angle(H);         %Resposta à fase e magnetude
subplot(1,1,1);
subplot(2,1,1); plot(w/pi,magH); grid; axis([0,1,0,1])
xlabel('frenquencia em PI unidades'); ylabel('|H|');
title('resposta Magnetude');
subplot(2,1,2); plot(w/pi,angH/pi); grid
xlabel('frenquencia em PI unidades'); ylabel('Fase em PI Radianos')
title('resposta Fase');





Nenhum comentário:

Postar um comentário