View
65
Download
4
Category
Preview:
Citation preview
INITIATION À SCILAB Eclipse à Chéraute
Scilab manipule essentiellement des vecteurs et des matrices réelles ou complexes.Pour rentrer un nombre complexe, on utilise la syntaxe suivante (on peut se passer des crochets []pour rentrer un scalaire, donc il faut des crochets pour un vecteur) :
>c=1 + 2*%i // scalaire complexec =1. + 2.i
>Y = [ 1 + %i , 2 + 3*%i ; 1 , %i] // matrice 2x2 complexeY =! 1. + i 2. + 3.i !! 1. i !
>A=[1 1 1;2 4 8;3 9 27] // on sépare les éléments d'une ligne avec des espaces ou des « , »A =! 1. 1. 1. !! 2. 4. 8. !! 3. 9. 27. !>x = linspace(0,1,5) // je forme un vecteur ligne, 5 valeurs répartie linéairement de 0 à 1 .
>x = linspace(0,1,5)’ // je forme un vecteur colonne grâce à « ' », 5 valeurs répartie linéairement de 0 à 1 . x =! 0. !! 0.25 !! 0.5 !! 0.75 !! 1. !
>a=[0:0.2:1]//Je forme un vecteur ligne a=[début=0:pas=0.2:Fin=1] a = ! 0. 0.2 0.4 0.6 0.8 1. ! >b=[0:0.2:1]'////Je forme un vecteur colonne grâce à « ' » b=[début=0:pas=0.2:Fin=1]' b = ! 0. !! 0.2 !! 0.4 !! 0.6 !! 0.8 !! 1. !
MULTIPLICATION ET DIVISION MATRICIELLE ET CLASSIQUE //« * » est la multiplication matricielle et « .* » est la multiplication élément par élément :
//" / » est la « division matricielle1 » et « ./ » est la division élément par élément :
//Attention au piège suivant : « 1./x » est considéré comme « 1. / x » et il faut mettre
//un espace entre « 1 » et « . » pour utiliser la division élément par élément : « 1 ./x ».
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 1 / 51
INITIATION À SCILAB Eclipse à Chéraute
Opérations sur les matrices(connaissance indispensable pour les courbes 2D, 3D multiples):Beaucoup d'autres exemples ici: http://www.scilab.org/doc/Scilabpratique/node32.html
Addition de matrices: Uniquement possible si les matrices ont même dimension .
1>x=R*cos(t) x = ! 2. 0.6180340 1.618034 1.618034 0.6180340 2. !1>y=R*sin(t) y = ! 0. 1.902113 1.1755705 1.1755705 1.902113 4.898E16 !1>z1=R*sin(2*t)+cos(2*t) z1 = ! 1. 0.3665535 1.593096 2.21113 1.9845875 1. !1>x+y //l' addition des matrices(1x6) x et y donne une matrice (1x6) ans = ! 2. 2.520147 0.4424635 2.7936045 1.284079 2. !
Produits de matrices X*Y : Uniquement possible si nb Col X = nb Lign Y
Avec les mêmes matrices x(1x6) et y(1x6) précédentes :1>z=x'*y//on transforme x en matrice 1 col (6x1) avec le « ' », pour respecter la compatibilité pour le produit . z = column 1 to 5 ! 0. 3.8042261 2.351141 2.351141 3.8042261 !! 0. 1.1755705 0.7265425 0.7265425 1.1755705 !! 0. 3.0776835 1.902113 1.902113 3.0776835 !! 0. 3.0776835 1.902113 1.902113 3.0776835 !! 0. 1.1755705 0.7265425 0.7265425 1.1755705 !! 0. 3.8042261 2.351141 2.351141 3.8042261 ! column 6 ! 9.797E16 !! 3.027E16 !! 7.926E16 !! 7.926E16 !! 3.027E16 !! 9.797E16 !
Concaténation de matrices : 1>A11=1
A11 = 1.
1>A12=[2 3 4] A12 =
! 2. 3. 4. !
1>A21=[1;1;1] A21 = ! 1. !! 1. !! 1. !
1>A22=[4,9,16;8,27,64;16,81,256] A22 =
! 4. 9. 16. !! 8. 27. 64. !
! 16. 81. 256. !1>A=[A11,A12;A21,A22] // les 4 matrices concaténées . Le ; est le séparateur de lignes. ','» ou ' ' sépare les colonnes. A = ! 1. 2. 3. 4. !! 1. 4. 9. 16. !! 1. 8. 27. 64. !! 1. 16. 81. 256. !
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 2 / 51
INITIATION À SCILAB Eclipse à Chéraute
Pour rechercher une commande ou sa syntaxe, des exemples, ... :
1/ Dans scilex, cliquer sur Help > Help Browser> icône de recherche/arborescence>taper « lemotachercher »
exemple: fft
2/ Dans l'aide en ligne : http://www.scilab.org/product/manfrscilab4.1/accueil.html cliquer sur la commande recherchée
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 3 / 51
INITIATION À SCILAB Eclipse à Chéraute
Pour obtenir une démonstration de la plupart des fonctions1. Démarrer scilab, il apparaît la fenêtre principale (le Prompt), ici appelé scilex (fenêtre
d'exécution de scilab)2. Demos> fenêtre listant les démos: on choisis le type de démonstration. Ici Graphics> 2D
3D3. On choisit la démonstration:ici « param3d »4. on clique sur Ok ;5. Dans la fenêtre scilex, apparaît souvent le script qui a permis de réaliser la
démonstration. 6. Fermer les fenêtre démonstrations(cancel)7. Cliquer sur Editor, et copier/coller le script dans la fenêtre d'édition :
ici: Demo of param3dt=0:0.1:5*%pi;param3d(sin(t),cos(t),t/10,35,45,'X@Y@Z',[2,4]);On peut ainsi modifier ce script et donc essayer les fonctions, pour les adapter à ses besoins . Il suffit de sélectionner à la souris(bouton gauche),la zone apparaît en noir, puis de coller dans un éditeur de texte quelconque, en cliquant sur le bouton central/molette, ou les 2 Boutons en même temps, s'il est manquant .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 4 / 51
INITIATION À SCILAB Eclipse à Chéraute
Fenêtre principale et Script Tracé de la fonction sinus(x) de période 2 :
D'après :
http://88.191.24.164:8081/docenligne/ressources/numerique/traitementsignalimages/laboratoirescientifiquegratuitscilab/intro_scilab.ppt/view
1. Ouvrir scilab, par exemple en console/terminal sous linux, en tapant simplement scilab.
Ici, on a utilisé scilab (fenêtre principale d'acceuil) comme calculatrice pour calculer (1+1) puis 4
.2. Cliquer sur le bouton de Menu ÉDITOR3. Taper le script dans l'éditeur de scilab(SCIPAD) qui s'ouvre, ou le copier/coller depuis un éditeur de texte .4. Sélectionner les lignes de script choisies puis EXECUTE > EVALUATE SELECTION OU Ctrl+Y
Pour copier de la fenêtre de commande silex vers un éditeur de texte(scipad, vim,kwrite...):C'est une méthode utilisable pour copier d'un terminal/shell vers un éditeur . :Sélectionner la zone à copier> clic Bouton central de la souris ou les 2 boutons (souris 2 boutons)dans l'éditeur ou traitement de texte . 3>u1=umax*sin(2*%pi*t+phi) u1 = ! 2.8284271 !! 2.8287825 !
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 5 / 51
INITIATION À SCILAB Eclipse à Chéraute
Introduction aux commandes et à l'organisation de Scilab.D'après: http://www.saphir-control.fr/articles/plot%20avance_lm30/lm_article.htmlet ici , très bonne introduction plus simple: http://cermics.enpc.fr/scilab_new/site/Initiation/intro_scilab_2/intro_scilab_2.htmlou encore, pas à pas avec beaucoup d'exemples: Nancy E.S.I.A.L.Université Henri Poincaré_Email : Bruno.Pincon@iecn.u-nancy.fr
Scilab : Courbes et Surfaces
On peut copier/coller la fenêtre graphique par Alt+PrintScreen ou avec ksnapshot(capture d 'écran)Pour tester chaque ligne d'instruction: la sélectionner puis Execute dans Scipad ou la copier/coller vers Scilex .
1. Tracé des courbes de fonctions y=f(x)
2. Plusieurs courbes avec toutes les données d'ordonnées y qui correspondent à la même discrétisation des abscisses x .Les coordonnées x, y sont respectivement les éléments du vecteur ligne x et des colonnes de y .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 6 / 51
INITIATION À SCILAB Eclipse à Chéraute
CourbesLa commande Plot, très simple .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 7 / 51
INITIATION À SCILAB Eclipse à Chéraute
Tracé rapide de courbes avec plothttp://cermics.enpc.fr/scilab_new/site/Initiation/intro_scilab_2/intro_scilab_2.html
Script à taper dans l’éditeur scilab :
//Tracé rapide de courbes avec plot;//Définition du vecteur ligne des valeurs x (abscisses)x=(0:5e-2:10);//0 départ, 0.1 pas , 10 fin y1=10*exp(-x/4).*sin(x);//calcul du vecteur ligne y1 (ordonnée)y2=10*exp(-x/6).*sin(x);y3=10*exp(-x/2).*sin(x);y4=10*exp(-(sin(x/4))/0.5).*sin(x).*cos(10*x);//(.*) est la multiplication élément par élément des vecteurs et non la multiplication matricielle (*) par défaut. clf;plot(x,y1,'b.--o');//voir l’aide en ligne pour ‘linespec’plot(x,y2,'r.-*');plot(x,y3,'g.--+');plot(x,y4,'k.-x');xtitle('ESSAI DE LA FONCTION SCILAB plot y1à4=10*exp(-x/to).*sin(x); ... y4=10*exp(-(sin(x/4))/0.5).*sin(x).*cos(10*x)','x','y1à4(x)');//mettre une légende en haut à D 'ur'...//avec le style de ligne , ici couleur car > 0...//2 bleu, 3 vert, 5 rouge, 1 noir legends(['o y1';'* y2';'+ y3';'x y4'],[2;5;3;1],'ur');xgrid();//Mettre la grille sur les graduations principales
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 8 / 51
INITIATION À SCILAB Eclipse à Chéraute
TRACÉ DE FONCTIONS CONTENANT DES FRACTIONShttp://www.scilab.org/lycee/Familiarisation.pdf
//« * » est la multiplication matricielle et « .* » est la multiplication élément par élément ://" / » est la « division matricielle1 » et « ./ » est la division élément par élément ://Attention au piège suivant : « 1./x » est considéré comme « 1. / x » et il faut mettre//un espace entre « 1 » et « . » pour utiliser la division élément par élément : « 1 ./x ».
EXEMPLE TRACÉ DE f(t) = 2.t / (1+1/(t²))
//[début:pas:fin]'t=[ 10:0.1:8]';function [u] = f(t);//« * » est la multiplication matricielle et « .* » est la multiplication élément par élément ://" / » est la « division matricielle1 » et « ./ » est la division élément par élément ://Attention au piège suivant : « 1./x » est considéré comme « 1. / x » et il faut mettre//un espace entre « 1 » et « . » pour utiliser la division élément par élément : « 1 ./x ».u=2*t ./(1+1 ./(t^2));endfunction;plot2d(t,f(t));
Export de graphiques avec scilab: depuis la fenêtre graphique>File>export
Le format postscript (.eps) est lisible par kghostview, kpdf, notamment, malheureusement verticalement .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 9 / 51
INITIATION À SCILAB Eclipse à Chéraute
CourbesLa commande Plot et la synthèse de Fourier de signaux .
Reconstitution du signal carré symétrique.La phase des harmoniques est nulle .
Reconstitution du signal carré symétrique.La phase des harmoniques est nulle .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 10 / 51
INITIATION À SCILAB Eclipse à Chéraute
Reconstitution du signal carré symétrique.La phase des harmoniques est /2.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 11 / 51
INITIATION À SCILAB Eclipse à Chéraute
Plusieurs courbes, plot2d, les coordonnées des points sont des éléments de matrices M et N :
M=[(0:0.1:10)' (5:0.1:15)' (10:0.1:20)'];//vecteurs colonnes, marqués d'une « ' », (0;0,1;...10); (5;5,1;..15);(10;10,1;..;20)N=[0.1*M(:,1).^2 log(M(:,2)) 0.5*M(:,3)];xbasc();plot2d(M,N);
M=[(0:0.1:10)' (5:0.1:15)' (10:0.1:20)'];N=[0.1*M(:,1)^2 0.5*M(:,2) log(1.5*M(:,3))];//vecteurs colonne 0,1M ²; 0,5M et log(1,5M), calculé à partir des vecteurs colonnes de la matrice M dans cet ordre . xbasc();plot2d(M,N);
On a inversé les colonnes 0,5M et log(1,5M)dans la matrice N . Les couleurs sont attribuées automatiquement .
M=[(0:0.1:10)' (5:0.1:15)' (10:0.1:20)'];
N=[7*sin(M(:,1)) 0.5*M(:,2)log(1.5*M(:,3))];
xbasc();plot2d(M,N);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 12 / 51
INITIATION À SCILAB Eclipse à Chéraute
Plusieurs courbes, plot2d, signal carré avec squarewave
t=(0:0.1:5*%pi)';// t est mis en vecteur colonne « ' »xbasc() // effacer le graphique précédent . xtitle(['plot2d de signaux de période 2pi:2*sin(t), 1.5*squarewave(t) carré alpha=0.5,squarewave(t,10)carré alpha=10%']);//on rajoute un titre au diagramme.plot2d(t,[2*sin(t),1.5*squarewave(t),squarewave(t,10)])// t en abscisse, tracé de 2*sin(t), puis, 1.5*squarewave(t) signal carré d'amplitude 1,5 symétrique;//squarewave(t,10) signal carré d'amplitude 1 de rapport cyclique 10% . +
// signaux sinusoïdaux et déphasage . t=[0:2e5:2e3]';//vecteur colonne 0 à 2e3 par pas de 2e5f=1e3;umax=4;phi=%pi/4;u=umax*sin(2*%pi*f*t+0*phi);u1=umax*sin(2*%pi*f*t+phi);u2=umax*sin(2*%pi*f*tphi);xbasc();xtitle("Harmoniques et déphasage;u=umax*sin(2*%pi*f*t+phi)","t(s)","u(phi=0),u1(phi=pi/4),u2(phi=pi/4)");plot2d(t,[u,u1,u2])//ou plot2d([t,t,t],[u,u1,u2]) //qui concatène les matrices de 3 vecteurs colonnes(abscisses 't,t,t',ordonnées'u,u1,u2')
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 13 / 51
INITIATION À SCILAB Eclipse à Chéraute
Quelques paramètres optionnels de plot2d: D'après: Une introduction à Scilab version 0.999Bruno Pinçon
● Style des marqueurs:
Attention , quand on copie/colle du document pdf « Une introduction à Scilab » , vers l'éditeur de scilab (scipad), les caractères peuvent changer, tel « ' » en « , ».
● plot2d2 permet de dessiner des fonctions en escalier● plot2d3 dessine des diagrammes en bâtons● plot2d4 trace des vecteurs flêchés entre le point n1 et le point n .
//superposer 2 courbes dont un histogramme . xbasc()X = rand(100000,1,"normal"); classes = linspace(5,5,21);histplot(classes,X)// on lui superpose le trac´e de la densit´e de N(0,1)x = linspace(5,5,60)'; y = exp(x.^2/2)/sqrt(2*%pi);plot2d(x,y, style=2, frameflag=0, axesflag=0)
// Des courbes superposees avec des abscisses differentesx1 = linspace(0,1,61)';x2 = linspace(0,1,31)';x3 = linspace(0.1,0.9,12)';y1 = x1.*(1x1).*cos(2*%pi*x1);y2 = x2.*(1x2);y3 = x3.*(1x3) + 0.1*(rand(x3)0.5); // idem a y2 avec une perturbationymin = min([y1 ; y2 ; y3]); ymax = max([y1 ; y2 ; y3]);dy = (ymax ymin)*0.05; // pour se donner une margerect = [0,ymin dy,1,ymax+dy]; // fenetre de visualisationxbasc() // effacement des graphiques precedentsplot2d(x1, y1, style=1, frameflag=5, rect=rect) // 1er appel qui impose l’´echelleplot2d(x2, y2, style=2, frameflag=0) // 2eme et 3 eme appel :plot2d(x3, y3, style=1,frameflag=0) // on utilise l’echelle precedentextitle("Des courbes superposees avec des abscisses differentes","x","y")
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 14 / 51
INITIATION À SCILAB Eclipse à Chéraute
Exemple d'utilisation de plot2d avec presque toutes les options. //Exemple d'utilisation de plot2d avec presque toutes les options. t = linspace(0,2*%pi,60)';//on discrétise l'espace des temps de 0 à 2pi en 60 pointsx1 = 2*cos(t); y1 = sin(t); // une ellipsex2 = cos(t); y2 = y1; // un cerclex3 = linspace(2,2,60)'; y3 = erf(x3); // la fct erreurMx=[x1 x2 x3];My=[y1 y2 y3];//matrices d'abscisses et d'ordonnées; Si même abscisse pour y1,y2,y3 ; Mx = x .
xmin=2;xmax=2;ymin=1;ymax=1;fenetre=[xmin,ymin,xmax,ymax];//définition taille fenêtre graphiquelegende = "ellipse@cercle@fct erreur";//legende des courbes//frameflag=4; //´echelle isométrique calculée via les max et min de Mx et My, pour cercle et ellipse,//frameflag=5; //pour calculer l'échelle à partir de rect avec adaptation éventuelle pour graduations//le style des courbes et marqueurs des points (>=0 trait continu+couleur;<0 symboles noirs)style=[1 2 8];//axesflag=5;// sans boite mais avec axes et graduations (tracés en y = 0 et x = 0)linlog="nn"; //axes des x et des y non log, donc linéaire; ln (x log, y non log); ”n” (non log) ou ”l” (log)xbasc();subplot(1,2,1);//sous fenêtre graphique 1ligne ,2 colonnes position 1plot2d(Mx,My,style=styl, frameflag=4, axesflag=5 ,rect=fenetre,leg=legende,logflag=linlog);//xtitle("l'essentiel des paramètres de plot2d","x(t)","y(t)");//valable pour une fenêtre plot2d
subplot(1,2,2);//sous fenêtre graphique 1ligne ,2 colonnes position 2x = linspace(0,2*%pi,40)';y = sin(x);yp = sin(x) + 0.1*rand(x,"normal");//perturbation gaussienneplot2d(x, [yp y], style=[8 2],frameflag=2, leg="y=sin(x)+perturbation@y=sin(x)");
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 15 / 51
INITIATION À SCILAB Eclipse à Chéraute
Adapter les échelles avec les unités , le nombre de graduations....● plotframe:
D'après aide en ligne : http://www.scilab.org/product/manfrscilab4.1/index.html
x=[0.3:0.8:27.3]'; y=rand(x); rect=[min(x),min(y),max(x),max(y)]; tics=[4,10,2,5]; // graduations:4 xintervalles et 2 yintervalles; 10 xsous intervalles; 5 y sous intervallesboite=[0,0,0.5,0.5];//taille de la boite contenant le graphique, ici xmax=0,5 x Fenêtre graphique, de même ymax;grille=[%t,%f]; //grille suivant x (verticale)titre=["My plot","x","y"]; xbasc();plotframe(rect,tics,grille,titre,boite)plot2d(x,y,2,"000");//plotframe est utilisée avec les fonctions plot2d ,... pour dessiner le cadre. //Elle doit être utilisée avant plot2d qui doit être ensuite appelée avec le mode de superposition "000".
● graduate
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 16 / 51
INITIATION À SCILAB Eclipse à Chéraute
//signaux sinusoïdaux et déphasage ;//paramètres;f=1e3;phi1=0;phi2=%pi/2u1max=1;u2max=2;//Travail à faire:Tracer uj(t) =u_{j(max)} . sin(2 . %pi .f.t+%phi_j )// discrétisation des instants (choix des instants t de calcul);t=[0:3*1e5:2e3]'; //définition des sinusoïdes (harmoniques);u1=u1max*sin(2*%pi*f*t+phi1);u2=u2max*sin(2*%pi*f*t+phi2);//définition de la fenêtre d'écran et paramètres des axes,xmin=0;xmax=2e3;ymin=1.1*u2max ; ymax=1.1* u2max;rect=[xmin,ymin,xmax,ymax];tics=[4,2,10,5]; // graduations:4 xintervalles et 2 yintervalles; 10 xsous intervalles; 5 y sous intervallesboite=[0,0,0.8,0.8];//taille de la boite contenant le graphique, ici Lmax=0,5 x LFenêtre graphique, de même Hmax;grille=[%t,%f]; //grille suivant x (verticale)et y style=[1,8];//style du tracé des courbes.titre=["signaux sinusoidaux et dephasage de u2 par rapport à u1","u1(t)","u2(t)"]; xbasc();plotframe(rect,tics,grille,titre,boite);plot2d([t t],[u1,u2],style,"000");//plotframe est utilisée avec les fonctions plot2d ,... pour dessiner le cadre. //Elle doit être utilisée avant plot2d qui doit être ensuite appelée avec le mode de superposition "000".
Pour avoir une grille : plotframe
Nécessite l'appel de plot2d avec l'option « 000 ».Ne permet plus l'option //axesflag=5;// sans boite mais
avec axes et graduations (tracés en y = 0 et x = 0)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 17 / 51
INITIATION À SCILAB Eclipse à Chéraute
x=[0:0.1:4*%pi]'; xbasc()xtitle("trace de sin(x)+x et cos(x)" , "x" , "y")plot2d([x x],[sin(x)+x cos(x)],[1,1],"121","sin(x)+x@cos(x)")//1 nous donne des croix au lieu d'une ligne continue.//"121"="abc" a=1=> légende, b=2 scilab calcule l'échelle, c=1, graduation des axes x et y
//Signaux sinusoïdaux et déphasage . t=[0:1e5:2e3]';f=1e3;phi1=0phi2=%pi/2phi3=0u1=sin(2*%pi*f*t+phi1);u2=sin(2*%pi*f*t+phi2);u3=u1+u2;xbasc();xtitle("signal sinusoïdal et dephasage", "t(s)","u(t)");plot2d(t,[u1 u2 u3])
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 18 / 51
INITIATION À SCILAB Eclipse à Chéraute
TRACÉ DE PLUSIEURS COURBES LÉGENDÉES AVEC TITRE //MODÉLISATION THERMIQUE MAISON MENDITTE //INFLUENCE DES RÉSISTANCE THERMIQUES SUR //LES PERTES THERMIQUES PAR CONDUCTIONS //À TRAVERS LES PAROIS//On utilise le modèle des résistances thermiques //Associées en dérivation avec l'hypothèse //des Tint(°C) et Text identiques pour chaque paroi. //ParamètresRmur=4; Smur=200;Rsol=4;Ssol=64;Rtoit=7;Stoit=76;Umen=1.4;Rmen=1/Umen;Smen=30;//Umen[W/(K.m²)]Tint=19; Text=-5 ; DeltaT=Tint-Text ; //Tint et Text (°C)//CalculsRthermEq=1/(1/Rmur+1/Rsol+1/Rtoit+1/Rmen);//Calcul RthermEq(K.m²/W) indicatif inutilisé dans Pth(W)Pth= DeltaT*(Smur/Rmur+Ssol/Rsol+Stoit/Rtoit+Smen/Rmen);//Pth(W) pertes thermiques par conduction dans les parois//Pth (Rthmur)Rmin=Rmur;Rmax=Rmin*1.5;Rpas=(Rmax-Rmin)/10;R = [Rmin:Rpas:Rmax];DeltaR=(R-Rmin)/Rmin*100;Pth_Rmin=DeltaT*(Smur/Rmin+Ssol/Rsol+Stoit/Rtoit+Smen/Rmen);Pth= DeltaT*(Smur./R+Ssol/Rsol+Stoit/Rtoit+Smen/Rmen);// attention à la division par R qui est un vecteur d'où "./" DeltaPthmur=abs(Pth-Pth_Rmin)/Pth_Rmin*100; //Diminution des pertes thermiques en % xgrid;//DeltaPth=abs(Pth-Pth(Rmin))/Pth(Rmin)*100; présente de curieuse erreurs de calcul (Voir à définir la fonction Pth(R) //Pth (Rthtoit)Rmin=Rtoit; Rmax=Rmin*1.5 ; Rpas=(Rmax-Rmin)/10;R = [Rmin:Rpas:Rmax];DeltaR=(R-Rmin)/Rmin*100;Pth_Rmin=DeltaT*(Smur/Rmur+Ssol/Rsol+Stoit/Rmin+Smen/Rmen);Pth= DeltaT*(Smur/Rmur+Ssol/Rsol+Stoit ./R+Smen/Rmen);// attention à la division par R qui est un vecteur d'où "./" DeltaPthtoit=abs(Pth-Pth_Rmin)/Pth_Rmin*100; //Diminution des pertes thermiques en % //Pth (Rthsol)Rmin=Rsol; Rmax=Rmin*1.5 ; Rpas=(Rmax-Rmin)/10;R = [Rmin:Rpas:Rmax];DeltaR=(R-Rmin)/Rmin*100;Pth_Rmin=DeltaT*(Smur/Rmur+Ssol/Rmin+Stoit/Rtoit+Smen/Rmen);Pth= DeltaT*(Smur/Rmur+Ssol ./R+Stoit/Rtoit+Smen/Rmen);// attention à la division par R qui est un vecteur d'où "./" DeltaPthsol=abs(Pth-Pth_Rmin)/Pth_Rmin*100; //Diminution des pertes thermiques en % //Pth (Rthmen)Rmin=Rmen; Rmax=Rmin*1.5 ; Rpas=(Rmax-Rmin)/10;R = [Rmin:Rpas:Rmax];DeltaR=(R-Rmin)/Rmin*100;Pth_Rmin=DeltaT*(Smur/Rmur+Ssol/Rsol+Stoit/Rtoit+Smen/Rmin);Pth= DeltaT*(Smur/Rmur+Ssol/Rsol+Stoit/Rtoit+Smen ./R);// attention à la division par R qui est un vecteur d'où "./" DeltaPthmen=abs(Pth-Pth_Rmin)/Pth_Rmin*100; //Diminution des pertes thermiques en %
//Tracé des courbes Pth (Rth) :clf; // clear fenêtre graphique plot(DeltaR,DeltaPthmur,'r.-s' );// "DeltaPth(DeltaRmur)" voir l’aide en ligne pour ‘linespec’plot(DeltaR,DeltaPthtoit,'k.-^');// "DeltaPth(DeltaRtoit)" , k blackplot(DeltaR,DeltaPthsol,'g.--pentagram' );// "DeltaPth(DeltaRsol)" ,g vert , m magenta. plot(DeltaR,DeltaPthmen,'b.--o');// legende "DeltaPth(DeltaRmen)"//titre, titre axe des x, titre axe y .Attention pas d'apostrophe dans le titre car c'est un séparateur !!xtitle("Diminution des pertes thermiques maison en fonction de isolation","DeltaRtherm(%)","DeltaPth(%)");//mettre une légende en haut à G 'ug'...//avec le style de ligne , ici couleur car > 0...//2 bleu, 3 vert, 5 rouge, 1 noir legends(['o DeltaPth(DeltaRmen';'* DeltaPth(DeltaRsol';'^ DeltaPth(DeltaRtoit)';'carré DeltaPth(DeltaRmur'],[2;3;1;5],'ul');xgrid();//Mettre la grille sur les graduations principales
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 19 / 51
INITIATION À SCILAB Eclipse à Chéraute
Vecteurs, incréments et fonction
Scilab manipule des vecteurs et des matrices qui sont traitées comme de multiples vecteurs lignes .
t=[0:1e5:2e3]t=[0:1e5:2e3
Script à taper ou copier/coller dans un éditeur (scipad: dans scilex>Editor)pour tracer la fonction :f(t) = sin (2**f*t+ ):
//tracé de f(t)=5sin(2pift+3pi/6); c'est donc 5cos(2pift)t=[0:1e5:2e3];// la variable vecteur t de coordonnées 0 à 2e3 par pas de 1e5f=1e3;// variable f = 1000phi=3*%pi/6;//variable phi (phase)umax=5; //valeur crête ft= umax*sin(2*%pi*f*t+phi);// variable vecteur ft
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 20 / 51
INITIATION À SCILAB Eclipse à Chéraute
FFT sous scilab
Le tracé avec les fréquences affichées est à revoir :
//tracé de f(t)=5sin(2pift+3pi/6); c'est donc 5cos(2pift)t=[0:1e5:2e3]';// la variable vecteur colonne t de coordonnées 0 à 2e3 par pas de 1e5f=1e3;// variable f = 1000phi=3*%pi/6;//variable phi (phase)umax=5; //valeur crête u1= umax*sin(2*%pi*f*t+phi);// variable vecteur ft xbasc(); //efface le graphique précédent//plot2d(t,u1) //tracé 2d avec t en abscisse et ft en ordonnée.
u2= u1+umax*sin(2*%pi*20*f*t+phi);// variable vecteur ft xbasc(); //efface le graphique précédentxtitle( 'u1= umax*sin(2*%pi*f*t+phi) et u2= u1+umax*sin(2*%pi*20*f*t+phi)','t','u2(t)')plot2d(t,[u1,u2]) //tracé 2d avec t en abscisse et u1,u2 en ordonnée.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 21 / 51
INITIATION À SCILAB Eclipse à Chéraute
FFT sous scilab
//tracé de f(t)=5sin(2pift+3pi/6); c'est donc 5cos(2pift)t=[0:1e7:2e3]';// la variable vecteur colonne t de coordonnées 0 à 2e3 par pas de 1e7f=1e3;// variable f = 1000phi=3*%pi/6;//variable phi (phase)umax=5; //valeur crête u1= umax*sin(2*%pi*f*t+phi);// variable vecteur ft xbasc(); //efface le graphique précédent//plot2d(t,u1) //tracé 2d avec t en abscisse et ft en ordonnée.
u2= u1+umax*sin(2*%pi*20*f*t+phi);// variable vecteur ft xbasc(); //efface le graphique précédentxtitle( 'u1= umax*sin(2*%pi*f*t+phi) et u2= u1+umax*sin(2*%pi*20*f*t+phi)','t','u2(t)');plot2d(t,[u1,u2]) //tracé 2d avec t en abscisse et ft en ordonnée.
//f1 =[0:1e2:2e3]';//variable fréquence de 0 à 2000 par pas de 100, en vecteur colonne.
f2 = 1 ./(t+1e6);tf= fft(u2,1);//transformée de fourier de la fonction u2xbasc();plot2d(f2,abs(tf));//tracé avec en abscisse f2 et en ordonnée, abs(tf), le spectre d'amplitude de u2.//le module de la FFT soit le spectre d'amplitude . //xbasc()//plot(abs(tf))
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 22 / 51
INITIATION À SCILAB Eclipse à Chéraute
SCILAB ET SONS
// At first we create 0.5 seconds of sound parameters.t=soundsec(0.5);// Then we generate the sound.s=sin(440*t)+sin(220*t)/2+sin(880*t)/2;xbasc()plot(t,s)[nr,nc]=size(t);xbasc()s(nc/2:nc)=sin(330*t(nc/2:nc));analyze(s);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 23 / 51
INITIATION À SCILAB Eclipse à Chéraute
D'après: http://www.celles.net/wikini/wakka.php?wiki=ScilabTraitementSignal
http://svn.berlios.de/viewcvs/*checkout*/openphysic/scilab/physique/traitement_signal/echantillonnage/shannon.sce
clear;
n=4; // 4 secondesf1=6000; // frq fondamentalfmin=20fmax=20000
rate=44100;t=soundsec(n, rate);s=cos(2*%pi*f1*t);
plot(t(1:100),s(1:100));
clear;n=4; // 4 secondesf1=6000; // frq fondamentalfmin=20fmax=20000rate=44100;t=soundsec(n, rate);s=cos(2*%pi*f1*t);xbasc();playsnd(s);//joue le son vers le haut parleur//savewave("son_sans_repliement.wav",s,rate);
analyze(s,fmin,fmax,rate);//analyse de fourier
// 2 raies// une à 6000 Hz = 6 kHz// l'autre (repliement) à 220506000 =16050 Hz = 16,05 kclear;xbasc()n=4; // 4 secondesf1=6000; // frq fondamentalfmin=20fmax=20000rate=22050;t=soundsec(n, rate);s=cos(2*%pi*f1*t);
plot(t(1:100),s(1:100));
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 24 / 51
INITIATION À SCILAB Eclipse à Chéraute
// 2 raies// une à 6000 Hz = 6 kHz// l'autre (repliement) à 220506000 =16050 Hz = 16,05 k
clear;xbasc()n=4; // 4 secondesf1=6000; // frq fondamentalfmin=20fmax=20000rate=22050;t=soundsec(n, rate);s=cos(2*%pi*f1*t);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 25 / 51
INITIATION À SCILAB Eclipse à Chéraute
clear;//quantification
function sq=quantif(s,N) sq=round(s)
endfunction
n=0.005 // dureeN=3; // nb de bitsf=500rate=80000; // frq echantillonnage// rate assez élevée car on veut mettre en évidence// la quantification... pas l'échantillonnaget=soundsec(n, rate)';s=(2^N1)*(sin(2*%pi*f*t)+1)/2; // signal échantillonné mais pas quantifiésq=quantif(s,N); // signal quantifiéerr=abs(ssq)^2; // erreur (bruit) de quantification xbasc()//plot2d(t,[s,sq,err])//plot2d(t,[s,sq,err],style=[1,1,1],rect=[0,2e3,0,8],leg='')//plot2d(t,[s,sq,err],frameflag=1,rect=[0,2e3,0,8],leg='s@sq@err')plot2d(t,[s,sq,err],leg='s@sq@err',rect=[0,0,4e3,8],style=[1,2,3])
//squarewave generates a square wave with period 2*%pi
//ici , on réalise un signal carré de période 1 . tmax=2;t=[0:tmax/1e4:tmax];u=(1+squarewave (2*%pi*t,50))/2;//signal carre de periode 1 xbasc();xtitle("signal carre (01) de rapport cyclique 1/2 et de PERIODE 1:u=(1+squarewave (2*%pi*t,50))/2",'t(s)','u(t)');plot2d(t,u, rect=[0,0.1,tmax,1.1]);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 26 / 51
INITIATION À SCILAB Eclipse à Chéraute
Les courbes 3D 1. À PARTIR D'UNE DÉMO : depuis scilex>Demos>graphics>2D3D>plot3D
Les angles alpha et beta sont les angles de vue de la figure 3D . Ces angles peuvent être modifiés en cliquant BG sur le bouton 3D Rot. , puis sur le graphique .
Ici, tracé de z = sin(x).cos(y)
commandes : t=%pi:0.3:%pi;xtitle(['plot3d:Z=sin(x).cos(y)']);plot3d(t,t,sin(t)'*cos(t),35,45,'X@Y@Z',[2,2,4]);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 27 / 51
INITIATION À SCILAB Eclipse à Chéraute
2. Démo modifiée
xbasc();// pour effacer la fenêtre.Indispensable sinon, le tracé s'additionne au précédent ! xtitle(['plot3d:Z=sin(x).cos(y)']);t=0:0.5:4*%pi;//définition de la variable t de 0 à 4pi par pas de 0,5 .plot3d(t,t,sin(t)'*cos(t),35,45,'X@Y@Z',[2,2,4]);//tracé de X=t, Y=t, Z=sin(x).cos(y),vecteur colonne.//'X@Y@Z' donne la légende du graphe, 35, 45 donne les angles de la vue en perspective .
//xtitle('cercle: equation parametrique: plot2d(x,y)R=2;t=[0:2*%pi*1e2:2*%pi]';x=R*cos(t);y=R*sin(t);z=R*sin(2*t)+cos(2*t);//matrices de même dimension pour l'addition . xbasc()xtitle('cercle: equation parametrique: plot2d(x,y) ou plot3d (x,y,z)','x=R.cos(t)','y=R.sin(t)');//plot2d(x,[y,z])plot3d (x,y,z)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 28 / 51
INITIATION À SCILAB Eclipse à Chéraute
Courbes paramétriques 2D3D //xtitle(equations parametriques: plot2d(x,y)R=2;t=[0:2*%pi*1e2:2*%pi]';//vecteur colonnex=R*cos(t);//vecteur colonne(n,1) car t l'est .y=R*sin(t);//vecteur colonne (n,1) car t l'est .z1=R*sin(2*t)+cos(2*t);//matrices de même dimension //pour l'addition . xbasc();//effacement des diagrammes précédents. xtitle('courbes parametriques: plot2d(x,[y,z1]); z1=R*sin(2*t)+cos(2*t)','x=R.cos(t)','y=R.sin(t)');plot2d(x,[y,z1])//on concatène (assemble les matrices) //y(n,1) et z1(n,1).Donc [y,z1] de dim (n,2)
//xtitle(equations parametriques: plot3d(x,y,z,[theta,alpha,leg(ende),flag,ebox]) clear;R=2;t=(0:2*%pi*1e2:2*%pi);//vecteur lignex=R*cos(t);// car t l'est .y=R*sin(t);//vecteur 1 ligne car t l'est .
//produit: matrice (1 lign,n col)*matrice (n lign,1col) (A*B avec ncol A = nlign B obligatoire)
z=R*sin(2*t)'*cos(2*t);
xbasc();//effacement des diagrammes précédents.
xtitle('courbes parametriques:plot3d(x,y,z,55,45,x=R.cos(t),y=R.sin(t)');
plot3d(x,y,z,55,45,'x=R.cos(t)@y=R.sin(t)@z')
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 29 / 51
INITIATION À SCILAB Eclipse à Chéraute
D'après la Présentation de Wikipédia : http://fr.wikipedia.org/wiki/Scilab
Tracé de vecteurs Flêchés avec : Xarrows: http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Graphiques_et_sonsxbasc();nx=[0,1];//vecteur des abscisses des points du vecteur.ny=[0,1];//vecteur des ordonnées des points du vecteur.xarrows(nx,ny);//donne le « vecteur flêché » du point (0,0) au point (1,1)
Application au vecteur de Fresnel....
plot2d4 : tracé en « flèches » (pour un champ de vecteurs) ;
Une démonstration (demo) de plot2d4 est obtenue en tapant dans la femêtre de prompt de scilab et en validant :
>plot2d4()
Ici, le script pour avoir le champ cicontre : champ(1:10,1:10,rand(10,10),rand(10,10),1.0);
La commande : champ(), donne cette démo.
Champ de vecteurs:deff("[xdot] = derpol(t,x)",.. ["xd1 = x(2)";.. "xd2 = x(1) + (1 x(1)**2)*x(2)";.. "xdot = [ xd1 ; xd2 ]"])xf= 1:0.1:1;yf= 1:0.1:1;fchamp(derpol,0,xf,yf)clf()fchamp(derpol,0,xf,yf,1,[2,2,2,2],"011")
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 30 / 51
INITIATION À SCILAB Eclipse à Chéraute
Utilisation de plot2d4 pour tacer des vecteurs et flêches. xbasc();theta=[0:2*%pi/100:2*%pi];nx=[0,cos(theta)];ny=[0,sin(theta)];xbasc();subplot(1,2,1);//xarrows(nx,ny);subplot(1,2,2);//plot2d4(nx,ny);
Coordonnées polaires:t= 0:.01:2*%pi;clf();polarplot(sin(7*t),cos(8*t))
clf();polarplot([sin(7*t') sin(6*t')],[cos(8*t') cos(8*t')],[1,2])
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 31 / 51
INITIATION À SCILAB Eclipse à Chéraute
// Représentation de fresnel d'un signal sinusoïdal . xbasc();U=3;t=[0:%pi/8:2*%pi];x=t;y=U*sin(t);nx=[0,U*cos(0),0,U*cos(1*%pi/8),0,U*cos(2*%pi/8),0,U*cos(3*%pi/8),0,U*cos(4*%pi/8),0,U*cos(5*%pi/8),0,U*cos(6*%pi/8)];//vecteur des abscisses des points du vecteur.ny=[0,U*sin(0),0,U*sin(1*%pi/8),0,U*sin(2*%pi/8),0,U*sin(3*%pi/8),0,U*sin(4*%pi/8),0,U*sin(5*%pi/8),0,U*sin(6*%pi/8)];//vecteur des ordonnées des points du vecteur.subplot (1,2,1);xarrows(nx,ny);//donne le « vecteur flêché » du point (0,U*cos(theta)) au point (1,U*sin(0theta)plot2d4 (nx,ny,rect=[U,U,U,U]);
subplot (1,2,2);plot2d4 (x,y,rect=[0,U,2*%pi,U]);
// Représentation de fresnel d'un signal sinusoïdal . xbasc();U=3;theta=[0:%pi/8:2*%pi];t=[0:1:15]x=theta;y=U*sin(theta);nx=[[(1+squarewave (1*%pi*t,50))/2]'*U*cos(theta)];//vecteur des abscisses des 2 points extrêmes du vecteurny=[[(1+squarewave (1*%pi*t,50))/2]'*U*sin(theta)];//vecteur des ordonnées des 2 points extrêmes du vecteur.subplot (1,2,1);//xarrows(nx,ny);//donne le « vecteur flêché » du point (0,U*cos(theta)) au point (1,U*sin(0theta)plot2d4 (nx,ny,rect=[U,U,U,U]);
subplot (1,2,2);plot2d4 (x,y,rect=[0,U,2*%pi,U]);
Génération d'un vecteur dont les coordonnées sont une fois sur 2 nulles:[0,Ucos theta,0, cUostheta,....]nx=[[(1+squarewave (1*%pi*t,50))/2]'*U*cos(theta)];de même pour ny [0,sin theta,0,sin theta,...]ceci pour que l'origine du vecteur soit toujours (0,0)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 32 / 51
INITIATION À SCILAB Eclipse à Chéraute
clear; clf; deff('[z] = f(x, y)', 'z = sin(x) * cos(y)') xset('colormap', jetcolormap(32)) x = %pi * [1:0.05:1]';y = x;z = feval(x, y, f); //(_,_,1) 1ère courbe tracée dans la case 1,1 de la fenêtre 2lignx2col.subplot(2, 2, 1)grayplot(x, y, z) subplot(2, 2, 2)contour2d(x, y, z, 5)
subplot(2, 2, 3)plot3d1(x, y, z, 0, 90) subplot(2, 2, 4)plot3d1(x, y, z, 70, 70)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 33 / 51
INITIATION À SCILAB Eclipse à Chéraute
Scilab images et sons:http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Graphiques_et_sons#fleche1
SonsScilab peut générer ou analyser des sons. Il peut même lire et écrire des fichiers .WAV (voir Gestion des fichiers).Un son est en fait un vecteur dont les valeurs sont comprises entre 1 et 1 ; les valeurs hors de cet interval sont ignorées (phénomène d'écrêtage).Si ƒs est la fréquence d'échantillonage en hertz, alors le pas d'échantillonage est 1/ƒs. L'instruction soundsec
permet de générer un vecteur correspondant au pas d'échantillonnage :t=soundsec(n, fs)où n est le nombre de secondes et ƒs est la fréquence. Si l'on omet ƒs, Scilab prend la valeur 22 050.
Si l'on a défini la fonction de son s (pression relative de l'air/tension d'alimentation normée du hautparleur en fonction du temps), alors on peut générer un vecteur de valeurs u :u = s(t)et jouer le sonsound(u, fs)L'instruction analyze détermine le spectre sonore du son et trace le graphique.analyze(s)
//analyse et generation de sons//on genere 0,5s echantillonne à fech.//si ce temps est trop long, la mémoire sature.//message d'erreur: stack size exceededfs=22e3;t=soundsec(0.5,fs);//0.5s echant à fech
u = sin(1e3*t)+sin(0.3e3*t);sound(u, fs);//génère un son pur à w=1e3 rad/s,// additionné à un harmonique à 300 rad/s audible au Hparleur de l'ordinateur . xbasc();//xtitle("spectre d'amplitude de u(t)","w(rad/s)","u(t)");//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u,10,1400,22050,7e3);
On obtient cette démo en tapant simplement dans l'éditeur scilab ou dans la fenêtre de prompt(scilex...): analyze()// At first we create 0.5 seconds of sound parameters.t=soundsec(0.5);// Then we generate the sound.s=sin(440*t)+sin(220*t)/2+sin(880*t)/2;sound(s, fech)//génère un son>HP PC[nr,nc]=size(t);s(nc/2:nc)=sin(330*t(nc/2:nc));analyze(s);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 34 / 51
INITIATION À SCILAB Eclipse à Chéraute
Scilab images et sons://analyse et generation de sons//on genere 0,5s echantillonne(sampling) à fech.//si ce temps est trop long, la mémoire sature.//message d'erreur: stack size exceededfs=44e3;f=0.4e2;w=2*%pi*f;T=1/f;t=soundsec(0.5,fs);//0.5s echant à fechu3 = 1+2*sin(w*t)+2/3*sin(3*w*t)+2/5*sin(5*w*t);u4 = 1+2*sin(w*t)+2/3*sin(3*w*t)+2/5*sin(5*w*t)+2/7*sin(7*w*t);sound(u3, fs);//génère un son pur à la pulsation w(rad/s),// additionné à des harmoniques à n.w rad/s audible au Hparleur de l'ordinateur . xbasc();//efface diagramme précédent.//xtitle("spectre d'amplitude de u(t)","w(rad/s)","u(t)");subplot(2,2,1);//plot2d([t]',u3,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u3,rect=[0,1,2*T,3]);subplot(2,2,2);////analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u3,10,6*w,44e3,7e3);subplot(2,2,3);//plot2d([t]',u,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u4,rect=[0,1,2*T,3]);subplot(2,2,4);//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u4,10,8*w,44e3,7e3);
Synthèse et décomposition d'un signal carré . Attention: en abscisse du spectre, c'est ( / )rrr r =2..f et non f(Hz)On remarque que le spectre d'amplitude donné, ci dessous, donne des amplitudes normées à 1 .
Il s'agit donc de valeurs d'amplitude relatives à l'amplitude du fondamental : ici 2V .
ATTENTION: si ce temps de soundsec(0.5,fs), ici 0,5s est trop long, et/ou si la fréquence d'échantillonnage est trop forte(Max 44kHz pour les cartes son habituelles), la mémoire sature, d'où le message d'erreur: stack size exceeded, ainsi que l'affichage dans la fenêtre du prompt scilab(scilex):While executing a callback (en train d'exécuter une fonction de rappel).Il faut alors stopper ce calcul pour récupérer la fonction Audio.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 35 / 51
INITIATION À SCILAB Eclipse à Chéraute
GÉNÉRER, ANALYSER ET JOUER DES SONS SUR LA CARTE SON AVEC SCILAB://GÉNÉRER, ANALYSER ET JOUER DES SONS SUR LA CARTE SON AVEC SCILAB: FICHIER SonsFFT.sce//a PARTIR DE http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Graphiques_et_sons#son1//soundsec permet de générer un vecteur correspondant au pas d'échantillonnage :// duree est le nombre de secondes et fech est la fréquence. Si l'on omet fech , Scilab prend la valeur 22 050.//fech est une valeur entière.
fech=22e3;duree=2; t=soundsec(duree,fech);
fh1 = 1e2; h1=1*sin(2*%pi*fh1*t);fh2 =50; h2=2*sin(2*%pi*fh2*t);fh3 =1e3; h3=2*sin(2*%pi*fh3*t);som=h1+h2+h3;
xbasc();subplot (2,2,1);plot2d([t,t],[h1,h2]);subplot (2,2,2);plot2d([t,t],[h3,som]);
//jouer le son u échantillonné //à la fréquence fechsound(h1,fech ); sound(h2,fech );sound(h3,fech );sound(som,fech );
subplot (2,2,3);analyze(h1);analyze(h2);analyze(h3);
subplot (2,2,4);
//L'instruction analyze détermine //le spectre sonore du son et //trace le graphique.;//analyze(h1);//analyze(h2);//analyze(h3);analyze(som);
//a partir de : http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Gestion_des_fichiers//sauver le fichier au format .wav; Microsoft PCM format dans le fichier harmoniq_umax=2.//mis par défaut dans /home/usersavewave('harmoniq_umax=2', som, fech);//charger le fichier harmoniq_umax=2 au format .wav; Microsoft PCM format dans la matrice v.//chaque ligne de la matrice correspondant alors à un canal.v=loadwave('harmoniq_umax=2');playsnd(v);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 36 / 51
INITIATION À SCILAB Eclipse à Chéraute
Scilab et Gestion des fichiers: http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Gestion_des_fichiers#Images
mapsound(s,dt=0.1,simpl=1,fmin=100,fmax=3000,rate=fs)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 37 / 51
INITIATION À SCILAB Eclipse à Chéraute
//analyse et generation de sons//on genere 0,5s echantillonne(sampling) à fech.//si ce temps est trop long, la mémoire sature.//message d'erreur: stack size exceededfs=22e3;t=soundsec(0.5,fs);//0.5s echant à fechu3 = 1+2*sin(1e2*t)+2/3*sin(3e2*t)+2/5*sin(5e2*t);u4 = 1+2*sin(1e2*t)+2/3*sin(3e2*t)+2/5*sin(5e2*t)+2/7*sin(7e2*t);sound(u3, fs);//génère un son pur à w=1e2 rad/s,// additionné à des harmoniques à n.100 rad/s audible au Hparleur de l'ordinateur . xbasc();//efface diagramme précédent.//xtitle("spectre d'amplitude de u(t)","w(rad/s)","u(t)");
subplot(2,3,1);//plot2d([t]',u3,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u3,rect=[0,1,120e3,3]);subplot(2,3,2);//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u3,10,800,22050,7e3);subplot(2,3,3);//tracé du sonagramme(abscisse t(s), ordonnées w (rad/s)mapsound(u3,dt=0.1,simpl=1,fmin=50,fmax=1000,rate=fs)//subplot(2,3,4);//plot2d([t]',u,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u4,rect=[0,1,120e3,3]);subplot(2,3,5);//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u4,10,800,22050,7e3);subplot(2,3,6);mapsound(u4,dt=0.1,simpl=1,fmin=50,fmax=1000,rate=fs)
Graduation des axes :xgraduate
[xi,xa,np1,np2,kMinr,kMaxr,ar]=xgraduate(xmi,xma)
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 38 / 51
INITIATION À SCILAB Eclipse à Chéraute
Un fichier .WAV peut être mis dans une matrice avec la fonction loadwave :x=loadwave('nom_de_fichier')chaque ligne de la matrice correspondant alors à un canal. On peut ensuite jouer ce son dans Scilab avec l'instruction playsndplaysnd(x)
x=loadwave('./Documents/documentsDjl/prof/analyson/ADjl.Wav')playsnd(x)
//on charge dans le vecteur x le son provenant de la voyelle « A » de la voix d'une fille de 6ans . x=loadwave('./Documents/documentsDjl/prof/analyson/ADfmicCravate.Wav')playsnd(x);xbasc()analyze(x, 10, 3e3,44e3,7e3);
La période de la voyelle « A » prolongée de la voix d'une enfant de 6ans est de période 4ms, soit 250Hz . Avec le Logiciel Libre (GPL)Audacity
Le spectre d'amplitude avec w(rad/s) en abscisse. La raie principale du spectre est à ~ 1300 rad/s, soit 250Hz
Voir .....scriptTtsignal.rtf
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 39 / 51
INITIATION À SCILAB Eclipse à Chéraute
//GÉNÉRER, ANALYSER ET JOUER DES SONS SUR LA CARTE SON AVEC SCILAB://a PARTIR DE http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Graphiques_et_sons#son1//soundsec permet de générer un vecteur correspondant au pas d'échantillonnage :// duree est le nombre de secondes et fech est la fréquence. Si l'on omet fech , Scilab prend la valeur 22 050.//fech est une valeur entière.fech=22e3;duree=2; t=soundsec(duree,fech);N=duree*fech; //nb de points pour le tracé des spectres (permet le calcul du pas de f fh1 = 261.63;fh2 =293.66;fh3 =329.63;fh4=1e3;fh5=1.5e3; u1max=1;u2max=1;u3max=1;u4max=1;u5max=1;h1=u1max*sin(2*%pi*fh1*t); h2=u2max*sin(2*%pi*fh2*t); h3=u3max*sin(2*%pi*fh3*t);h4=u4max*sin(2*%pi*fh4*t); h5=u5max*sin(2*%pi*fh5*t);som=h1+h2+h3;//Définition de la fenêtre de tracé grahique plot2d:xmin=0;yminsom=-5;xmax=5e-3;ymaxsom=5 ; ymin1=-2.1 ; ymax1=2.1 ; xminFFT= 0;yminsomFFT=0;xmaxFFT=1.1*fh3;ymaxsomFFT=1 ; clf;subplot (2,2,1);plot2d([t,t],[h1,h2],rect=[xmin,ymin1,xmax,ymax1]);subplot (2,2,2);plot2d([t,t],[h3,som],rect=[xmin,yminsom,xmax,ymaxsom]);sound(h1,fech ); //jouer le son échantillonné à la fréquence fech//xclick attend un clic de souris dans la fenêtre graphique qui apparait . xclicksound(h2,fech );xclicksound(h3,fech );xclicksound(som,fech );//spectres avec la fonction fft:f=fech/N*(0:(N-1)) ;//de 0 à fechspectr_h1=2/N*fft(h1,-1);spectr_h1=2/N*fft(h2,-1);spectr_h1=2/N*fft(h3,-1);spectr_som=2/N*fft(som,-1);clf;subplot (2,2,3);//Affichage du module abs(spectr_h1) , soit le spectre d'amplitudeplot2d(f,abs(spectr_som),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);
VOIR LA RÉSOLUTION , ICI fech/(durée*fech)=0,5Hz POUR AVOIR L’AMPLITUDE À 1.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 40 / 51
INITIATION À SCILAB Eclipse à Chéraute
fech=22e3;duree=2; t=soundsec(duree,fech);N=duree*fech; //nb de points pour le tracé des spectres (permet le calcul du pas de f)
fh1 = 261.63;fh2 =293.66;fh3 =329.63;fh4=1e3;fh5=1.5e3; u1max=1;u2max=1;u3max=1;u4max=1;u5max=1;h1=u1max*sin(2*%pi*fh1*t); h2=u2max*sin(2*%pi*fh2*t); h3=u3max*sin(2*%pi*fh3*t);h4=u4max*sin(2*%pi*fh4*t); h5=u5max*sin(2*%pi*fh5*t);som=h1+h2+h3;
//Définition de la fenêtre de tracé grahique plot2d:xmin=0;yminsom=-5;xmax=5e-3;ymaxsom=5 ; ymin1=-2.1 ; ymax1=2.1 ; xminFFT= 0.9*fh1;yminsomFFT=0;xmaxFFT=1.1*fh3;ymaxsomFFT=1 ;
subplot (2,2,3);//Affichage du module abs(spectr_h1) , soit le spectre d'amplitudeplot2d(f,abs(spectr_h1),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);plot2d(f,abs(spectr_som),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);plot2d(f,abs(spectr_h2),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);plot2d(f,abs(spectr_h3),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);
//analyze(h1);//L'instruction analyze détermine le spectre d'amplitude du son et trace le graphique.;//Exemple analyze(s,200,600,22050);default values fmin=100,fmax=1500,rate=22050,points=8192;//ATTENTION, ANALYZE NE TRAVAILLE QUE POUR 100<F<1500, MÊME SI ON MET FMIN ET FMAX EN DEHORS !!!subplot (2,2,4);analyze(h1,100,1600,22050);analyze(h2,100,1600,22050);analyze(h3,100,1600,22050);analyze(h5,100,1600,22050);analyze(h5,100,1600,22050);subplot (2,2,4);//analyze(som,rect=[xminFFT,,xmaxFFT,])pour essayer d'optimiser la fen tre d' cran;� �analyze(som,100,1600,22050);
En bas à Gauche : l’abscisse représente la fréquence f en Hz (échelle linéaire)En bas à Droite : l’abscisse représente la fréquence f en Hz (échelle linéaire).Parfois, on met w(rad/s)=2*pi*f , comme abscisse.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 41 / 51
INITIATION À SCILAB Eclipse à Chéraute
//spectres avec la fonction fftstacksize ('max') ;// allows the user to increase the size of this stack to the maximum(Calcul scilab en fronction de RAM et SWAP).//On refait calculer les signaux avec une meilleure résolution en fréquence,//pour la représentation correcte des spectres d'amplitude FFT.//La résolution en fréquence est R(Hz)=Fech(fmax représentée)/N(points_calculés).//Soit R(Hz)=fech/(duree*fech)=1/duree.//La plus mauvaise résolution relative est R%=R(Hz)/fmin(spectre)//------------calculs des coordonnées de points des signaux _______
fech=22e3;duree=100; t=soundsec(duree,fech);N=duree*fech; //nb de points de calcul pour le tracé des spectres (permet le calcul du pas de f)
fh1 = 261.63;fh2 =293.66;fh3 =329.63;fh4=1e3;fh5=1.5e3; u1max=1;u2max=1;u3max=1;u4max=1;u5max=1;h1=u1max*sin(2*%pi*fh1*t); h2=u2max*sin(2*%pi*fh2*t); h3=u3max*sin(2*%pi*fh3*t);h4=u4max*sin(2*%pi*fh4*t); h5=u5max*sin(2*%pi*fh5*t);som=h1+h2+h3;produi=h1 .*h3 ;
//Calcul des spectres d'amplitude avec la fonction fftf=fech/N*(0:(N-1)) ;//Calcul du vecteur f de 0 à fechspectr_h1=2/N*fft(h1,-1);spectr_h2=2/N*fft(h2,-1);spectr_h3=2/N*fft(h3,-1);spectr_som=2/N*fft(som,-1);spectr_produi=2/N*fft(produi,-1);
subplot (2,2,3);//Affichage des modules abs(spectr_h1)... , soit les spectres d'amplitude.plot2d(f,abs(spectr_h1),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);plot2d(f,abs(spectr_h2),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);plot2d(f,abs(spectr_h3),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);//som=h1+h2+h3plot2d(f,abs(spectr_som),rect= [xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);xtitle('spectres des Notes Do, Ré, Mi octave 3 et somme','f(Hz)','h1(t),h2(t),h3(t) et somme' );
subplot (2,2,4);//Tracé du spectre du produit des harmoniques h1*h3//produi=h1 .*h3 plot2d(f,abs(spectr_produi),rect=[xminFFT_produi,yminFFT_produi,xmaxFFT_produi,ymaxFFT_produi]);xtitle('spectres du produit des Notes Do et Mi octave 3 ','f(Hz)','produi=h1(t)*h3(t)' );
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 42 / 51
INITIATION À SCILAB Eclipse à Chéraute
//~~~~~COMPARAISON DES FONCTIONS ANALYZE ET FFT~~~~~~~~~~~~~~~~~~~fech=22e3;duree=100; t=soundsec(duree,fech);N=duree*fech; //nb de points de calcul pour le tracé des spectres (permet le calcul du pas de f)
fh1 = 261.63;fh2 =293.66;fh3 =329.63;fh4=1e3;fh5=1.5e3; u1max=1;u2max=1;u3max=1;u4max=1;u5max=1;h1=u1max*sin(2*%pi*fh1*t); h2=u2max*sin(2*%pi*fh2*t); h3=u3max*sin(2*%pi*fh3*t);h4=u4max*sin(2*%pi*fh4*t); h5=u5max*sin(2*%pi*fh5*t);som=h1+h2+h3;produi=h1 .*h3 ;
//Calcul des spectres d'amplitude avec la fonction fftf=fech/N*(0:(N-1)) ;//Calcul du vecteur f de 0 à fechspectr_h1=2/N*fft(h1,-1);spectr_h2=2/N*fft(h2,-1);spectr_h3=2/N*fft(h3,-1);spectr_som=2/N*fft(som,-1);
//~~~~~COMPARAISON DES FONCTIONS ANALYZE ET FFT~~~~~~~~~~~~~~~~~~~//analyze(h1);//L'instruction analyze détermine le spectre d'amplitude du son et trace le graphique.;//Exemple analyze(s,200,600,22050);default values fmin=100,fmax=1500,rate=22050,points=8192;//ATTENTION, ANALYZE NE TRAVAILLE QUE POUR 100<F<1500, MÊME SI ON MET FMIN ET FMAX EN DEHORS !!!//La fonction analyse ne donne pas toujours l'amplitude attendue,//Celà dépend de la résolutionadoptée par la fonction . //Avec une résolution correcte, l'amplitude donnée est la moitié de l'amplitude de l'harmonique car le spectre est symétrique/ 0->y//Analyse adapte l'échelle et le pas de f pour la meilleure résolution en fréquence,A CONDITION QUE duree soit assez grande //pour une bonne résolution relative (Df/f~ 0,01 % ) pour les raies uniques (Un harmonique).
subplot (1,2,2);xtitle('spectre *analyse* de la somme des Notes Do, Ré, Mi octave 3 ','f(Hz)','h1(t)+h2(t)+h3(t)' );analyze(som,100,400); //adapte l'échelle pour les 3 harmoniques sommés
subplot (1,2,1);
xtitle('spectre *FFT* de la somme des Notes Do, Ré, Mi octave 3 ','f(Hz)','h1(t)+h2(t)+h3(t)' );plot2d(f,abs(spectr_som),rect=[xminFFT,yminsomFFT,xmaxFFT,ymaxsomFFT]);
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 43 / 51
INITIATION À SCILAB Eclipse à Chéraute
Scilab images et sons:Script Scilab pour Synthèse et décomposition d'un signal triangle .
t=soundsec(0.5,fs);//0.5s echant à fechu1= 1+2*sin(1e2*t+%pi/2);u2 =u1+2/3^2*sin(3e2*t+%pi/2);u3 =u2+2/5^2*sin(5e2*t+%pi/2);sound(u3, fs);//génère un son pur à w=1e2 rad/s,// additionné à des harmoniques à n.100 rad/s audible au Hparleur de l'ordinateur . xbasc();//efface diagramme précédent.//xtitle("spectre d'amplitude de u(t)","w(rad/s)","u(t)");subplot(3,2,1);//plot2d([t]',u1,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u1,rect=[0,1,120e3,3]);subplot(3,2,2);//analyze(u1,fmin,fmax,fech(rate),nbpoints);analyze(u1,10,600,22050,7e3);subplot(3,2,3);//plot2d([t]',u,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u2,rect=[0,2,120e3,4]);subplot(3,2,4);//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u2,10,600,22050,7e3);subplot(3,2,5);//plot2d([t]',u,rect=[xmin,ymin,xmax,ymax]);plot2d([t]',u3,rect=[0,2,120e3,4]);subplot(3,2,6);//analyze(u,fmin,fmax,fech(rate),nbpoints);analyze(u3,10,600,22050,7e3);
On remarque que le spectre d'amplitude donné, ci dessous, donne des amplitudes normées à 1 . La composante continue ou valeur moyenne(f=0Hz), n'est pas affichée . Il s'agit donc de valeur d'amplitude relative à l'amplitude du fondamental : ici 2V .
Le signal triangle est pair. On aurait pu l'écrire comme somme de cosinus, mais on préfère garder l'écriture générale comme somme de sinus et ajouter la phase (/2),
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 44 / 51
INITIATION À SCILAB Eclipse à Chéraute
SIMULATION AVEC LE MODULE SCICOS DE SCILAB1. FILTRE PASSE BAS DU 1ER ORDRE (RC ...):
Le module « Write AU... » écrit un fichier au format audio: nomdufichier.auOn peut cliquer Bouton Droit (BD) après sélection du bloc (BG)ou directement (BD), puis Help, pour avoir une aide sur le bloc . En double cliquant BG sur le bloc, on peut régler les paramètres, période, amplitude ....
On fera attention a bien ajuster « init time », inférieur à la durée de simulation, sans quoi , rien ne sera affiché.
Paramètre pour l'oscilloscope(Mscope) Horloge de période d'échantillonnage de l'oscilloscope
Horloge de ½ période du signal carré.
Durée de simulation (simulate->setup)
On voit que le filtre passe bas du 1er Ordre, avec = 10-3 a conservé uniquement les 2
harmoniques de fréquences les plus basses, dont le fondamental à la fréquence du signal carré. Voir le module FFT: PSPECSCOPE_c.sci
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 45 / 51
INITIATION À SCILAB Eclipse à Chéraute
1.1.Filtre passe bas du 1er Ordre ,sans sortie sur fichier audio.
Horloge qui règle la ½ période du signal carré
Période d'échantillonage de l'oscilloscope donné par son « Horloge »
Réglage de l'oscilloscope « Mscope »
Réglage des paramètre de la fonction de tranfert.
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 46 / 51
INITIATION À SCILAB Eclipse à Chéraute
Exemple d’écrans, scilab lancé en console sur PC(1,2GHz;1,5Go RAM) GNU/LINUX debian6Squeeze , Bureau léger LXDE
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 47 / 51
INITIATION À SCILAB Eclipse à Chéraute
Gestion de fichiers, Import/Export d'images et sons:http://fr.wikibooks.org/wiki/D%C3%A9couvrir_Scilab_Gestion_des_fichiers#Images
Liens: scilab par la pratique :http://www.scilab.org/doc/Scilabpratique/node1.html
Scilab en lycée pour la méthode d'euler et le traitement des nuages de points:http://www.scilab.org/lycee/Secondaire.pdfÉchantillonnage ET SONS AVEC SCILAB:http://www.inln.cnrs.fr/IMG/pdf/Echant.pdf
Logiciel de modélisation et de simulation Scilab/Scicoshttp://quentin.quadrat.free.fr/tuto_scicosfr.html
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 48 / 51
INITIATION À SCILAB Eclipse à Chéraute
Fonctions, librairie de subroutine scilab .
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 49 / 51
INITIATION À SCILAB Eclipse à Chéraute
D'après : Une introduction à Scilabhttp://cermics.enpc.fr/~jpc/mopsi/scilab.pdf
Physique AppliquéeLycée du Pays de soule 19/08/12initScilab.odtDjlPage: 50 / 51
Recommended