ENGENHARIA DE TELECOMUNICAÇÕES
PROCESSAMENTO DIGITAL DE SINAIS
Assunto: Transformada Discreta de Fourier (DFT)
Das últimas aulas sabemos que a transformada de Fourier de um sinal discreto é contínua
e dada por:
+∞
X (e ) =
jΩ
porém contínua de
−∞
x[n].e − j .n.Ω ,
onde
Ω
é a freqüência de sinal discreto ,
[−π , π ]
e a transformada inversa é dada por :
1
x[n] =
2.π
π
−π
X (e jΩ ).e j .Ω.n dΩ
A idéia agora é discretizar o domínio da freqüência na tentativa de obter o espectro do
sinal . É evidente que se discretizarmos o domínio da freqüência, o sinal no domínio do
tempo se torna periódico, ou seja:
X [e
j
2π
.k
N
]=
1
x[ n ] =
N
N −1
n =0
x[n].e
N −1
k =0
− j.
X [e
j
2π
.k .n
N
2π
.k
N
]. e
DFT
j.
2π
.k .n
N
IDFT
Observe que o número de harmônicos é o mesmo do número de pontos. A DTFS é
totalmente discreta em ambos os domínios e X[k} tem o mesmo período de x[n].
É importante notar que o comprimento da seqüência x[n]( L) deve ser menor ou no
máximo igual a N para evitar o aliasing na reconstrução. Quanto maior for N melhor será
o espectro. Normalmente quando N é maior que L, temos o que é chamado de Zero-
ENGENHARIA DE TELECOMUNICAÇÕES
padding que é completar x[n] com zeros, pois os dois somatórios devem ter os mesmos
limites.
OBS: Lembre-se que a DFT assim como a DTFT está localizada no intervalo de
[0,2π ]
ou de
rebatimento da DFT..
[−π , π ]
se forem realizadas as operações necessárias de
Do mesmo modo que a DTFT, a DFT tem uma diferença de amplitude com o
espectro analógico, ou seja devemos sempre multiplicar a espectro DTFT ou DFT
pelo tempo de amostragem para obtermos a amplitude verdadeira se for o caso.
Exemplo:
1) Seja x[n] dada pela equação abaixo:
x[n] =
1 ,0 ≤ n ≤ 3
0 fora
a) Encontre a DTFT.
b) Encontre a DFT com 4 pontos e reconstrua o sinal.
c) Encontre a DFT com 8 pontos e reconstrua o sinal
d) Encontre a DFT com 16 pontos e reconstrua o sinal
e) Encontre a DFT com 32 pontos
O programa abaixo determina a DFT para o sinal dado. Construa outras funções para
fazer a reconstrução do sinal pela IDFT.
% programa para calcular a DFT de um sinal
function ex_1_dft
% Sinal de entrada dado no exemplo 1
x = [1 1 1 1 ]
n = [0:(length(x) -1)]
subplot(2,3,1);stem(n,x);title(['Gráfico do sinal dado']);
xlabel('n');
ylabel('x[n]');
[X,s] = DTFT(x,n);
subplot(2,3,2);plot(s/pi,abs(X));grid on
title('Gráfico da DTFT');
xlabel('freq. em multiplos de pi');
N = 4;
[Xd,s] = DFT(x,n,N)
subplot(2,3,3);stem(s/pi,abs(Xd));grid on
title(['Gráfico da DFT com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
N = 8;
[Xd,s] = DFT(x,n,N)
ENGENHARIA DE TELECOMUNICAÇÕES
subplot(2,3,4);stem(s/pi,abs(Xd));grid on
title(['Gráfico da DFT com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
N = 16;
[Xd,s] = DFT(x,n,N)
subplot(2,3,5);stem(s/pi,abs(Xd));grid on
title(['Gráfico da DFT com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
function [Xd,s] = DFT(x,n,N)
s= [0:(2*pi/N):(2*pi*(N-1)/(N))]
x= [ x zeros(1,N-length(x))]
k =[0:(N-1)]
n = k;
Xd = x*exp(-j*2*pi/N*n'*k);
length(x)
length(s)
function [X,s] = DTFT(x,n)
s = [0:0.01:2*pi];
% cálculo da DTFT
X = x*exp(-j*n'*s);
O resultado para as DFT seriam:
ENGENHARIA DE TELECOMUNICAÇÕES
Grá
fico do sinal dado
1
Grá
fico da DTFT
4
0.8
Grá
fico da DFT com 4
4
3
3
2
2
1
1
x[n]
0.6
0.4
0.2
0
0
1
2
3
0
0
n
Grá
fico da DFT com 8
4
3
2
2
1
1
0
0
0.5
1
1.5
freq. em multiplos de pi
2
0
2
0
0
0.5
1
1.5
freq. em multiplos de pi
Grá
fico da DFT com 16
4
3
0.5
1
1.5
freq. em multiplos de pi
0
0.5
1
1.5
freq. em multiplos de pi
2
Na prática o número N deve ser bem grande para obtermos uma boa precisão. Quando N
é uma potênica de 2 , temos algoritmos bem rápidos chamados de FFT( Fast Fourier
Transform).
O Matlab tem a função fft(x) onde x é o vetor da seqüência. Se desejarmos impor a
quantidade de pontos temos a função fft(x,N). Observe que se N for maior que o
comprimento de x tem o zero-padding (completar x com zeros), e se N for menor que o
comprimento de x o vetor é truncado.l
[0,2π ]
A função fft faz a transformada no intervalo de
, se quisermos de
temos que utilizar a função fftshift(fft(x)) para rebater a fft(x).
O mesmo exemplo acima utilizando a função do Matlab.
% programa para calcular a FFT do Matlab
function ex_1_fft
% Sinal de entrada dado no exemplo 1
x = [1 1 1 1 ]
n = [0:(length(x) -1)]
de um sinal
[−π , π ]
ENGENHARIA DE TELECOMUNICAÇÕES
subplot(2,3,1);stem(n,x);title(['Gráfico do sinal dado']);
xlabel('n');
ylabel('x[n]');
[X,s] = DTFT(x,n);
subplot(2,3,2);plot(s/pi,abs(X));grid on
title('Gráfico da DTFT');
xlabel('freq. em multiplos de pi');
N = 4;
Xd = fft(x,N)
s= [0:(2*pi/N):(2*pi*(N-1)/(N))]
subplot(2,3,3);stem(s/pi,abs(Xd));grid on
title(['Gráfico da fft com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
N = 8;
Xd = fft(x,N)
s= [0:(2*pi/N):(2*pi*(N-1)/(N))]
subplot(2,3,4);stem(s/pi,abs(Xd));grid on
title(['Gráfico da fft com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
N = 16;
Xd = fft(x,N)
s= [0:(2*pi/N):(2*pi*(N-1)/(N))]
subplot(2,3,5);stem(s/pi,abs(Xd));grid on
title(['Gráfico da fft com ' num2str(N)]);
xlabel('freq. em multiplos de pi');
function [X,s] = DTFT(x,n)
s = [0:0.01:2*pi];
% cálculo da DTFT
X = x*exp(-j*n'*s);
Os gráficos abaixo mostram que o resultado é o mesmo:
ENGENHARIA DE TELECOMUNICAÇÕES
Grá
fico do sinal dado
1
Grá
fico da DTFT
4
0.8
Grá
fico da fft com 4
4
3
3
2
2
1
1
x[n]
0.6
0.4
0.2
0
0
1
2
3
0
0
n
Grá
fico da fft com 8
4
3
2
2
1
1
0
0
0.5
1
1.5
freq. em multiplos de pi
2
0
2
0
0
0.5
1
1.5
freq. em multiplos de pi
Grá
fico da fft com 16
4
3
0.5
1
1.5
freq. em multiplos de pi
0
0.5
1
1.5
freq. em multiplos de pi
2
Exercícios.
1) O Matlab tem a função ifft(xd) para reconstruir o sinal a partir de usa
transformada xd.; Construa um programa para reconstruir o sinal do exemplo 1.
2) Plotar a DFT dos sinais abaixo par N= 16 , N = 32, N = 256.
a)
x1[n] = 2 * cos(0.2π .n)(u[n] − u[n − 10])
b)
x 2[n] = 5 * (0.9e jπ / 4 ) n .u[n]
3) Seja o sinal
x(t ) = ∆ 2 (t )
a) amostre este sinal com as freqüências : Fs= 10/s; Fs = 100/s e a
freqüência de Nyquist. Construa os gráficos.
b) Determine a fft em todos os casos.
c) Reconstrua o sinal utilizando a ifft do Matlab.
Download

Aula 25/10/06 - TRANSFORMADA DISCRETA DE FOURIER (DFT)