Démodulation d'enveloppe

eMax=25;Ri0=0.2;iMax=1000;
s=Table[eMax,{i,iMax}];
modulantT=Table[eMax,{i,iMax}];
moduleT=Table[eMax,{i,iMax}];

ProcCrete[m_,ωm_,ωp_,seuil_]:=Module[{passant=True,t,Δt,Useuil},
modulant[t_] = eMax(1+m Cos[ωm  t]);
module[t_]= Cos[ωp t] modulant[t];
testPassant[t_]=(module[t]+D[module[t],t])>0;
modulantT[[1]]=modulant[Δt];
moduleT[[1]]=module[Δt];
If[seuil,Useuil=eMax/5,Useuil=0];
s[[1]]=moduleT[[1]]-Useuil;
passant=False;
Δt=(3×π)/(iMax×ωm); (* une période et demi du modulant *)
Do[
t=i Δt;
modulantT[[i]]=modulant[t];
moduleT[[i]]=module[t];
If[passant,
s[[i]]=moduleT[[i]]-Useuil;passant=testPassant[t],
s[[i]]=s[[i-1]] Exp[-Δt];passant=s[[i]]<(moduleT[[i]]-Useuil)],{i,2,iMax}];
ListPlot[{s,moduleT,modulantT},Joined->True,ImageSize->550,PlotStyle->{Thick,Red,Pink},PlotRange->{All,{-eMax/2,eMax (1+m)}},DataRange->{0,3 π / ωm}]];

Manipulate[ProcCrete[m,ωm,ωp,seuil],{{m,1,"Taux de modulation"},0.2,1.5, Appearance->"Labeled"},
{{ωm,1,"Fréquence du modulant"},0.8,4, Appearance->"Labeled"},
{{ωp,10,"Fréquence de la porteuse"},7,30, Appearance->"Labeled"},
{{seuil,False,"Tension de seuil"},{True,False}},
SaveDefinitions->True,LabelStyle->Medium, 
SynchronousUpdating->True]

Les temps sont en temps réduit : t/RC, R et C étant ceux du détecteur de crête. Le but est de déterminer les conditions pour avoir une démodulation correcte.

Contributed by: Jean-Michel Millet