Escolar Documentos
Profissional Documentos
Cultura Documentos
Para a primeira questão foram calculadas a transformada discreta de Fourier de duas formas
distintas, uma utilizando a fórmula direta da DFT (Discrete Fourier Transform) e a outra pelo
cálculo da FFT (Fast Fourier Transform).
Para o cálculo da DFT, a fórmula utilizada é:
𝑁𝑁−1
−𝑗𝑗2𝜋𝜋𝜋𝜋𝜋𝜋
𝑋𝑋(𝑘𝑘) = � 𝑥𝑥(𝑛𝑛)𝑒𝑒 𝑁𝑁
𝑛𝑛=0
for k=0:tamx-1
for N=0:tamx-1
Xdft(k+1) = Xdft(k+1) + x(N+1)*exp(-%i*2*%pi*N*k/tamx);
end
end
endfunction
Com o uso da função escrita para a DFT, podemos calcular a transformada discreta de Fourier
para os sinais dados na questão.
𝑛𝑛 𝑛𝑛
a) 𝑥𝑥[𝑛𝑛] = 2 cos �𝜋𝜋 𝑁𝑁� + sin2 �𝜋𝜋 𝑁𝑁�. Com 0 ≤ 𝑛𝑛 ≤ 9 e 𝑁𝑁 = 100.
Definimos primeiramente a variável 𝑛𝑛 para o primeiro exercício, como um vetor com valor
inicial igual a 0, valor final igual a 9 e incrementos de 1 em 1. A constante N igual a 100 e a função
x[n] dada na questão.
n1=0:1:9;
N=100;
x1=2*cos(%pi*n1/N)+(sin(%pi*n1/N))^2;
A partir da função escrita, é então calculada sua dft e sua fft, que retornam vetores de valores
complexos. A magnitude de tais valores complexos podem ser obtidos a partir do módulo de cada
componente. Após o cálculo da dft e da fft é feito o módulo deste sinal e após tal calculo são
plotados seus respectivos valores. Como o k, variável independente da transformada de Fourier
(𝑋𝑋(𝑘𝑘)) varia entre 0 e 𝑁𝑁 − 1, exatamente como o n, foi utilizado o n como eixo x para 𝑋𝑋(𝑘𝑘)
também.
Xf1=abs(dft(x1));
Xf12=abs(fft(x1));
subplot(2,1,1)
plot(n1,x1, '-o')
title('x[n]=2cos(pi*n/100)+(sin(pi*n/100))^2')
xgrid(2);
subplot(2,2,3)
plot(n1,Xf1, '-o')
title('X1[w] a partir da dft')
xgrid(2);
subplot(2,2,4)
plot(n1,Xf12, '-o')
title('X1[w] a partir da fft')
xgrid(2);
O gráfico gerado pode ser visto a seguir:
b) 𝑥𝑥[𝑛𝑛] = 𝑒𝑒 −2𝑛𝑛 . Com 0 ≤ 𝑛𝑛 ≤ 20
N2=0:1:20;
x2=%e^(-2*n2);
Xf2=abs(dft(x2));
Xf22=abs(fft(x2));
subplot(2,1,1)
plot(n2,x2, '-o')
e = gce();
e.children(1).polyline_style=3;
title('x[n]=e^(-2*n)')
xgrid(2);
subplot(2,2,3)
plot(n2,Xf2, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X2[w] a partir da dft')
xgrid(2);
subplot(2,2,4)
plot(n2,Xf22, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X2[w] a partir da fft')
xgrid(2);
subplot(2,1,1)
plot(n3,x3, '-o')
e = gce();
e.children(1).polyline_style=3;
title('x[n]=delta(n-1)')
xgrid(2);
subplot(2,2,3)
plot(n3,Xf3, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X3[w] a partir da dft')
xgrid(2);
subplot(2,2,4)
plot(n3,Xf32, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X3[w] a partir da fft')
xgrid(2);
subplot(2,1,1)
plot(n4,x4, '-o')
e = gce();
e.children(1).polyline_style=3;
title('x[n]=n')
xgrid(2);
subplot(2,2,3)
plot(n4,Xf4, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X4[w] a partir da dft')
xgrid(2);
subplot(2,2,4)
plot(n4,Xf42, '-o')
e = gce();
e.children(1).polyline_style=3;
title('X4[w] a partir da fft')
xgrid(2);
Como podemos ver, o gráfico gerado a partir da DFT é igual ao gerado pela FFT em todos os
casos, sendo a FFT uma alternativa rápida para o cálculo de DFT’s.
Questão 2
Primeiramente devemos escrever as sequências no scilab, para isso determinamos o n das
duas primeiras sequencias, como 0 ≤ 𝑛𝑛 ≤ 2. Iniciamos o vetor com zeros e depois adicionamos os
valores em cada uma de suas amostras.
n=0:1:2;
N= length(n);
x1=zeros(1,N);
x1(1)=1;
x1(2)=-1;
x1(3)=-0.5;
x2=zeros(1, N);
x2(1)=1;
x2(2)=-0.5;
x2(3)=-1;
for k=0:tamx-1
for N=0:tamx-1
xdft(k+1) = xdft(k+1) + (1/tamx)*X(N+1)*exp(%i*2*%pi*N*k/tamx);
end
end
endfunction
A inicialização das variáveis pode ser vista a seguir:
n=0:1:2;
N=length(n);
M=length(n);
x1=zeros(1,N);
x1(1)=1;
x1(2)=-1;
x1(3)=-0.5;
x2=zeros(1,M);
x2(1)=1;
x2(2)=-0.5;
x2(3)=-1;
O cálculo da convolução a partir da função convol e da DFT também podem ser vistas a
seguir:
[y]=convol(x1,x2);
x1=[x1 zeros(1,M-1)];
x2=[x2 zeros(1,N-1)];
Xf1=dft(x1);
Xf2=dft(x2);
Xf3=Xf1.*Xf2;
x3=idft(Xf3);
n3=0:length(x1)-1;
subplot(2,1,1)
plot(n3,y, '-o')
title('convolução x1*x2')
xgrid(2);
e = gce();
e.children(1).polyline_style=3;
subplot(2,1,2)
plot(n3,x3, '-o')
title('convolução x1*x2 a partir da DFT')
xgrid(2);
e = gce();
e.children(1).polyline_style=3;
O gráfico obtido pode ser visto a seguir:
b)
Para a sequência 𝑥𝑥2 , foi pedido para escolher um valor para a amplitude a do sinal. Foi escolhido o
valor 3.
n1=0:1:4;
n2=0:1:1;
N=length(n1);
M=length(n2);
x1=zeros(1,N);
x1(1)=0;
x1(2)=0;
x1(3)=1;
x1(4)=1;
x1(5)=1;
x2=zeros(1,M);
a=3;
x2(1)=a;
x2(2)=a;
A partir dos sinais gerados, foi realizada a mesma operação feita na letra a desta questão.
[y]=convol(x1,x2);
x1=[x1 zeros(1,M-1)];
x2=[x2 zeros(1,N-1)];
Xf1=dft(x1);
Xf2=dft(x2);
Xf3=Xf1.*Xf2;
x3=idft(Xf3);
n3=0:(N+M-1)-1;
subplot(2,1,1)
plot(n3,y, '-o')
title('convolução x1*x2')
xgrid(2);
e = gce();
e.children(1).polyline_style=3;
subplot(2,1,2)
plot(n3,x3, '-o')
title('convolução x1*x2 a partir da DFT')
xgrid(2);
e = gce();
e.children(1).polyline_style=3;
Como podemos ver, os gráficos são iguais, comprovando assim que a convolução no tempo
pode ser representada pela multiplicação na frequência.