Réponse d'un filtre à un signal carré basse fréquence

tmax=3;imax=4;tau=0.05;m=1.5;

F1[t_] :=2*Sum[ DiracDelta[t-i+0.9],{i,imax}]-2*Sum[ DiracDelta[t-i+0.4],{i,imax}];

(* SquareWave de -1 à +1, donc échelon de 2*)
F[t_] := SquareWave[t-0.1]+0.5;
F2[t_]:=2*Sum[D[ DiracDelta[t-i+0.9],t],{i,imax}]-2*Sum[ D[DiracDelta[t-i+0.4],t],{i,imax}];

PBas1=NDSolve[{tau*s'[t]+s[t]==F[t],s[0]==-0.5},s,{t,0,tmax}];

pPBas1[t_]:=Evaluate[s[t] /. PBas1];

PHaut1=DSolve[{tau*s'[t]+s[t]==tau*F1[t],s[0]==0},s,t];

pPHaut1[t_]:=s[t] /. PHaut1;

PBas2=NDSolve[{tau*tau*s''[t]+m*tau*s'[t]+s[t]==F[t],s[0]==-0.5,s'[0]==0},s,{t,0,tmax}];

pPBas2[t_]:=s[t] /. PBas2;

PBande=DSolve[{tau*tau*s''[t]+m*tau*s'[t]+s[t]==tau*F1[t],s[0]==0,s'[0]==0},s,t];

pPBande[t_]:=s[t] /. PBande;

PHaut2=DSolve[{tau*tau*s''[t]+m*tau*s'[t]+s[t]==tau*tau*F2[t],s[0]==0,s'[0]==0},s,t];

pPHaut2[t_]:=s[t] /. PHaut2;

pPTout[t_]:=pPBas1[t]-pPHaut1[t];

pCB[t_]:=pPBas2[t]+pPHaut2[t];

Manipulate[Plot[{H[t],F[t]},{t,0,tmax },
ExclusionsStyle->Blue,
Frame->True,PlotRange->Full,
PlotStyle->{{Thick,Red},{Thick,Blue}},
FrameLabel->{"Temps réduit",""}],
Style["Réponse d'un filtre à un signal carré basse fréquence",Bold,Medium],
{{H,pPBas1,"Type de filtre"},
{pPHaut1->ToString["Passe-haut d'ordre 1"],
pPBas1->ToString["Passe-bas d'ordre 1"],
pCB->ToString["Coupe-bande"],
pPBande->ToString["Passe-bande"],
pPTout->ToString["Déphaseur"],
pPBas2->ToString["Passe-bas d'ordre 2"],
pPHaut2->ToString["Passe-haut d'ordre 2"]}},
SaveDefinitions->True,
TrackedSymbols->True,
LabelStyle->Medium,
ContinuousAction->False,
ContentSize->Automatic]

Cette démonstration donne la réponse, en rouge, d'un filtre, choisi à l'aide de la boite déroulante, à un signal d'entrée rectangulaire basse fréquence (fréquence de coupure / 20) en bleu.

Pour les filtres du second ordre le facteur de qualité est égal à 1/3.

Contributed by: Jean-Michel Millet