% Análise de Fourier de uma função exponencial decrescente
% pelas vias analítica e numérica

clc;
clearvars;
close all;

% 1o. passo - montagem e visualização da função de interesse
  % dados característicos
af=2;
  % geração do vetor de tempo "contínuo"
T=5;
npt=1024; % número de pontos
t=linspace(0,T,npt);
  % geração da função
x=exp(-af*t);
  % visualização
figure(1)  
plot(t,x,'b-')
title('Função x(t)')
xlabel('t(s)');
ylabel('x(t)');
grid on

% % 2o. passo - transformada de Fourier analítica
%   % valor de referência em frequência
% fr=npt/T;
%   % geração do vetor de frequência "contínuo"
% npf=1024; % número de pontos
% om=linspace(-fr/2,fr/2,npf);
%   % cálculo da transformada analítica
% Xa=1./(af+1i*om);
%   % visualização
%     % espectro de amplitude
% figure(2)
% plot(om,abs(Xa),'b-')
% title('Espectro de Amplitude')
% xlabel('\omega (rad/s)')
% ylabel('X(\omega)')
% grid on
%     % espectro de fase
% figure(3)
% plot(om,atan2(imag(Xa),real(Xa)))
% title('Espectro de Fase')
% xlabel('\omega (rad/s)')
% ylabel('\psi(\omega)')
% grid on
   
% % 3o. passo - transformada de Fourier numérica
%   % montagem da função discretizada
%     % número de pontos
% N=128; % 128, 512
%     % geração do vetor de tempo "discreto"
% dt=T/N;
% tn=0:dt:(N-1)*dt; 
%     % montagem da função
% xn=exp(-af*tn);
%   % cálculo da tdf
% Dn=tdf(xn);
% % Dn=fft(xn);
%   % cálculo da tranformada
% Xn=(T/N)*Dn;
%   % cálculo da itdf
% xr=itdf(Dn);
% % xr=ifft(Dn);
%   % visualização no tempo
% figure(4)
% plot(t,x,'b-')
% title('Função x(t)')
% xlabel('t(s)');
% ylabel('x(t)');
% grid on
% hold on
% pause(4)
% plot(tn,xn,'rx')
% pause(2)
% plot(tn,xr,'ks')
% hold off
% legend('contínua','amostrada','reconstituída')
% pause(2)

% % 4o. passo - comparação entre transformadas de Fourier
%   % geração do vetor de frequência "discreto"
% dom=2*pi/T;
% omn=-(N/2-1)*dom:dom:(N/2)*dom;
%   % montagem da transformada numérica
% Xn=[Xn((N/2+2):N) Xn(1:N/2+1)]; % uso de deslocamento
%   % espectro de amplitude
% figure(5)
% plot(om,abs(Xa),'b-')
% axis([-fr/2 fr/2 0 0.6])
% title('Espectro de Amplitude')
% xlabel('\omega (rad/s)')
% ylabel('X(\omega)')
% grid on
% pause(2)
% hold on
% plot(omn,abs(Xn),'ro')
% hold off
% legend('analítica','numérica')
% pause(2)
%   % espectro de fase
% figure(6)
% % plot(om,angle(Xa),'b-')
% plot(om,atan2(imag(Xa),real(Xa)),'b-')
% axis([-fr/2 fr/2 -3*pi/4 3*pi/4])
% title('Espectro de Fase')
% xlabel('\omega (rad/s)')
% ylabel('\psi(\omega)')
% grid on
% pause(2)
% hold on
% % plot(omn,angle(Xn),'ro')
% plot(omn,atan2(imag(Xn),real(Xn)),'ro')
% hold off
% legend('analítica','numérica')