%% Transformada de Fourier
% Baseado no trabalho do professor Diego Medeiros
%  Esta script serve como estudo para a transformada de Fourier no Matlab. A Transformada é calculada via algoritmo diretamente
%  construído.
%
clear all; close all; clc

%% Criando um sinal de teste
%
% Nesta seÃ§Ã£o, um sinal senoidal para ser utilizado nos testes serÃ¡ criado.
% Os parÃ¢metros da senoide estÃ£o nas variÃ¡veis abaixo.
%

% FrequÃªncia de amostragem
fs = 10000;
ts = 1/fs;

% ParÃ¢metros da senoide
A = 1;
fo = 100;

% Eixo de amostras
N = 1000;
n = 0:N-1;

% Sinal senoidal
s = sin(2*pi*fo*n*ts);

% Exibindo os resultados
figure(1)
plot(n*ts,s)
title(['Sinal senoidal sen(2\pi' num2str(fo) 'n)'])
xlabel('t [segundos]')
ylabel('s(t)')

%% Espectro de frequÃªncias
%
% Vamos utilizar as funções do Matlab para calcular a transformada de
% Fourier do sinal senoidal.
%

% Criando o eixo das frequências
f = linspace(-fs/2,fs/2,N);
f1 = linspace(0 , fs, N);
% CÃ¡lculo da transformada 
% a fft calcula de 0 a fs e usando o fftshift mostra o especto de -fs/2 a
% fs/2. O espectro é copiado da direita para a esquerda
S = fftshift(fft(s));
S1 = fft(s);
% Exibindo os resultados
figure(2)
plot(f,abs(S))
title('Espectro de frequÃªncias')
figure(3)
plot(f1,abs(S1))
title('Espectro de frequÃªncias')
%% Calculando a transformada na mão
%
% Ao invÃ©s de usar a funÃ§Ã£o fft(), iremos implementar uma versÃ£o prÃ³pria da
% transformada
%

% Ã?ndice
i = 1;

% Varrendo todas as frequÃªncias dentro do intervalo de amostragem
for f = linspace(0,fs,length(s))
    
    S(i) = sum(s .* exp(-j*2*pi*f*n*ts));
    
    i = i+1;

end

% Deslocando a transformada
S = fftshift(S);

% Criando o eixo das frequÃªncias
f = linspace(-fs/2,fs/2,N);




