%% Simulation / Modélisation d'un système de photodétection
%   Module : Ingénierie Electronique 
%       pour le Traitement de l'Information
%--------------------------------------------------------------
%   TD_10 : Photodétection - Modélisation
%--------------------------------------------------------------
%   Auteur : Julien VILLEMEJANE
%   Date : 11/12/2020
%--------------------------------------------------------------
clear all;
close all;
size_m = 10001;
f = logspace(2,8,size_m);
w = 2*pi.*f;
%% Constantes
RT = 1e5;
Cphd = [1e-12 10e-12 30e-12 100e-12 1e-9];
num_c = max(size(Cphd));
% Ampli Opérationnel / ALI
A0 = 1e5;               % Amplification différentielle A
funitaire = 1e7;        % Bande-passante unitaire
f0 = funitaire/A0;      % Fréquence de coupure en boucle ouverte

%% Comparaison
% Création des N systèmes
TF_trans = tf(zeros(1,1,num_c));
wtrans = zeros(1,num_c);
Qtrans = zeros(1,num_c);
for i = 1:num_c
    wc = 1/(RT*Cphd(i));
    fc = wc/(2*pi);

    %% Modèle équivalent simplifié
    wtrans(i) = sqrt(wc*2*pi*funitaire);
    Qtrans(i) = sqrt(funitaire/fc);
    num_trans = [RT*A0/(1+A0)];
    a2 = 1/(wtrans(i)*wtrans(i));
    a1 = 1/(wtrans(i)*Qtrans(i));
    den_trans = [a2 a1 1];
    TF_trans(:,:,i) = tf(num_trans, den_trans);
end
clear num_trans den_trans a1 a2
% Calcul des N réponses en fréquence
for i = 1:num_c
    [mag, phase, w_Iphd] = bode(TF_trans(:,:,i), w);
    mag = squeeze(mag);
    phase = squeeze(phase);
    phase_trans(:,i) = phase(:);
    mag_trans(:,i) = mag(:);
end
clear mag phase w_Iphd;
%% Affichage des N diagrammes de Bode
str_titre = 'Transimpedance__A0_'+string(A0/1000)+'k__RT_'+string(RT/1e6)+'M';
figure('Name', str_titre, 'NumberTitle','off');
subplot(2,1,1);
for i = 1:num_c
    str(i) = 'C = '+string(Cphd(i));
    semilogx(f, 20*log10(mag_trans(:,i)));
    legend(str);
    hold on;
end
xlabel('Frequence (Hz)');
ylabel('gain (dB)');
grid on;
subplot(2,1,2);
for i = 1:num_c
    str2(i) = 'Q = '+string(Qtrans(i)) + ' / fc = ' + string(floor(wtrans(i)/(2*pi*1000))) + 'kHz';
    semilogx(f, phase_trans(:,i));
    legend(str2);
    hold on;
end
ylabel('Phase (deg)');
grid on;
clear i num_c
clear mag_trans phase_trans


