%% Simulation / Modélisation de systèmes linéaires
%   Module : Ingénierie Electronique 
%       pour le traitement de l'Information
%--------------------------------------------------------------
%   TD_09 : Sonde compensée d'un oscilloscope
%--------------------------------------------------------------
%   Auteur : Julien VILLEMEJANE
%   Date : 11/12/2020
%--------------------------------------------------------------
clear all;
close all;
%% Données du système
close all;  clear all;
% Donnees de l'enonce
R=1e6;
Rs=9e6;
C=125e-12;
% Gain en basse frequence
T0=R/(R+Rs);
% Vecteur frequence / pulsation
f=logspace(1,6,100);
w=2*pi.*f;

%% Pour Cs = 5 pF
Cs=5e-12;
f1_5 = 1/(2*pi*Rs*Cs)
f2_5 = (R+Rs)/(2*pi*R*Rs*(Cs + C))
% Fonction de transfert
Ta_5 = T0*(1+1j.*w/(2*pi*f1_5))./(1+1j.*w/(2*pi*f2_5));
% Diagramme de Bode
figure;
subplot(2,1,1); semilogx(f,20*log10(abs(Ta_5)));
grid on;
xlabel('fréquence (Hz)');
ylabel('Gain (dB)');
subplot(2,1,2); semilogx(f,angle(Ta_5)*180/pi);
grid on;
xlabel('fréquence (Hz)');
ylabel('Phase (deg)');

%% Pour Cs = 50 pF
Cs=50e-12;
f1_50 = 1/(2*pi*Rs*Cs)
f2_50 = (R+Rs)/(2*pi*R*Rs*(Cs + C))
% Fonction de transfert
Ta_50 = T0*(1+1j.*w/(2*pi*f1_50))./(1+1j.*w/(2*pi*f2_50));
% Diagramme de Bode
figure;
subplot(2,1,1); semilogx(f,20*log10(abs(Ta_50)));
grid on;
xlabel('fréquence (Hz)');
ylabel('Gain (dB)');
subplot(2,1,2); semilogx(f,angle(Ta_50)*180/pi);
grid on;
xlabel('fréquence (Hz)');
ylabel('Phase (deg)');

%% Calcul de Cs optimal
Cs=C*R/Rs;
f1_op = 1/(2*pi*Rs*Cs)
f2_op = (R+Rs)/(2*pi*R*Rs*(Cs + C))
% Fonction de transfert
Ta_op = T0*(1+1j.*w/(2*pi*f1_op))./(1+1j.*w/(2*pi*f2_op));
% Diagramme de Bode
figure;
subplot(2,1,1); semilogx(f,20*log10(abs(Ta_op)));
grid on;
xlabel('fréquence (Hz)');
ylabel('Gain (dB)');
subplot(2,1,2); semilogx(f,angle(Ta_op)*180/pi);
grid on;
xlabel('fréquence (Hz)');
ylabel('Phase (deg)');

%% Récap
figure;
subplot(2,1,1); semilogx(f,20*log10(abs(Ta_5)),f,20*log10(abs(Ta_50)),f,20*log10(abs(Ta_op)));
grid on;
xlabel('fréquence (Hz)');
ylabel('Gain (dB)');
legend('5 pF', '50 pF', 'optimal');
subplot(2,1,2); semilogx(f,angle(Ta_5)*180/pi, f,angle(Ta_50)*180/pi, f,angle(Ta_op)*180/pi);
grid on;
xlabel('fréquence (Hz)');
ylabel('Phase (deg)');

%% Impedance
Zsw = Rs ./ (1 + 1j * Rs * Cs .* w);
Zrw = R ./ (1 + 1j * R * C .* w);
Zw = Zsw + Zrw;
% Impedance en fonction de w
figure;
subplot(2,1,1); semilogx(f,abs(Zw));
grid on;
xlabel('fréquence (Hz)');
ylabel('Impédance (Ohms)');
subplot(2,1,2); semilogx(f,angle(Zw)*180/pi);
grid on;
xlabel('fréquence (Hz)');
ylabel('Phase (deg)');

% Pour f = 2.5 MHz
wr = 2*pi*2.5e6;
Zs = Rs / (1 + 1j * Rs * Cs * wr);
Zr = R / (1 + 1j * R * C * wr);
Z = Zs + Zr
abs(Z)
angle(Z) * 180 / pi