% Dominic Grenier 2015
% variables à définir
% npts = nombre d'échantillons utilisés pour les transformations temps-fréquence
% T = durée d'échantillonnage
% nharm = nombre d'harmoniques conservées pour représenter le signal
% R,L,C,G = paramètres distribués de la ligne de transmission

npts=2^8;
T=0.66666e-2;
nharm=3;

R=5.1e-3;%*sqrt(abs(fs)/300)+eps;
L=0.16e-6;
G=0.02e-6;
C=0.17e-9;
%L=R*C/G

l=20000;

%génération du signal temporel st
%et des vecteurs temps d'échantillonnage t et fréquences discrètes fs
t=linspace(0,1,npts)*T;
st=2*(1-(t>=0.25*T)+(t>=0.5*T)-(t>=0.75*T))-1;
fs=(-npts/2:npts/2-1)/max(t)+eps;
f=ifftshift(fs);

%transformation vers le domaine fréquentiel
Sf=fft(st);
%conservation des nharm harmoniques les plus importantes
[bide,I]=sort(abs(Sf));
Sappf=zeros(1,npts);
Sappf(I(npts:-1:npts-2*nharm))=Sf(I(npts:-1:npts-2*nharm));
%signal temporel approximatif en conservant nharm harmoniques
sappt=ifft(Sappf);

%vecteur constante de propagation selon les fréquences discrètes
gamma=sqrt((R+j*2*pi*fs.*L).*(G+j*2*pi*fs.*C));

%affichage de la vitesse et atténuation pour chaque harmonique du signal
vps=2*pi*fs./imag(gamma);
vp=ifftshift(vps);
dBms=8.686*real(gamma);
dB=ifftshift(dBms*l);
fprintf('fréquence (Hz)\t vitesse (m/s)\t atténuation (dB)\n\n');
for k=1:nharm
    ii=I(npts-2*k+1);
%    fprintf('%8.0f\t\t %12.4g\n',f(ii),vp(ii));
fprintf('%8.0f\t\t %12.4g\t\t %6.2f\n',f(ii),vp(ii),dB(ii));
end

%application de la fonction de transfert de la ligne de transmission
%sur le signal d'entrée dans le domaine fréquentiel
Sappfs=fftshift(Sappf);
Sapplfs=Sappfs.*exp(-gamma*l);
Sapplf=ifftshift(Sapplfs);
%transformation de la sortie vers le domaine temporel 
sapplt=real(ifft(Sapplf));

%impression des graphiques 1) domaine temporel 2) domaine fréquentiel
figure(1);
plot(t,st,t,sappt,t,sapplt);
xlabel('t (sec)');
%figure(2);
%plot(f,abs(Sf),f,abs(Sappf),f,abs(Sapplf));
%xlabel('f (Hz)');
