Vous êtes sur la page 1sur 42

Piozin Anas -MAM4 TNS

Compte rendu des travaux pratiques

Anne 2009 -2010 PolytechNice Sophia Antipolis 1

Piozin Anas -MAM4 TNS

Tabledesmatires
1Utilisationdulogicielgnuplot:tracdelacourbe x 2

2Filtresrponseimpulsionnellefinieetfiltresrcursifs 2.1Filtrerponseimpulsionnellefiniedudeuximeordre 2.1.1DfinirunRIFparsesdeuxracinescomplexesimaginairesconjugues 2.1.2Applicationd'unsignalsinusodalenentredufiltre 2.1.3Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquences delasinusoded'entre(mthodedersolutiondirecte) 2.1.4Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquences delasinusoded'entre(mthodedesmoindrescarres) 2.2Filtrercursifdudeuximeordre 2.2.1Dfinirunfiltrercursifdudeuximeordre 2.2.2Applicationd'unsignalsinusodalenentredufiltre 2.2.3Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquences delasinusoded'entre(mthodedersolutiondirecte) 2.2.4Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquences delasinusoded'entre(mthodedesmoindrescarres)

3TransformedeFourierdiscrte,transformedeFourierrapide 3.1TransformedeFourierDiscrte 3.2TransformedeFourierRapide

Piozin Anas -MAM4 TNS 1Utilisationdulogicielgnuplot:tracdelacourbe x 2

Afindesefamiliariseraveclelogicielgnuplot,nousavonstoutd'abordtraclafonction carre. Pourcela,nousavonsinscritdansunfichierpourdiffrentesvaleursdexlavaleur x 2 correspondante.Puisl'aidedelafonctionplotdansgnuplotnousavonsobtenulegraphesuivant:

FIG1Tracdelacourbe x 2

Piozin Anas -MAM4 TNS

2Filtresrponseimpulsionnellefinieetfiltresrcursifs
Lebutdecettepartieestdeprogrammerunfiltreetdevrifierquel'amplitudeetlaphasede sinusodesfiltressontbiencellesquel'ondduitdelarponseenfrquencedufiltre.

2.1Filtrerponseimpulsionnellefiniedudeuximeordre
2.1.1DfinirunRIFparsesdeuxracinescomplexesimaginairesconjugues Onsaitqueunfiltrerponseimpulsionnellefiniedudeuximeordrepeuts'criresouslaforme: B z =b 0 +b 1 z1 +b 2 z 2 d'o z 2 B z =b 0 z+b 1 z+b 2 Mais,onsaitaussiquel'onpeutaussiquel'onpeutdterminerB(z)l'aidedesesdeuxracines complexesconjugues z 1 =e et z 1 =e (puisquelesignalestrel).Onauraalors:
B z = zz 1 zz 1 B z =z 2 2cos z 1
2

Enposantb(0)=1etenidentifiant,onobtient: b 1 =2cos b 2 =
2

Cherchonsalorslarponseenfrquencedufiltre.Elles'obtientencalculantlemoduleetl'argument de: 2 2j B e j =1 2cos . e j + .e .Avec = et= 1 ona: 4

Piozin Anas -MAM4 TNS

FIG2Modulede B e j

FIG3Argumentde B e j

Piozin Anas -MAM4 TNS


2.1.2Applicationd'unsignalsinusodalenentredufiltre Onveutsavoirquelleestlasortiequel'onobtientparlefiltreB(z)crprcdemment sachantqu'enentreonappliqueunsignalsinusodaltrssimple x t =cos t . Lesgraphiquesonttralispourlesvaleursde B z := 1 ,= etpour= . 3 2

FIG4Signald'entreetRponseimpulsionnelledufiltre 2.1.3Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquencesdela sinusoded'entre(mthodedersolutiondirecte) Quandonappliqueausignalx(t)lefiltreB(z),onobtientunsignaldelaforme y t =a cos t+ . Ici,lesseulesinconnuessont eta.Nousavonsdeuxinconnues,ilnousfautdoncdeuxquations pourlesdterminer. s t =a cos t+ Pourcela,nousallonsprendredeuxchantillonssuccessifs . s t+ 1 =a cos t+1 + s t =a cos t+ =a cos t cos sin t sin 1 s t+ 1 =a cos t+1 + =a cos t+ 1 cos sin t+ 1 sin 2 Enposant, s t =u cos t v sin t 1 u=a cos .Onaalors: . s t+ 1 =u cos t+ 1 v sin t+ 1 2 v=a sin

Enmultipliant(1)par cos t+ 1 et(2)par cos t etenlessoustrayantonobtient: v=

s t cos t+ 1 cos t s t+1


sin
et(2)par sin t etenlessoustrayantonobtient:
1

Demme,enmultipliant(1)par sin t+ 1

Piozin Anas -MAM4 TNS


u= a= u 2 +v 2 Ducoup, v . = arctan u

s t sin t+ 1 sin t s t+ 1 .
sin

Avec =

et= 1 ona: 4

FIG5Amplitudedusignalparrsolutiondirecte

Piozin Anas -MAM4 TNS

FIG6Phasedusignalparrsolutiondirecte 2.1.4Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquencesdelasinusode d'entre(mthodedesmoindrescarres) Lamthodeprcdentes'appliquepourunsignalidal.Or,cecin'estmalheureusementpassouvent lecas.Engnral,onaplutt: y' t =u cos t +v sin t +b t ob(t)reprsentelesbruit. 2 Oncherchequandsebruitestminimal.Pourcela,onpose: E t = y t u cos t +v sin t avec y t =a cos t+ .
E t =0 E E u Leminimumestatteintquandet .Calculonsalors et . u v E t =0 v E = 2 cos t a cos t+ u cos t v sin t =0 u

E = 2 sin t a cos t+ u cos t v sin t =0 . v Etparlinaritdelasommeona: a cos t+ cos cos t sin t cos t =0

a cos t+ sin t cos t sin t sin t =0


1

Piozin Anas -MAM4 TNS


A=a cos t+ cos t B=cos t AuBvC= 0 Enposant ona2quations . DuC vE= 0 C= sin t cos t D=a cos t+ sin t E=sin t DC AE CC BE D'o . CADB v= CC BE u= et= 1 ona: 4

Pour =

FIG7Amplitudedusignalparmthodedesmoindrescarres

Piozin Anas -MAM4 TNS

FIG8Phasedusignalparmthodedesmoindrescarres

2.2Filtrercursifdudeuximeordre 2.2.1Dfinirunfiltrercursifdudeuximeordre Onsaitqueunfiltrercursifdudeuximepeuts'criresouslaforme: 1 1 = 1 A z a0 +a1 z +a 2 z2 Mais,onsaitaussiquel'onpeutaussiquel'onpeutdterminerA(z)l'aidedesesdeuxracines complexesconjugues z 1 =e et z 1 =e (puisquelesignalestrel).Onauraalors: 1 1 = A z zz 1 zz 1 1 1 = A z 12cos z1 2 z 2

Enposanta(0)=1etenidentifiant,onobtient: a 1 =2cos

. 2 a 2 = Cherchonsalorslarponseenfrquencedufiltre.Elles'obtientencalculantlemoduleetl'argument de: 1

Piozin Anas -MAM4 TNS


1 A e = 12cos . e j . e 2j j

.Pour =

et= 0,9 ona: 3

FIG11Modulede

1 A e
j

Piozin Anas -MAM4 TNS

FIG12Argumentde

1 A e
j

1 n'estpasdfinie.La

Onnoteunpetitproblmeauxpoints ,0, .Carensespoints

A e j solutionadonctdenepasprendresespointspourtracerlegraphique. 2.2.2Applicationd'unsignalsinusodalenentredufiltre

Onveutsavoirquelleestlasortiequel'onobtientparlefiltre1/A(z)crprcdemmentsachant qu'enentreonappliqueunsignalsinusodaltrssimple x t =cos t . Onauraunesortieunsignaldelaforme: y t =x t 2cos y t1 2 y t 2 . Lesgraphiquesonttralispourlesvaleursde = 0 . 9 ,= etpour= 1 . 3

Commenonstoutd'abord,parunsignaldelaforme:

x t =1 pourt=0 . =0 pourt> 0

Piozin Anas -MAM4 TNS

FIG13Rponseimpulsionnelledex(t)

Maintenant,onprend x t =cos t .Pour = 1

FIG14Tracdex(t)

Piozin Anas -MAM4 TNS

FIG15Rponseimpulsionnelledex(t) 2.2.3Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquencesdelasinusode d'entre(mthodedersolutiondirecte) Lamthodeestlammequedansleparagraphe2.1.3.Onadaptejustenotrecode. Lesrsultatssontobtenuspour = 0 . 9 ,= etpour= 1 . 3

FIG16Amplitudedusignalparrsolutiondirecte

Piozin Anas -MAM4 TNS

FIG17Phasedusignalparrsolutiondirecte 1 Onnoteunpetitproblmeauxpoints ,0, .Carensespoints j n'estpasdfinie.La A e solutionadonctdenepasprendresespointspourtracerlegraphique.

2.2.4Amplitudeetphasedelasinusodedesortiespourdiffrentesfrquencesdelasinusode d'entre(mthodedesmoindrescarres) Lamthodeestlammequedansleparagraphe2.1.3.Onadaptejustenotrecode. Lesrsultatssontobtenuspour = 0 . 9 ,= et`pour`= 1 . 3 1

Piozin Anas -MAM4 TNS

FIG18Amplitudedusignalparmthodedesmoindrescarres

FIG19Phasedusignalparmthodedesmoindrescarres

Piozin Anas -MAM4 TNS


Onnoteunpetitproblmeauxpoints ,0, .Carensespoints 1
j

A e solutionadonctdenepasprendresespointspourtracerlegraphique. 3TransformedeFourierdiscrte,transformedeFourierrapide 3.1TransformedeFourierDiscrte

n'estpasdfinie.La

Onavuquelatransforme X e j d'unesquencex(n)s'critsouslaforme: X e j = x n e jn (1). Commecettefonctionestpriodique,depriode2 ,onpeutalorsladcomposerensriede Fourier.LasriedeFouriersontlescoefficientsx(n)dfinitpar: 1 x n = X e j e jn d . 2 CalculerlatransformedeFourierdiscrterevientcalculerlatransformedeFourierdonnepar (1)pourlesvaleursde k = ok=1,2,....N1. j2 jn2 2 Etenprenant = ona: . N X e = x n e N N

Pourunefonctioncosinusenentredefrquence400onobtientlesgraphessuivants:

FIG19AmplitudedusignalparlatransformedeFourierDiscrte

Piozin Anas -MAM4 TNS

FIG20PhasedusignalpartransformedeFourierDiscrte

Piozin Anas -MAM4 TNS


AnnexesCodesPermettantderaliserlesgraphiquesprcdents:
import java.util.*; import java.io.*; public class RIF { /** * Cette classe permet de calculer le module et l'argument de la rponse impulsionnelle * d'un filtre du deuxime ordre. * On remarque qu'elle ne contient que des fonctions de type statique. * @autor piozin */ // Mthode qui stocke les valeurs de b(1) et b(2) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double b1=-2*ro*Math.cos(phi); double b2=ro*ro; l.add(b1); l.add(b2); return l; } // Mthode qui calcule B(exp(j teta) public static ArrayList<NombreComplexe> Calcul(double ro, double phi) { ArrayList<Double> l= Filtre(ro,phi); double b1=l.get(0); double b2=l.get(1); ArrayList<NombreComplexe> valeur=new ArrayList<NombreComplexe>(); for (double n=0;n<=100;n++) { double teta=((n-50)/100)*2*Math.PI; double a=1+b1*Math.cos(teta)+b2*Math.cos(2*teta); double b=-(b1*Math.sin(teta)+b2*Math.sin(2*teta)); NombreComplexe c=new NombreComplexe(a,b); System.out.println(c); valeur.add(c); } return valeur; } // Mthode qui calcule le module de B(exp(j teta)) public static ArrayList<Double> Module (double ro, double phi) { ArrayList<NombreComplexe> val=Calcul( ro, phi); ArrayList<Double> mod=new ArrayList<Double>(); NombreComplexe a= new NombreComplexe(1,1); for (int i=0;i<val.size();i++) { double b=a.module(val.get(i)); mod.add(b); } return mod; } // Mthode qui calcule l'argument de B(exp(j teta)) public static ArrayList<Double> Argu (double ro, double phi) { ArrayList<NombreComplexe> val=Calcul( ro, phi);

Piozin Anas -MAM4 TNS


ArrayList<Double> arg=new ArrayList<Double>(); NombreComplexe a= new NombreComplexe(1,1); for (int i=0;i<val.size();i++) { double b=a.argument(val.get(i)); arg.add(b); } return arg; } // Mthode qui calcule teta variant de -PI PI public static ArrayList<Double> tetan () { ArrayList<Double> teta=new ArrayList<Double>(); for(double n=0;n<100;n++) { double t=((n-50)/100)*2*Math.PI; //System.out.println(t+"\n"); teta.add(t); } return teta; } // Mthode qui cre et stocke les valeurs ncessaire pour le gnuplot public static void fichier(double ro, double phi, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> teta=tetan(); ArrayList<Double> mod= Module( ro, phi); ArrayList<Double> arg= Argu(ro, phi); for (int i=0;i<teta.size();i++) { //System.out.println(teta.get(i)); t1.write(teta.get(i)+" "+mod.get(i)); t1.newLine(); t2.write(teta.get(i)+" "+arg.get(i)); t2.newLine();

} t1.close(); t2.close(); }

// Le Test public static void main(String[] args) throws IOException { fichier(1,Math.PI/4,"Test1","Test2"); } }

Piozin Anas -MAM4 TNS

import java.io.File; import java.io.IOException; import java.util.*; public class Filtre2 { /** * Cette classe permet de calculer l'amplitude et la phase grce la mthode de rsolution directe * de la rponse impulsionnelle d'un filtre du deuxime ordre lorsqu'on lui a mis en entre un signal sinusodal. * @autor piozin */ // Calcul de x(t) public static ArrayList<Double> Entre(double freq, int l) { ArrayList<Double> x= new ArrayList<Double>(); for (int i=0;i<l;i++){ double c= Math.cos(freq*i); x.add(c); } return x; } //Calcul de y(t) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double b1=-2*ro*Math.cos(phi); double b2=ro*ro; l.add(b1); l.add(b2); return l; } // Mthode qui stocke les valeurs de y(t) public static ArrayList<Double> Sortie(double freq, int l,double ro, double phi) { ArrayList<Double> y=new ArrayList<Double>(); ArrayList<Double> z=Entre(freq, l); double b1=-2*ro*Math.cos(phi); double b2=ro*ro; double d=0; y.add(d); y.add(d); for (int i=2;i<l;i++) { double c=z.get(i)+b1*z.get(i-1)+b2*z.get(i-2); y.add(c); } return y;

Piozin Anas -MAM4 TNS


} // Mthode qui stocke les valeurs du temps public static ArrayList<Double> temps(int l) { ArrayList<Double> t=new ArrayList<Double>(); for (double i=0;i<l;i++) { t.add(i); } return t; } // Mthode qui constuit les fichiers public static void fichier(double ro, double phi, int l, double freq, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=temps(l); ArrayList<Double> a= Entre( freq, l); ArrayList<Double> b= Sortie(freq,l,ro, phi); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); } // Calculer Amplitude, Phase de y public static ArrayList<Double> mesure(double freq, double ro, double phi, int l) { ArrayList<Double> mes=new ArrayList<Double>(); ArrayList<Double> sort= Sortie(freq,l,ro,phi); ArrayList<Double> t=temps(l); double double double double s1=sort.get(10); s2=sort.get(11); t1=t.get(10); t2=t.get(11);

// TEST avec s(t)=5*cos(wt+pi/3) //double s1=-5/2.; //double s2=5*Math.sqrt(3)/2; //double t1=2; //double t2=3; double u=(((s1*Math.sin(freq*t2))(s2*Math.sin(freq*t1)))/Math.sin(freq)); double v=-(((s1*Math.cos(freq*t2))(s2*Math.cos(freq*t1)))/Math.sin(freq)); double a=Math.sqrt(u*u+v*v); double phase=Math.atan2(v,u); mes.add(a);

Piozin Anas -MAM4 TNS


mes.add(phase); return mes; } //Calcule le module de y(t) public static ArrayList<Double> mesureAmpli(double ro, double phi, int l) ArrayList<Double> ampli=new ArrayList<Double>(); //Gestion de la frquence gale 0 (le u et v non dfinit) //ArrayList<Double> z=Sortie(0, l, ro, phi); //Double c=z.get(10); //ampli.add(c); // for (double n=1;n<100;n++) { if (n!=50) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); ampli.add(a.get(0)); } } return ampli;

// Calcule la phase de y(t) public static ArrayList<Double> mesurePhase(double ro, double phi, int l) ArrayList<Double> phase=new ArrayList<Double>(); for (double n=1;n<100;n++) { if (n!=50) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } } return phase; } public static ArrayList<Double> teta() { ArrayList<Double> tet=new ArrayList<Double>(); for (double n=1;n<100;n++) { if (n!=50) { double freq=((n-50)/100)*2*Math.PI; tet.add(freq); } } } return tet;

public static void fichier1(double ro, double phi, int l, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2);

Piozin Anas -MAM4 TNS


ArrayList<Double> t=teta(); ArrayList<Double> a= mesureAmpli( ro, phi, l); ArrayList<Double> b= mesurePhase( ro, phi, l); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); } public static void main (String[]args) throws IOException{ fichier(1,Math.PI/3, 20 ,Math.PI/4,"Test3","Test4"); ArrayList<Double> mes=mesure(Math.PI/2, 1, Math.PI/4,20); fichier1(1,Math.PI/4,20,"Test5","Test6"); } }

import java.io.File; import java.io.IOException; import java.util.*; public class MoindreCarreb { /** * Cette classe permet de calculer l'amplitude et la phase grce la mthode des moindres carres * de la rponse impulsionnelle d'un filtre du deuxime ordre lorsqu'on lui a mis en entre un signal sinusodal. * @autor piozin */ // Calcul de x(t) public static ArrayList<Double> Entre(double freq, int l) { ArrayList<Double> x= new ArrayList<Double>(); for (int i=0;i<l;i++){ double c= Math.cos(freq*i); x.add(c); } return x; } //Calcul de y(t) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double b1=-2*ro*Math.cos(phi); double b2=ro*ro; l.add(b1); l.add(b2); return l;

Piozin Anas -MAM4 TNS


} // Mthode qui stocke les valeurs de y(t) public static ArrayList<Double> Sortie(double freq, int l,double ro, double phi) { ArrayList<Double> y=new ArrayList<Double>(); ArrayList<Double> z=Entre(freq, l); double b1=-2*ro*Math.cos(phi); double b2=ro*ro; y.add(0.); y.add(0.); for (int i=2;i<l;i++) { double c=z.get(i)+b1*z.get(i-1)+b2*z.get(i-2); y.add(c); } return y; } // Mthode qui stocke les valeurs du temps public static ArrayList<Double> temps(int l) { ArrayList<Double> t=new ArrayList<Double>(); for (double i=0;i<l;i++) { t.add(i); } return t; } public static ArrayList<Double> mesure (double freq, double ro, double phi, int l) { ArrayList<Double> mes=new ArrayList<Double>(); ArrayList<Double> sort= Sortie(freq,l,ro,phi); ArrayList<Double> t=temps(l); double A=0; double B=0; double C=0; double D=0; double E=0; for (int i=0;i<l;i++) { double a= sort.get(i)* Math.cos(freq*t.get(i)); double b=Math.cos(freq*t.get(i))* Math.cos(freq*t.get(i)); double c=Math.cos(freq*t.get(i))* Math.sin(freq*t.get(i)); double d=sort.get(i)*Math.sin(freq*t.get(i)); double e=Math.sin(freq*t.get(i))*Math.sin(freq*t.get(i)); A+=a; B+=b; C+=c; D+=d; E+=e; } double v=(C*A-B*D)/(C*C-B*E); double u=(D*C-A*E)/(C*C-E*B); double a=Math.sqrt(u*u+v*v); double phase=Math.atan2(v,u); mes.add(a); mes.add(phase);

Piozin Anas -MAM4 TNS


return mes; } { public static ArrayList<Double> mesureAmpli(double ro, double phi, int l) ArrayList<Double> ampli=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); ampli.add(a.get(0)); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure(freq,ro,phi,l); ampli.add(a.get(0)); } } { return ampli;

public static ArrayList<Double> mesurePhase(double ro, double phi, int l) ArrayList<Double> phase=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } return phase; } public static ArrayList<Double> teta() { ArrayList<Double> tet=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; tet.add(freq); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; tet.add(freq); }

Piozin Anas -MAM4 TNS


return tet; }

public static void fichier1(double ro, double phi, int l, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=teta(); ArrayList<Double> a= mesureAmpli( ro, phi, l); ArrayList<Double> b= mesurePhase( ro, phi, l); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); } public static void main (String[]args) throws IOException{ fichier1(1,Math.PI/4,50,"Test7","Test8"); } }

import java.util.*; import java.io.*;

public class Rcursif { /** * Cette classe permet de calculer l'amplitude et la phase grce la mthode de rsolution directe * de la rponse impulsionnelle d'un filtre rcursif du deuxime ordre lorsqu'on lui a mis en entre un signal sinusodal. * @autor piozin */ // Mthode qui stocke les valeurs de b(1) et b(2) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double b1=-2*ro*Math.cos(phi);

Piozin Anas -MAM4 TNS


double b2=ro*ro; l.add(b1); l.add(b2); return l;

// Mthode qui calcule B(exp(j teta) public static ArrayList<NombreComplexe> Calcul(double ro, double phi) { ArrayList<Double> l= Filtre(ro,phi); double b1=l.get(0); double b2=l.get(1); ArrayList<NombreComplexe> valeur=new ArrayList<NombreComplexe>(); for (double n=1;n<100;n++) { double teta=((n-50)/100)*2*Math.PI; double a=1.+b1*Math.cos(teta)+b2*Math.cos(2*teta); double b=b1*Math.sin(teta)+b2*Math.sin(2*teta); NombreComplexe c=new NombreComplexe(a,b); NombreComplexe i=c.inverse(); valeur.add(i); } return valeur; } // Mthode qui calcule le module de B(exp(j teta)) public static ArrayList<Double> Module (double ro, double phi) { ArrayList<NombreComplexe> val=Calcul( ro, phi); ArrayList<Double> mod=new ArrayList<Double>(); NombreComplexe a= new NombreComplexe(1,1); for (int i=0;i<val.size();i++) { double b=a.module(val.get(i)); mod.add(b); } return mod; } // Mthode qui calcule l'argument de B(exp(j teta)) public static ArrayList<Double> Argu (double ro, double phi) { ArrayList<NombreComplexe> val=Calcul( ro, phi); ArrayList<Double> arg=new ArrayList<Double>(); NombreComplexe a= new NombreComplexe(1,1); for (int i=0;i<val.size();i++) { double b=-a.argument(val.get(i)); arg.add(b); } return arg; } // Mthode qui calcule teta variant de -PI PI public static ArrayList<Double> tetan () { ArrayList<Double> teta=new ArrayList<Double>(); for(double n=1;n<100;n++) { double t=((n-50)/100)*2*Math.PI; //System.out.println(t+"\n"); teta.add(t); } return teta;

Piozin Anas -MAM4 TNS


}

gnuplot

// Mthode qui cre et stocke les valeurs ncessaire pour le

public static void fichier(double ro, double phi, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> teta=tetan(); ArrayList<Double> mod= Module( ro, phi); ArrayList<Double> arg= Argu(ro, phi); for (int i=0;i<teta.size();i++) { //System.out.println(teta.get(i)); t1.write(teta.get(i)+" "+mod.get(i)); t1.newLine(); t2.write(teta.get(i)+" "+arg.get(i)); t2.newLine();

} t1.close(); t2.close();

} public static void main(String[] args) throws IOException { fichier(0.9,Math.PI/3,"Test11","Test12"); } }

import java.util.*; import java.io.*; public class Recursif2 { // Calcul de x(t) public static ArrayList<Double> Entre(double freq, int l) {

Piozin Anas -MAM4 TNS


ArrayList<Double> x= new ArrayList<Double>(); for (int i=0;i<l;i++){ double c= Math.cos(freq*i); x.add(c); } return x; }

public static ArrayList<Double> Entre2(int l) { ArrayList<Double>x = new ArrayList<Double>(); x.add(0.); x.add(0.); x.add(1.); for (int i=3;i<l;i++) { x.add(0.); } return x; } //Calcul de y(t) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double a1=-2*ro*Math.cos(phi); double a2=ro*ro; l.add(a1); l.add(a2); return l; } // Mthode qui stocke les valeurs de y(t) public static ArrayList<Double> Sortie( double freq,int l,double ro, double phi) { ArrayList<Double> y=new ArrayList<Double>(); ArrayList<Double> z=Entre2(l); double a1=-2*ro*Math.cos(phi); double a2=ro*ro; double d=0.; y.add(d); y.add(d); for (int i=2;i<l;i++) { double c=z.get(i)-a1*y.get(i-1)-a2*y.get(i-2); y.add(c); } return y; } // Mthode qui stocke les valeurs de y(t) public static ArrayList<Double> Sortie2( double freq,int l,double ro, double phi) { ArrayList<Double> y=new ArrayList<Double>();

Piozin Anas -MAM4 TNS


ArrayList<Double> z=Entre(freq,l); double a1=-2*ro*Math.cos(phi); double a2=ro*ro; double d=0.; y.add(d); y.add(d); for (int i=2;i<l;i++) { double c=z.get(i)-a1*y.get(i-1)-a2*y.get(i-2); y.add(c); } return y; } // Mthode qui stocke les valeurs du temps public static ArrayList<Double> temps(int l) { ArrayList<Double> t=new ArrayList<Double>(); for (double i=0.;i<l;i++) { t.add(i); } } return t;

// Mthode qui constuit les fichiers public static void fichier(double ro, double phi, int l, double freq, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=temps(l); ArrayList<Double> a= Entre( freq,l); ArrayList<Double> b= Sortie2(freq,l,ro, phi); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); }

Piozin Anas -MAM4 TNS


// Mthode qui constuit les fichiers public static void fichier2(double ro, double phi, int l, double freq, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=temps(l); ArrayList<Double> a= Entre2(l); ArrayList<Double> b= Sortie(freq,l,ro, phi); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); }

// Calculer Amplitude, Phase de y public static ArrayList<Double> mesure(double freq, double ro, double phi, int l) { ArrayList<Double> mes=new ArrayList<Double>(); ArrayList<Double> sort= Sortie2(freq,l,ro,phi); ArrayList<Double> t=temps(l); double double double double s1=sort.get(69); s2=sort.get(70); t1=t.get(69); t2=t.get(70);

// TEST avec s(t)=5*cos(wt+pi/3) //double s1=-5/2.; //double s2=5*Math.sqrt(3)/2; //double t1=2; //double t2=3; double u=(((s1*Math.sin(freq*t2))(s2*Math.sin(freq*t1)))/Math.sin(freq)); double v=(((s1*Math.cos(freq*t2))(s2*Math.cos(freq*t1)))/Math.sin(freq)); double a=Math.sqrt(u*u+v*v);

Piozin Anas -MAM4 TNS


double phase=Math.atan2(v,u); mes.add(a); mes.add(phase); return mes; } //Calcule le module de y(t) public static ArrayList<Double> mesureAmpli(double ro, double phi, int l) ArrayList<Double> ampli=new ArrayList<Double>(); //Gestion de la frquence gale 0 (le u et v non dfinit) //ArrayList<Double> z=Sortie(0, l, ro, phi); //Double c=z.get(10); //ampli.add(c); // for (double n=1;n<100;n++) { if (n!=50) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); ampli.add(a.get(0)); } }

return ampli; } // Calcule la phase de y(t) public static ArrayList<Double> mesurePhase(double ro, double phi, int l) ArrayList<Double> phase=new ArrayList<Double>(); for (double n=1;n<100;n++) { if (n!=50) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } } return phase; } public static ArrayList<Double> teta() { ArrayList<Double> tet=new ArrayList<Double>(); for (double n=1;n<100;n++) { if (n!=50) {

Piozin Anas -MAM4 TNS


} } } double freq=((n-50)/100)*2*Math.PI; tet.add(freq);

return tet;

public static void fichier1(double ro, double phi, int l, String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=teta(); ArrayList<Double> a= mesureAmpli( ro, phi,l); ArrayList<Double> b= mesurePhase( ro, phi,l); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); }

public static void main (String[]args) throws IOException{ fichier(0.9,Math.PI/3, 100 ,2*Math.PI/100,"Test13","Test14"); fichier2(0.9,Math.PI/3, 100 ,2*Math.PI/100,"Test20","Test21"); //ArrayList<Double> mes=mesure(Math.PI/2, 1, Math.PI/4,20); fichier1(0.9,Math.PI/3,100,"Test15","Test16");

} }

import java.io.File; import java.io.IOException; import java.util.ArrayList;

Piozin Anas -MAM4 TNS


public class RMC { /** * Cette classe permet de calculer l'amplitude et la phase grce la mthode des moindres carres * de la rponse impulsionnelle d'un filtre rcursif du deuxime ordre lorsqu'on lui a mis en entre un signal sinusodal. * @autor piozin */ // Calcul de x(t) public static ArrayList<Double> Entre(double freq, int l) { ArrayList<Double> x= new ArrayList<Double>(); for (int i=0;i<l;i++){ double c= Math.cos(freq*i); x.add(c); } return x; } // Calcul de y(t) public static ArrayList<Double> Filtre(double ro, double phi) { ArrayList<Double> l=new ArrayList<Double>(); double a1=-2*ro*Math.cos(phi); double a2=ro*ro; l.add(a1); l.add(a2); return l; }

//

Mthode qui stocke les valeurs de y(t) public static ArrayList<Double> Sortie( double freq,int l,double ro, double phi) { ArrayList<Double> y=new ArrayList<Double>(); ArrayList<Double> z=Entre(freq,l); double a1=-2*ro*Math.cos(phi); double a2=ro*ro; double d=0.; y.add(d); y.add(d); for (int i=2;i<l;i++) { double c=z.get(i)-a1*y.get(i-1)-a2*y.get(i-2); y.add(c); } return y; }

Piozin Anas -MAM4 TNS


// Mthode qui stocke les valeurs du temps public static ArrayList<Double> temps(int l) { ArrayList<Double> t=new ArrayList<Double>(); for (double i=0;i<l;i++) { t.add(i); } return t; } public static ArrayList<Double> mesure (double freq, double ro, double phi, int l) { ArrayList<Double> mes=new ArrayList<Double>(); ArrayList<Double> sort= Sortie(freq,l,ro,phi); ArrayList<Double> t=temps(l); double A=0; double B=0; double C=0; double D=0; double E=0; for (int i=0;i<l;i++) { double a= sort.get(i)* Math.cos(freq*t.get(i)); double b=Math.cos(freq*t.get(i))* Math.cos(freq*t.get(i)); double c=Math.cos(freq*t.get(i))* Math.sin(freq*t.get(i)); double d=sort.get(i)*Math.sin(freq*t.get(i)); double e=Math.sin(freq*t.get(i))*Math.sin(freq*t.get(i)); A+=a; B+=b; C+=c; D+=d; E+=e; } double v=(C*A-B*D)/(C*C-B*E); double u=(D*C-A*E)/(C*C-E*B); double a=Math.sqrt(u*u+v*v); double phase=Math.atan2(v,u); mes.add(a); mes.add(-phase); return mes; } { public static ArrayList<Double> mesureAmpli(double ro, double phi, int l) ArrayList<Double> ampli=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l);

Piozin Anas -MAM4 TNS


ampli.add(a.get(0)); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure(freq,ro,phi,l); ampli.add(a.get(0)); } } { return ampli;

public static ArrayList<Double> mesurePhase(double ro, double phi, int l) ArrayList<Double> phase=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; ArrayList<Double> a=mesure( freq, ro, phi, l); phase.add(a.get(1)); } return phase; } public static ArrayList<Double> teta() { ArrayList<Double> tet=new ArrayList<Double>(); for (double n=1;n<50;n++) { double freq=((n-50)/100)*2*Math.PI; tet.add(freq); } for (double n=51;n<100;n++) { double freq=((n-50)/100)*2*Math.PI; tet.add(freq); } return tet; }

public static void fichier1(double ro, double phi, int l, String S1, String S2) throws IOException {

Piozin Anas -MAM4 TNS


File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Double> t=teta(); ArrayList<Double> a= mesureAmpli( ro, phi, l); ArrayList<Double> b= mesurePhase( ro, phi, l); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine();

} t1.close(); t2.close(); }

public static void main (String[]args) throws IOException{ fichier1(0.9,Math.PI/3,50,"Test17","Test18"); } } public class NombreComplexe { /** La classe NombreComplexe permet de crer partir de deux nombres rels un nombre complexe. * ELle permet aussi de faire les oprations courantes sur les nombres complexes (module, argument * produit, soustraction, inverse) * @autor:piozin */ // Les attributs protected double partieReelle; protected double partieImaginaire; // Le constructeur public NombreComplexe(double r, double i) { partieReelle = r; partieImaginaire = i; } // Le String to Sting() public String toString() { return partieReelle+"+"+partieImaginaire+"i"; } //Les getteurs public double getPartieReelle(){ return partieReelle; }

Piozin Anas -MAM4 TNS


public double getPartieImaginaire() { return partieImaginaire; } //ajouter deux complexes /** Cette mthode permet de faire l'addition de deux nombres

complexes.

* Elle retourne un nombre complexe. */ public NombreComplexe ajouterComplexe(NombreComplexe a, NombreComplexe b) { double ra=a.getPartieReelle(); double rb=b.getPartieReelle(); double ia=a.getPartieReelle(); double ib=b.getPartieImaginaire(); NombreComplexe c=new NombreComplexe(ra+rb,ia+ib); return c; } // soustraire deux complexes /** Cette mthode permet de faire la soustraction de deux nombres complexes. * Elle retourne un nombre complexe. */ public NombreComplexe soustraireComplexe(NombreComplexe a, NombreComplexe b) { double ra=a.getPartieReelle(); double rb=b.getPartieReelle(); double ia=a.getPartieReelle(); double ib=b.getPartieImaginaire(); NombreComplexe c=new NombreComplexe(ra-rb,ia-ib); return c; } // Produit de deux complexes /** Cette mthode permet de faire le produit de deux nombres complexes. * Elle retourne un nombre complexe. */ public NombreComplexe produit(NombreComplexe a, NombreComplexe b) double double double double ra=a.getPartieReelle(); rb=b.getPartieReelle(); ia=a.getPartieReelle(); ib=b.getPartieImaginaire();

ia*ib,ra*ib+ia*rb); }

NombreComplexe c=new NombreComplexe(ra*rbreturn c;

Piozin Anas -MAM4 TNS


//module d'un nombre complexe /** Cette mthode permet de faire le module d'un nombre complexe. * Elle retourne un nombre rel. */ public double module (NombreComplexe a) { double r=a.getPartieReelle(); double b=a.getPartieImaginaire(); double c=r*r+b*b; } return Math.sqrt(c);

//argument d'un nombre complexe /** Cette mthode permet de faire l'argument d'un nombre complexe. * Elle retourne un nombre rel. */ public double argument (NombreComplexe a) { double r=a.getPartieReelle(); double b=a.getPartieImaginaire(); double c=Math.atan2(b, r); return c; } //inverse d'un nombre complexe /** Cette mthode permet de calculer l'inverse d'un nombre complexe. * Elle retourne un nombre complexe. */ public NombreComplexe inverse() {

double re=this.partieReelle / (this.partieReelle*this.partieReelle+this.partieImaginaire*this.partieImaginaire ); double im=-this.partieImaginaire/ (this.partieReelle*this.partieReelle+this.partieImaginaire*this.partieImaginaire ); NombreComplexe c= new NombreComplexe (re,im); return c; } } import java.io.File; import java.io.IOException; import java.util.ArrayList;

public class TransfoD { public static ArrayList<Double> entree(double freq,int n) { ArrayList<Double> x=new ArrayList<Double>(); for (int i=0;i<n;i++) { double a=Math.cos(freq*i); x.add(a);

Piozin Anas -MAM4 TNS


}

//for (int i=0;i<n/2;i++) { // double a =0; // x.add(a); //} //for (int i=n/2;i<n;i++) { // double a =1; // x.add(a); //} return x;

public static ArrayList<NombreComplexe> discrete(double freq, int n) { ArrayList<Double> entree=entree(freq,n); ArrayList<NombreComplexe> a= new ArrayList<NombreComplexe>(); double T=entree.size(); Double re=0.; Double im=0.; for (int k=0;k<T;k++) { for (int i=0;i<T;i++) { re=re+1/T*(entree.get(i))*Math.cos(2*Math.PI*i*k/T); im=im-1/T*(entree.get(i))*Math.sin(2*Math.PI*i*k/T); } NombreComplexe c= new NombreComplexe(re,im); a.add(c); re=0.; im=0.; } return a; } public static ArrayList<Double> mesureAmpli(double freq,int n) { ArrayList<NombreComplexe> discrete=discrete(freq,n); ArrayList<Double> ampli=new ArrayList<Double>(); double s=discrete.size(); NombreComplexe c=new NombreComplexe(1,1); for (int i=0;i<s;i++) { double a=c.module(discrete.get(i)); ampli.add(a); } return ampli; } public static ArrayList<Double> mesurePhase(double freq,int n) { ArrayList<NombreComplexe> discrete=discrete(freq,n); ArrayList<Double> phase=new ArrayList<Double>(); double s=discrete.size();

Piozin Anas -MAM4 TNS


NombreComplexe c=new NombreComplexe(1,1); for (int i=0;i<s;i++) { double a=c.argument(discrete.get(i)); phase.add(a); } return phase; } public static ArrayList<Integer> teta(double freq,int n) { ArrayList<Double> entree=entree(freq,n); int T=entree.size(); ArrayList<Integer> a= new ArrayList<Integer>(); for (int i=0;i<(T-1);i++) { a.add(i); } return a;

public static void fichier1(double freq,int n,String S1, String S2) throws IOException { File f1=new File(S1); File f2=new File(S2); TextFileWriter t1=new TextFileWriter(f1); TextFileWriter t2=new TextFileWriter(f2); ArrayList<Integer> t=teta(freq,n); ArrayList<Double> a= mesureAmpli(freq,n); ArrayList<Double> b= mesurePhase(freq,n); for (int i=0;i<t.size();i++) { t1.write(t.get(i)+" "+a.get(i)); t1.newLine(); t2.write(t.get(i)+" "+b.get(i)); t2.newLine(); } t1.close(); t2.close(); } public static void main (String[]args) throws IOException { fichier1(400,100,"Test9","Test10"); }

Vous aimerez peut-être aussi