%Echantillonage ideal:
%*********************

%On genere la courbe de la fonction a echantilloner.

clear
fo=12;
t=-5:0.001:5;
x=sin(pi*fo*t)./(pi*t);
plot(t,x)
figure

%Au lieu de prendre un points tous les 0.001 comme au dessus,
%on prend un point tous les Te=1/Fe.
%On echantillone successivement avec une frequence de 12, 50 et 100Hz.

fo=12;
Fe=12;
Te=1/Fe;
t=-5:Te:5;
x=sin(pi*fo*t)./(pi*t);
subplot(3,1,1)
plot(t,x)

Fe=50;
Te=1/Fe;
t=-5:Te:5;
x=sin(pi*fo*t)./(pi*t);
subplot(3,1,2)
plot(t,x)

Fe=100;
Te=1/Fe;
t=-5:Te:5;
x=sin(pi*fo*t)./(pi*t);
subplot(3,1,3)
plot(t,x)

%Lorsque la frequence d'echantillonage est trop faible (12 Hz), le signal est mal echantillonné et ne restitue pas la bonne information.

%Echantillonage reel:
%********************

clear all
fo=12;
h=0.001;
Theta=5*h;

tcontinue=-5:0.001:5;

xcontinue=sin(pi*fo*tcontinue)./(pi*tcontinue);

for j=1:1:3                                                        %Boucle pour une frequence d'echantillonnage de 50, 100 et 150 Hz
    Fe=j*50;
    Te=1/Fe;
    tdiscret=-5:Te:5;
    for k=1:1:3                                                     %boucle pour Theta de 5h, 10h et 15h
        for n=1:1:length(tdiscret)
            i=find(-5+n*Te<tcontinue & tcontinue<-5+n*Te+k*5*h);
            xdiscret(n)=(h/(k*5*h))*sum(xcontinue(i));
            end;
        subplot(3,1,k)
        plot(tdiscret,xdiscret)
        end;
    figure
    end;
    
    

     

%Pour une frequence d'echantillonnage constante, plus la precision est grande (plus Theta est petit), meilleur est le signal echantillonné.
%Pour une precision constante, plus le fréquence d'echantillonage est élevé (plus Te est petit), meilleur est le signal échantillonné.
%Pour obtenir un meilleur échantillonnage réel, la précision et la fréquence déchantillonnage doivent augmenter.

%Reconstruction réel:
%********************

%A partir de l'échantillonnage idéal:
%************************************

clear all

%Signal continu:
%---------------

fo=12;
tcontinue=-5:0.001:5;
xcontinue=sin(pi*fo*tcontinue)./(pi*tcontinue);
%subplot(3,1,1)
plot(tcontinue,xcontinue),hold on

%Signal discret:
%---------------

Fe=100;
Te=1/Fe;
tdiscret=-5:Te:5;
xdiscret=sin(pi*fo*tdiscret)./(pi*tdiscret);
%subplot(3,1,2)
%plot(tdiscret,xdiscret)

%Signal continu reconstruit:
%---------------------------

treconstruit=-5:0.001:4.999;
xreconstruit=[];
for i=1:100*Te:length(tdiscret)-1
    for n=1:1:10
         xreconstruit=[xreconstruit xdiscret(i)];
        end;
    end;
%subplot(3,1,3)
%axis([-1 1 15 22])
plot(treconstruit,xreconstruit,'r'),hold off

%Le signal reconstruit est décalé vers la droite par rapport au signal d'origine.

%A partir de l'échantillonnage réel:
%***********************************

clear all

%Signal continu:
%---------------

fo=12;
tcontinue=-5:0.001:5;
xcontinue=sin(pi*fo*tcontinue)./(pi*tcontinue);
%subplot(3,1,1)
plot(tcontinue,xcontinue,'b'),hold on

%Signal discret:
%---------------

Fe=100;
Te=1/Fe;
tdiscret=-5:Te:5;   
h=0.001;
Theta=10*h;
xdiscret=[];

for n=1:1:length(tdiscret)
            i=find(-5+n*Te<tcontinue & tcontinue<-5+n*Te+Theta);
            xdiscret(n)=(h/Theta)*sum(xcontinue(i));
            end;
%subplot(3,1,2)
%plot(tdiscret,xdiscret)

%Signal continu reconstruit:
%---------------------------

treconstruit=-4.999:0.001:5;
xreconstruit=[];
for i=1:100*Te:length(tdiscret)-1
    for n=1:1:10
         xreconstruit=[ xdiscret(i) xreconstruit];
        end;
    end;
%subplot(3,1,3)
%axis([-1 1 15 22])
plot(treconstruit,xreconstruit,'r'),hold off


%Pour Theta=5, 10 ou 15 fois h, le signal reconstruit est décalé vers la droite par rapport au signal de départ.