%  Programme Shannon.m
%
% Transformee de Fourier Discrete, echantillonage, repliement
%
% Licence de Physique, Sciences Physiques
% Annee Universitaire : 1998-1999
% H. Carfantan et J.-L. Attie
%-----------------------------------------------------------
nom = '???';

%----------------------------------------------------------------------
% On dispose d'un signal x sur un tres grand nombre de points.
% On peut assimiler ce signal a un signal continu. 
% On va illustrer la construction de la TFD, et les effets de 
% l'echantillonnage.
%----------------------------------------------------------------------

%----------------------------------------------------------------------
% 1 - Etude du signal
%----------------------------------------------------------------------

% Construction du signal		
 lx = 128;					% Longueur du signal
 t  = 0:lx-1;					% Temps
 x = sin(2*pi*t/20).*exp(-1/2/300*(t-60).^2);	% Signal

% Visualisation du signal
  figure(1)
  clg
  subplot(211);
  plot(x); grid;
  title([nom,' Signal original']);
  xlabel('temps')

% Calcul visualisation du module de la TF
  X = fft(x);
% Echelle des frequences arbitraire allant de -1/2 a 1/2
  f = ( [1:lx] - (lx/2+1) )/(lx);
  subplot(212);
  plot(f,fftshift(abs(X))); grid;
  title(sprintf('Module de la TF du signal discret (%dpoints)',lx));
  xlabel('Frequence')

%----------------------------------------------------------------------
% 2 - Echantillonage du signal continu
%----------------------------------------------------------------------
% On va verifier que l'echantillonage d'un signal continu provoque
% une periodisation de sa TF.
%
% On va simuler l'echantillonnage d'un signal continu en ne retenant 
% dans y qu'un point sur n de x et en mettant les autres a zero 
%----------------------------------------------------------------------  
  n = input('Facteur de sous echantillonnage : ');	
  fprintf('On ne conserve qu''un point sur %d du signal original\n',n);
  y = zeros(1,lx);
  for k = 1:lx/n,
      y(n*k) = x(n*k);
  end

% On superpose les signaux continus et echantillonne
  figure(2)
  clg
  subplot(211)
  plot(x,'-');
  hold on;
  plot(y,'g--');
  hold off;
  title([nom, 'Signaux continu et << echantillonne >>']) 

% On calcule et affiche le module de la TF de xx et de yy
  Y = fft(y);
% Pour conserver la meme amplitude, on multiplie cette TF n 
% correspondant a la perte moyenne en energie du signal lors de 
% l'echantillonnage.
  Y = n*Y;
  subplot(212)
  plot(f,fftshift(abs(X)),'-')
  hold on
  plot(f,fftshift(abs(Y)),'g--')
  hold off
  title('Module de la TF des signaux <<continu>> et <<echantillonne>>')
  xlabel('Frequence'); grid on

