% Transformada de Fourier de pulsos retangular e meio cosseno

clc;
clearvars;
close all;

% seleção, montagem e visualização da função de interesse
pulso='retangular'; % retangular
% pulso='meio cosseno'; % meio cosseno

  % dados característicos
A=1; % área sob a curva
T=2; % duração da amostra adquirida
L=1; % duração da parte não nula (L <= T): 1s, 0.1s e 0.01s

% 1o. ponto - montagem e visualização da função temporal de interesse
  % geração do vetor de tempo "contínuo"
npt=256; % número de pontos
t=linspace(-T/2,T/2,npt);
  % geração da função
switch lower(pulso)
  case 'retangular'
R=A/L; % valor da função em t = 0
f=((t >= (-L/2))-(t >= (L/2)))*R;
  case 'meio cosseno'
R=pi*A/(2*L); % valor da função em t = 0
f=((t >= (-L/2))-(t >= (L/2))).*(R*cos(pi*t/L)); % código alternativo
    otherwise
disp('Pulso não contemplado.')
end
  % visualização
figure(1)  
plot(t,f,'b.')
axis([-T/2 T/2 -0.5*R 1.5*R])
hold on
plot([-T/2 T/2],[0 0],'k-',[0 0],[-0.5*R 1.5*R],'k-')
hold off
xlabel('t(s)');
ylabel('f(t)');
grid on
pause(2)

% % 2o. ponto - cômputo e visualização da transformada de Fourier
%   % geração do vetor de frequência "contínuo"
% npf=256; % número de pontos
% om=linspace(-20,20,npf);
%   % cômputo da transformada analítica
% switch lower(pulso)
%   case 'retangular'
% Fa=R*L*(sin(om*L/2)./(om*L/2));
%   case 'meio cosseno'
% af=pi/L;
% Fa=(R*L/2)*((sin((af+om)*L/2)./((af+om)*L/2))+...
%             (sin((af-om)*L/2)./((af-om)*L/2)));
%     otherwise
% disp('Pulso não contemplado.')
% end
%   % visualização
% figure(2)
% plot(om,Fa,'b.')
% axis([-25 25 -0.5*A 1.5*A])
% hold on
% plot([-25 25],[0 0],'k-',[0 0],[-0.5*A 1.5*A],'k-')
% hold off
% xlabel('\omega (rad/s)')
% ylabel('F(\omega)')
% grid on
% pause(2)

% % 3o. ponto - espectros da transformada de Fourier
%   % visualização de partes real e imaginária
% figure(3)
% subplot(2,2,1)
% plot(om,real(Fa),'c.')
% axis([-25 25 -0.5*A 1.5*A])
% xlabel('\omega (rad/s)')
% ylabel('Parte real de F(\omega)')
% grid on
% subplot(2,2,2)
% plot(om,imag(Fa),'c.')
% axis([-25 25 -0.5*A 1.5*A])
% xlabel('\omega (rad/s)')
% ylabel('Parte imaginária de F(\omega)')
% grid on
%   % visualização de espectros
% figure(3)
% subplot(2,2,3)
% plot(om,abs(Fa),'b.')
% axis([-25 25 -0.5*A 1.5*A])
% xlabel('\omega (rad/s)')
% ylabel('Módulo de F(\omega)')
% title('Espectro de amplitude')
% grid on
% subplot(2,2,4)
% plot(om,atan2(imag(Fa),real(Fa)),'b.')
% axis([-25 25 -4 4])
% xlabel('\omega (rad/s)')
% ylabel('Argumento de F(\omega)')
% title('Espectro de fase')
% grid on

% 4o. ponto - redução da duração do pulso
% -> L em 1s, 0.1s e 0.01s (mantendo A constante)
% 3o. passo pode ser comentado