Aller au contenu

programmation matlab


guygrun

Messages recommandés

Matlab : Prise en main :

1) Environnement de travail :

Commande help

» help

HELP topics:

matlab\general       -  General purpose commands.
matlab\ops           -  Operators and special characters.
matlab\lang          -  Programming language constructs.
matlab\elmat         -  Elementary matrices and matrix manipulation.
matlab\elfun         -  Elementary math functions.
matlab\specfun       -  Specialized math functions.
matlab\matfun        -  Matrix functions - numerical linear algebra.
matlab\datafun       -  Data analysis and Fourier transforms.
matlab\polyfun       -  Interpolation and polynomials.
matlab\funfun        -  Function functions and ODE solvers.
matlab\sparfun       -  Sparse matrices.
matlab\graph2d       -  Two dimensional graphs.
matlab\graph3d       -  Three dimensional graphs.
matlab\specgraph     -  Specialized graphs.
matlab\graphics      -  Handle Graphics.
matlab\uitools       -  Graphical user interface tools.
matlab\strfun        -  Character strings.
matlab\iofun         -  File input/output.
matlab\timefun       -  Time and dates.
matlab\datatypes     -  Data types and structures.
matlab\dde           -  Dynamic data exchange (DDE).
matlab\demos         -  Examples and demonstrations.
toolbox\signal       -  Signal Processing Toolbox.
toolbox\control      -  Control System Toolbox.
control\obsolete     -  (No table of contents file)
stateflow\stateflow  -  Stateflow
stateflow\sfdemos    -  (No table of contents file)
simulink\simulink    -  Simulink 
simulink\blocks      -  Simulink block library.
simulink\simdemos    -  Simulink demonstrations and samples.
simulink\dee         -  Differential Equation Editor
toolbox\tour         -  An interface to Matlab demos, installed Toolboxes demos, and information
toolbox\local        -  Preferences.

La fonction help permet de voir l’aide de matlab.

Commande cd

» cd

C:\MATLAB\bin

Permet de voir le fichier ou sont enregistrés les fichiers *.m (change current working directory).

Commande ls

» ls

.                    license.dat          msvcirt.dll          
..                   lmgr325a.dll         msvcopts.bat         
bccengmatopts.bat    matfopts.bat         msvcrt.dll           
bccopts.bat          matlab.exe           mwoles05.dll         
cmex.bat             medit.exe            perl.exe             
fmat.dll             mex.bat              perl100.dll          
fmex.bat             mfc42.dll            showdlls.exe         
fmex.dll             mipcole.dll          w32ssi.dll           
fmx.dll              ml_16.dll            wat11copts.bat       
gx1242r.dll          mlapp.tlb            wat11engmatopts.bat  
libeng.dll           mlptool.exe          watcopts.bat         
libmat.dll           msctof.dll           watengmatopts.bat    
libmccmx.dll         msfopts.bat          wsptool.exe          
libmi.dll            msvc50engmatopts.bat 
libmx.dll            msvc50opts.bat       
libut.dll            msvcengmatopts.bat

Permet de voir tous les fichiers présent dans le répertoire courrant.

Commande dir

» dir

.                    license.dat          msvcirt.dll          
..                   lmgr325a.dll         msvcopts.bat         
bccengmatopts.bat    matfopts.bat         msvcrt.dll           
bccopts.bat          matlab.exe           mwoles05.dll         
cmex.bat             medit.exe            perl.exe             
fmat.dll             mex.bat              perl100.dll          
fmex.bat             mfc42.dll            showdlls.exe         
fmex.dll             mipcole.dll          w32ssi.dll           
fmx.dll              ml_16.dll            wat11copts.bat       
gx1242r.dll          mlapp.tlb            wat11engmatopts.bat  
libeng.dll           mlptool.exe          watcopts.bat         
libmat.dll           msctof.dll           watengmatopts.bat    
libmccmx.dll         msfopts.bat          wsptool.exe          
libmi.dll            msvc50engmatopts.bat 
libmx.dll            msvc50opts.bat       
libut.dll            msvcengmatopts.bat

Permet de lister tous les fichiers du répertoire courrant. (idem que la fonction ls)(directory listing)

Commande pwd (present word directory)

» pwd

ans =

C:\MATLAB\bin

Comme la commande CD il permet de voir ou se trouve le répertoire courrant.

Commande who

» who

Your variables are:

Ans

Permet de faire le listing de toutes les variables utilisées.

Commande whos

» whos
 Name      Size         Bytes  Class

 ans       1x13            26  char array
 x         1x1              8  double array

Grand total is 14 elements using 34 bytes

Permet aussi de lister les variables utilisées mais avec plus de détails, la longueur de la variable et sont format sont mentionnées.

Commande clear

» clear

Permet d’effacer toutes les variables.

2) Manipulation de vecteur :

Commande [ ]

» [1 2 3 4]

ans =

    1     2     3     4

Permet la création d’un vecteur.

Commande length

» length(ans)

ans =

    4

Permet de savoir le nombre de colonne d’un vecteur ou d’une matrice.

Commande size

» size(ans)

ans =

    1     4

Permet de savoir le nombre de ligne et de colonne du vecteur ou de la matrice.

3) Programmation :

 Commande if

  If test
 Action;
 End

 Commande switch

  switch variavle
 case1, disp(‘	‘)
 case2, disp(‘	‘)
 case3, disp(‘	‘)
 otherwise, disp(‘	‘)
 end

 Commande for

  For I=[1 : N] ce qui remplace for(i=1, i<N, i++)
 	If rand (I) <= (0,1)
   M(I)=0;
 	Else	M(I)=1;
 	End
 End

 Commande fonction

  Fonction [M]  = message (N)

M le résultat

N le paramètre d’entrée

Le nom d’appelle de la fonction doit être le même que le nom du fichier

4) Graphiques :

 plot (axe des x, axe des y)

ex :

plot (t,y)  -> y(t)

 subplot ( 2, 2, 1)

 coupe la fenêtre affichage graphique

 hold

 permet d’afficher plusieurs graphique sur la même figure

 title (‘ Titre ‘)

 xlabel (‘ nom des axes des x ‘)

 ylabel (‘ nom des axes des y ‘)

 axis ([-pi,pi , -1,1]) permet de dimensionner les axes du graphique

 clf clear figure

 zoom on permet ensuite de zoomer sur le graphique

5) Création des variables :

% Déclaration des variables
N=8192;
Fe=8000;
Te=1/Fe;
t=[(1:N)*Te];
f=[0:Fe/N:Fe];

6) Génération d’un sinus :

% Déclaration de la fonction sinus
y=10*sin(200*pi*t);
subplot(3,1,1);
plot(t,y);
axis([0 0.1 -11 11]);
title('Allure temporelle du sinus');
xlabel('Temps (sec)');
grid;

7) voir question 10 pour la courbe

% Génération du bruit
sigma = 1;	% variance du bruit
moy = 0;  % moyenne
bruit = moy + sigma*randn(1,N);	
subplot(3,1,2);
plot(t,bruit);
axis([0 0.1 -5 5]);
title('Allure temporelle du bruit');
xlabel('Temps (sec)');
grid;

:roll: Génération d’un bruit blanc gaussien : voir question 7

9) Visualisation de la courbe : bruit voir question 10

10) Graphique

% Bruit + Sinus
signal = y + bruit;
subplot(3,1,3);
plot(t,signal);
axis([0 0.1 -20 20]);
title('Allure temporelle du bruit avec le sinus');
xlabel('Temps (sec)');
grid;

Mis en forme par theo

Lien vers le commentaire
Partager sur d’autres sites

11) Augmentation de la puissance du bruit (spectre)

% Déclaration des variables
N=8192;
Fe=8000;
Te=1/Fe;
t=[(1:N)*Te];
f=[(1:N)]*Fe/N;

% Déclaration de la fonction sinus
y=10*sin(200*pi*t);
spectre=20*LOG10(abs(fft(y)));
subplot(4,1,1);
plot(f,spectre);
axis([0 8000 0 100]);
title('Allure fréquencielle du sinus');
xlabel('Fréquence (Hz)');
grid;

% Génération du bruit
sigma = 1;	% variance du bruit
moy = 0;  % moyenne
bruit = moy + sigma*randn(1,N);
spectre_bruit=20*LOG10(abs(fft(bruit)));
subplot(4,1,2);
plot(f,spectre_bruit);
axis([0 8000 0 100]);
title('Allure fréquencielle du bruit');
xlabel('Fréquence (Hz)');
grid;

% Bruit + Sinus
signal = y + bruit;
spectre2=20*LOG10(abs(fft(signal)));
subplot(4,1,3);
plot(f,spectre2);
axis([0 8000 0 100]);
title('Allure fréquencielle du bruit avec le sinus');
xlabel('Fréquence (Hz)');
grid;

% Bruit + Sinus (avec fort bruit)
signal2 = y + 10*bruit;
spectre3=20*LOG10(abs(fft(signal2)));
subplot(4,1,4);
plot(f,spectre3);
axis([0 8000 0 100]);
title('Allure fréquencielle du sinus + bruit');
xlabel('Fréquence (Hz)');
grid;

On remarque que les raies du spectre se rapproche de plus en plus est ce dépasse même après f0=4000Hz.

14) Fonction message.m

function[M]=message(N)
M=[1:1:N];

for I=[1:N]
  if rand(1)<=0.5
     M(I)=0;
  else M(I)=1;
  end
end

15) Fonction nrz.m

function [Mt]=nrz(M,N)
k=10;
c=0;        	

for i=1:N,
  if M(i)==1
     for j=c+1:c+k,
        Mt(j)=1;
     end
  else M(i)==0
   	for j=c+1:c+k,
     	Mt(j)=0;
     end
  end
c=c+k;
end

trancription en logique négative +12V et –12V

function[Mrs]= nrz2(Mt,A,k,N)

for i=1:k*N,
  if Mt(i)== 0
     Mrs(i)=-A;
  else
   	Mrs(i)=A;
  end
end

On remarque que le codage NRZ c’est juste l’inverse de l’état logique que l’on a au départ. Sur le spectre le spectre on remarque qu’il y a des pics vers le bas. Pressente une composante continu et s’annule avec les multiples de D avec un encombrement spectral de 2D.

Programme d’appelle des fonction et d’affichage des courbe pour le NRZ

% Déclaration des variables 
N=500;        	% Nombre de bits
D=1000;        % Débit en bit/s
k=10;
fe=D*k;        % Fréquence d'échantillonnage
A=-12;        % Valeur d'un bit=1
te=1/fe;        % Temps d'une periode


for i=1:N*k,
  Tet(i)=te*i;
end
F=[0:(N*k)-1]*fe/(N*k);


% Appel des fonctions
[M]=message(N);    	% Appelle de la fonction message
[Mt]=nrz(M,N);      % Appelle de la fonction nrz codage en 0 et 1
[Mrs] = nrz2(Mt,A,k,N);  	% Appelle de la fonction nrz2 codage en logique négative +ou-12V

% Affichage des courbes
subplot (3,1,1)
plot(Tet,Mt)
axis ([0 0.2 -0.1 1.1])
title ('Message à transmettre : M')
Xlabel ('temps en seconde')
Ylabel ('Etat logique')


subplot (3,1,2)
plot (Tet,Mrs)
axis ([0 0.2 A-1 -A+1])
title ('Message transmis : Mt')
Xlabel ('temps en seconde')
Ylabel ('Amplitude (V)')

Mrsfft=20*log10(abs(fft(Mrs,k*N)));
subplot(3,1,3)
plot(F,Mrsfft)
title('Spectre du sigal NRZ')
xlabel('fréquence en Hz')
ylabel('gain en dB')
grid
axis ([0 10000 0 80])

%Fonction message 2

function[M2]= mess2(M,N)
k=10;
c=0;
for i=1:N,
  if M(i)== 0
     for j=c+1:c+k,
        M2(j)=0;
     end
  else
   	for j=c+1:c+k,
     	M2(j)=1;
     end
  end
  c=c+k;
end

17) Codage manchester

function[Mt]= manchester(M,N)
c=0;
k=10;
for i=1:N,
  if M(i)== 0
     for j=c+1:c+(k/2),
        Mt(j)=0;
     end
     for j=c+1+(k/2):c+k,
        Mt(j)=1;
     end
  else
   	for j=c+1:c+(k/2),
     	Mt(j)=1;
     end
     for j=c+1+(k/2):c+k,
        Mt(j)=0;
     end

  end
c=c+k;
end

Programme d’appelle des fonction et d’affichage des courbe pour le manchester

% Déclaration des variable
N=500;
k=10;
D=1000;
Fe=k*D;
te=1/Fe;
A=-10;

for i=1:N*k,
  Tet(i)=te*i;
end
F=[0:(N*k)-1]*Fe/(N*k);

% Appel des fonctions
[M]=message(N);  	% Appelle de la fonction message
[M2]=mess2(M,N);  	% Appelle de la fonction message 2
[Mt]=manchester(M,N);	% Appelle de la fonction Manchester
[Mrs]=nrz2(Mt,A,k,N);	% Appelle de la fonction pour la conversion en          % logique négative
% Affichage des courbes
subplot (3,1,1)
plot(Tet,M2)
axis ([0 0.05 -0.1 1.1])
title ('Message à transmettre : M')
Xlabel ('temps en seconde')
Ylabel ('Etat logique')

subplot (3,1,2)
plot (Tet,Mrs)
axis ([0 0.05 A-1 -A+1])
title ('Message transmis : Manchester')
Xlabel ('temps en seconde')
Ylabel ('Amplitude (V)')

Mrsfft=20*log10(abs(fft(Mrs,k*N)));
subplot(3,1,3)
plot(F,Mrsfft)
title('Spectre du sigal manchester')
xlabel('frequence(Hz)')
ylabel('gain en dB')
grid
axis ([0 10000 0 80])

Le codage Manchester effectue beaucoup plus de variation pour retranscrire le message logique plus de transition pour le même train de bit (une par bit). Le spectre du Manchester est meilleur car ici car il n’y a pas de composante continu mais s’annule avec les multiple de D avec un encombrement spectral deux fois plus grand que le NRZ (ici environ 4D).Favorise par contre le synchronisation de l’horloge.

Mis en forme par theo

Lien vers le commentaire
Partager sur d’autres sites

:chinois:

mais avec de la couleur et des balise

 ce serait vraiment mieux 

au passage, la commande cd permet de changer le repertoire courant, pas uniquement de savoir quel est-il.

la plupart des commande unix sont valable sous matlab, donc il vaut mieux manger un peu d'unix :-D

si tu veux, au passage, j'ai 2-3 bricole de traitement d'image en matlab :eeek2:

Lien vers le commentaire
Partager sur d’autres sites

:mdr:

:xzombi: toi qui es modo maintenant, tu ne voudrais pas demander au propriétaire de ce magnifique tuto de mettre un peu de couleur et le cas-échéant le faire s'il ne répond :theo:

(autant te le dire de suite, passe à l'étape 2)

j'aime bien ce tuto et c'est dommage qu'il soit laissé à l'abandon tel qu'il est.

(et pi ça fait une semaine que j'attends que tu passe modo pour demander ça :kimouss: )

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

tu as plusieurs équivalent libre de matlab :

octave (sous gpl) et scilab (sous une licence presque libre, développé par l'INRIA).

si tu te sers de matlab pour faire des choses très générique, je te conseille fortement les équivalent libre, qui font aussi bien mais te laissent libre :up:

d'ailleurs, il existe octave-forge qui est une collection de tools pour octave très complete.

en gros, à part si c'est pour utiliser la toolbox de comm qui est très particulière, y a aucun intérêt à utiliser matlab :up:

EDIT : J'oubliais le plus important : la syntaxe entre ces trois logiciels est quasiment identique :up:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...
  • 3 mois après...

slt :incline: j ai un mini projet a realise sous matlab qui sontienne une methode d inportation 1 d exportation de fichier et un une 3 qui permet la classification d image par la methode des K plus proche voisins et je ne sais par ou commancer est ce q qlq un px me guide merci d avance :D

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...