%Systemes Lineaires Continus
%Filtrage Analogique

%Convolution, Transformee de Fourier et Filtrage:
%------------------------------------------------

%Trace de la fonction porte :
%****************************

%On trace la fonction porte de largeur T=5 avec un pas de Ts=0.01

clear
t=-20:0.01:20
x=abs(t)<2.5
plot(t,x)

%Trace de la fonction H ( f ) :
%******************************

f=linspace(-2.5,2.5,length(t))
H=abs(f)<0.2
plot(f,H)

%Trace de X ( f ) :
%******************

X=fftshift(0.01*fft(x))
plot(f,abs(X))
axis([ -2 2 0 5 ])

%Trace de Y ( f ) :
%******************
Y=H.*X
plot(f,abs(Y))
axis([ -2 2 0 5 ])

%Trace de y ( t ) :
%******************

y=ifft(Y)
plot(t,abs(y))

%Réponse pour différentes fréquences de coupure fc=1/T:
%******************************************************

T=[5 10 20 30 40]

for i=1:1:5
	H=(abs(f)<1/T(i))
	Y=X.*H
	plot(f,abs(Y),'b')
	y=ifft(Y)
	plot(t,y,'r')
	axis([-2 2 0 5])
	end; 

%Quand la fréquence de coupure augmente, le taux d'ondulation du signal de sortie aussi.
%Le signal de sortie devient identique au signal d'entrée:le signal porte.

%Filtres reels:
%--------------

%Domaine temporel:
%*****************

clear							
t=linspace(0,1,512)

f1=5
f2=20
f3=35
x=sin(2*pi*f1.*t)+sin(2*pi*f2.*t)+sin(2*pi*f3.*t)

%Tracé de x(t) dans le domaine temporel:
%***************************************
plot(t,x,'r')
xlabel('Temps en secondes')
ylabel('Signal x')
title('Représentation temporelle du signal x')
		
%Calcul de la transformée de fourier de x:
%*****************************************

X=fftshift(1/512*fft(x))

%Filtre de Tchebytchev:
%----------------------

%domaine fréquentiel:
%********************

f=linspace(-256,256,512)

%pulsation:
%**********

w=2*pi*f
		
%Calcul des coefficients du filtre de Tchebytchev entre 10Hz et 30 Hz:
%*********************************************************************

[b,a]=cheby1_asi(4,0.5,[2*pi*10 2*pi*30],'bandpass','s')
		
%Représentation du filtre de Chebychev d'ordre 8 entre 0 et 40Hz:
%****************************************************************

H=freqs_asi(b,a,w)

plot(f,H,'b')
axis([0 40 -1 1])
		

%tracé de la sortie y(t)=x(t)*h(t):
%**********************************

%D'après le théorème de plancherel, on sait que Y(f)=X(f)H(f), on peut donc en déduire y(t), transformée inverse de Y(f).

Y=H.*X
y=abs(ifft(Y)/Ts)
		
%Représentation de x et y dans le domaine temporel:
%**************************************************

plot(t,x,'r')
hold on
plot(t,y,'b')
title('Représentation des signaux d'entrée (rouge) et de sortie (bleue)')
xlabel('Temps en s')

%représentation de H:
%********************

plot(f,abs(H),'b')
title('Transformée de Fourier de la fonction de transfert')
xlabel('Fréquence  en Hz')
ylabel('amplitude')
axis([0 40 0 1])

%Représentation de X, et Y dans le domaine fréquentiel:
%******************************************************

subplot(2,1,1)
plot(f,abs(X),'b')
axis([0 40 0 1])
title('Transformée de Fourier du signal d'entrée')
xlabel('Fréquence  en Hz')
ylabel('amplitude')

subplot(2,1,2)
plot(f,abs(Y),'b')
axis([0 40 0 1])
title('Transformée de Fourier du signal de sortie')
xlabel('Fréquence en Hz')
ylabel('amplitude')
			
%Grace au filtre, certaines hautes fréquences ont été parfaitement atténuées.

%Filtre de Butterworth:
%----------------------

%Calcule de x(t):
%****************

%domaine temporel:
%*****************							

t=linspace(0,1,Fs)

f1=5
f2=20
f3=35
x=sin(2*pi*f1.*t)+sin(2*pi*f2.*t)+sin(2*pi*f3.*t)

%Tracé de x(t) dans le domaine temporel:
%***************************************

plot(t,x,'r')
xlabel('Temps en secondes')
ylabel('Signal x')
title('Représentation temporelle du signal x')
		
%Calcul de la transformée de fourier de x:
%*****************************************

X=fftshift(1/Fs*fft(x));

%Filtre de butterworth d'ordre 8:
%********************************

%domaine fréquentiel:
%********************

f=linspace(-256,256,512)

%pulsation:
%**********

w=2*pi*f
		
%Calcul des coefficients du filtre de Butterworth de fréquence de coupure fc=20Hz:
%*********************************************************************************

[b,a]=butter_asi(4,[2*pi*10 2*pi*30],'bandpass','s')

%Représentation du filtre de Butterworth d'ordre 8 entre 0 et 40Hz:
%******************************************************************

H=freqs_asi(b,a,w)

plot(f,H,'b')
axis([0 40 -1 1])
		
%tracé de la sortie y(t)=x(t)*h(t):
%**********************************

%D'après le théorème de plancherel, on sait que Y(f)=X(f)H(f), on peut donc en déduire y(t), transformée inverse de Y(f).

Y=H.*X
y=abs(ifft(Y)/Ts)
		
%Représentation de x et y dans le domaine temporel:
%**************************************************

plot(t,x,'r')
hold on
plot(t,y,'b')
title('Représentation des signaux d'entrée (rouge) et de sortie (bleue)')
xlabel('Temps en s')

%représentation de H:
%********************

plot(f,abs(H),'b')
title('Transformée de Fourier de la fonction de transfert')
xlabel('Fréquence  en Hz')
ylabel('amplitude')
axis([0 40 0 1])

%Représentation de X, et Y dans le domaine fréquentiel:
%******************************************************
		
subplot(2,1,1)
plot(f,abs(X),'b')
axis([0 40 0 1])
title('Transformée de Fourier du signal d'entrée')
xlabel('Fréquence  en Hz')
ylabel('amplitude')
subplot(2,1,2)
		
plot(f,abs(Y),'b')
axis([0 40 0 1])
title('Transformée de Fourier du signal de sortie')
xlabel('Fréquence en Hz')
ylabel('amplitude')
