% ===================================================================
% APROXIMACION DE LA FUNCION CAJON (BOXCAR) MEDIANTE SERIE DE FOURIER
% ===================================================================

clear all ; close all          % Limpiar variables

t0    = 1 ;      % Amplitud de la función cajón
T     = 4 ;      % Periodo del desarrollo en serie
c0    = 2*t0/T ; % Valor medio en un período

N     = 200 ;    % Numero de muestras en tiempo
dt    = T/N ;    % Intervalo de muestreo

%k_max   % Termino máximo del desarrollo en serie (0,1,2,3, ...)

for k_max=0:10 % bucle sobre los terminos del desarrolo en serie

    k_max


% Defino las muestras de tiempo en [-T/2,T/2], la funcion cajon,
% y defino el primer término del desarrolo (c0);

for i = 1:N+1
  t(i) = -T/2 + (i-1)*dt ;
  if t(i) <= -t0
     box(i) = 0 ;
  elseif t(i) >= t0
     box(i) = 0 ;
  else 
     box(i) = 1 ;
  end
  term(i) = c0 ;
end

% ================================================================
% Graficos
% ================================================================

clf ; % limpiar los gráficos

% Grafico de los terminos del desarrollo para k = 0,...,k_max

subplot(3,1,1)
plot(t,term,';Funciones base;r')
hold on
C = c0 ;
s = term ;
for k = 1:k_max
  c(k) = (2*t0/T)*sin(2*pi*k*t0/T)/(2*pi*k*t0/T) ;
  C = [c(k:-1:1) c0 c(1:+1:k)] ;   % coeficientes de la serie
  term = 2*c(k)*cos(2*pi*k*t/T) ;  % funcion base
  plot(t,term,'r')
  s = s + term ;   % suma de las funciones base 
end
axis([-T/2,T/2,-1,1.2]) ;
hold off

% Grafico de  los valores de los coeficients c0, c1, ..., ck_max

subplot(3,1,2)
hold on
plot((-k_max:k_max),C,';coeficientes c_k;go')
stem((-k_max:k_max),C,';coeficientes c_k;g')
hold off
axis([-(k_max+1),(k_max+1),-(2*t0/T)*0.6,(2*t0/T)*1.2]);

% Grafico  de la función cajon y su aproximación mediante serie de Fourier

subplot(3,1,3)
plot(t,box,';boxcar(t);b')
axis([-T/2,T/2,-0.2,1.2]);
hold on
plot(t,s,';serie s(t);r')
hold off

pause % [enter] en la terminal para continuar
end

% Guardar grafico en un postscript
%print('serie.eps','-depsc'); % -depsc: device eps color
