% Série de Fourier
%
% este script mostra como a série de Fourier trigonométrica se aproxima 
% de um certo sinal à medida que aumentamos o número de termos da série.
% É considerado o sinal g(t) = exp(-t/2) no intervalo 0 a pi.
%

% Universidade de Brasília
% Andre Noll Barreto, 29/03/2011

% parâmetros
n_termos = 100; % número de termos da série

t = 0:.01:pi;
g = exp(-t/2);

a0 = (-2/pi)*(exp(-pi/2)-1);
y = ones(size(g))* a0;

Ts = pi;
Energy = 1 - exp(-pi);
Energy_series = zeros(1, n_termos );
Energy_series(1) = a0^2 * Ts;
series_amp = zeros( 1, n_termos );
series_phi = zeros (1, n_termos );
series_amp (1) = a0;
series_phi (1) = 0;

for n = 1:n_termos-1
    
    Cn = a0 * (2/sqrt(1+16*n^2));
    theta_n = -atan(4*n);
    
    y = y + Cn*cos(2*n*t+theta_n);

    Energy_series( n + 1 ) = Energy_series( n ) + Cn ^ 2 * Ts / 2;
    series_amp ( n+ 1 ) = Cn;
    series_phi ( n + 1 ) = theta_n;

end


figure( 1 )

plot(t,g,t,y)
legend('g(t)','aproximação pela série')

figure( 2 )
plot(  0 : n_termos - 1, ones(1,n_termos)* Energy );
hold on
stem( 0 : n_termos - 1, Energy_series, 'r')
hold off
legend('Energia Total', 'Energia na Série de Fourier', 'Location', 'southeast')

figure ( 3 )

subplot( 1, 2, 1 )
f = ( 0: n_termos - 1)/Ts;
stem( f, series_amp );
xlabel('frequência(Hz)');
title('amplitude')
subplot( 1, 2, 2 );
stem( f, series_phi, 'r' )
xlabel('frequency(Hz)');
title('fase')



