EXERCICES MATLAB (TP TRAITEMENT DU SIGNAL) Université Saad Dahlab de Blida Facultés des sciences de l’ingénieur Département d’électronique Exercice Matlab (Test TP introduction à la théorie et traitement du signal S5 2010-2011) Licence TISE, ATM , Exercice 1 Sur un ensemble de notes entre 0 et 20, écrire un programme Matlab qui permet de: 1- calculer le nombre de notes supérieures ou égales à 10, 2- calculer le nombre de notes supérieures à la moyenne des notes, Le programme principal doit contenir deux fonctions Matlab qui réalisent les deux opérations 1 et 2 citées ci-dessus. On rappelle que les notes comprises entre 0 et 20 doivent être lu à partir du clavier. Les variables de ce programme sont données par : 1- le vecteur de notes : NOTE, 2- le nombre de notes : TAILLE, 3- la somme des notes : SOM ; 4- la moyenne des notes : MOY ; 5- le compteur de notes supérieures ou égales à 10 : C10 ; 6- le compteur de notes supérieures à MOY : CMOY ; 7- le compteur de notes dans le vecteur : i Solution ---------------programme principal clear all clc % Demander à l'utilisateur de donner le nombre de notes fprintf('\n-------------------------------\n'); TAILLE=input(' donner le nombre de notes: '); % Créer un vecteur (rempli de zeros) NOTE= zeros(1,TAILLE); %Demander à l'utilisateur de donner les notes for i=1:TAILLE fprintf(' donner la %d ème note: ',i) NOTE(i)=input(' '); end %calculer le nombre de notes > 10 C10 = notes_sup_10(NOTE); fprintf('le nombre de notes>=10 est: %d \n', C10); %calculer le nombre de notes > moyenne [MOY,CMOY] = notes_sup_moy(NOTE); fprintf('la moyenne des notes est: %.2f \n', MOY); fprintf('le nombre de notes > moyenne est: %d \n', CMOY); fprintf('\n-------------------------------\n'); -----------------------------notes_sup.m--------------------------function C10=notes_sup_10(NOTE) TAILLE=size(NOTE,2); % ou bien length(notes) % calcul C10=0; le nombre de notes >=10 for i=1:TAILLE if(NOTE(i)>=10) C10=C10+1; end end --------------notes_sup_moy.m function [MOY,CMOY] = notes_sup_moy(NOTE) TAILLE=size(NOTE,2); % calcul la moyenne des notes MOY = sum(NOTE)/TAILLE; % calcul CMOY=0; le nombre de notes > moyenne for i=1:TAILLE if(NOTE(i)>MOY) CMOY=CMOY+1; end end Exercice 2 : Soit Ecrire un programme (dans un fichier nommé prog.m) qui trace le signal y(t) dans l’intervalle [-4 , +4] avec un pas de . Ecrire sur la figure du tracé de y(t) les labels "x" et "y" des axes x et y et dans le titre " y=sin x si x<=0 et sin 4x si x>0 " Ecrire une fonction posfunc (dans un fichier posfunc.m) qui renvoi les valeurs positives du signal y(t). Tracer sur la même fenêtre le tracé du résultat de cette fonction avec une couleur différente. Solution : --------programme principal clc clear all % echo on pour afficher le texte suivant en commentaire % dans la fenetre de commande lors de l'execution du programme echo on; %------------------------------%génération de sin( kx ) %y=sin x si x <= 0 et sin 4x autre %---------------------------------echo off; x=-4*pi:pi/100:4*pi; pas=pi/100; x1=-4*pi:pas:0; y1 = sin(x1); x2=pas:pi/100:4*pi; y2 = sin(4*x2); x=[x1 x2]; y=[y1 y2]; yy = sin(x).*(x<=0) + sin(4*x).*(x>0); %test logique clf; subplot(2,1,1) plot([x1 x2],[yy]); xlabel('x'); ylabel('y'); title('y=sin x si x<=0 et sin 4x si x>0 '); grid; hold on; y=posfunc(yy); subplot(2,1,2) plot([x1 x2],[y],'r'); ----posfunc.m function z=posfunc(y) n=length(y); z=zeros(n,1); %créer un vecteur ligne ayant les même dimension que y for i=1:n if(y(i)>0) z(i)=y(i); end end Exercice 2 : Soit la matrice A suivante : A=[ 10 12 14 9 10; 13 11 10 10 12; 11 10 9 8 11]; Cette matrice représente les notes obtenues par trois étudiants dans 5 modules différents. On rappelle que ces 5 modules ont le même coefficient. On demande d’écrire un programma Matlab principal qui utilise trois fonctions Matlab et qui réalisent les opérations suivantes : 1ère fonction : permet de calculer et afficher la moyenne de chacun des étudiants. 2ème fonction : permet de calculer et afficher la moyenne des trois étudiants dans chaque module, 3ème fonction : permet de calculer et afficher le nombre de notes supérieurs ou égales à 10 pour chacun des étudiants. Solution: --------programme principale clear all clc %les colonnes de cette matrice representent les notes de 3 étudiants (lignes) A=[ 10 12 14 9 10; 13 11 10 10 12; 11 10 9 8 11]; %calculer et afficher la moyenne de chacun des etudiants calc_moy(A); %calculer et afficher la moyenne des trois etudiants dans chaque module calc_moy_module(A); % calculer et afficher le nombre de notes > 10 pour chaque etudiant calc_sup_10(A); -----------calc_moy.m %calcul de la moyenne du i eme étudiant function calc_moy(A) % le nombre de modules nb=size(A,2); % le nombre d'étudiants nb_etudiant= size(A,1); moy =zeros(nb_etudiant,1); % creer un vecteur pour stocker les moyennes fprintf('\n---------- Moyennes des étudiants ------------\n'); for i=1:nb_etudiant moy(i) = sum(A(i,:)) / nb; fprintf('la moyenne de l''etudiant %d: %.2f\n',i, moy(i)); end % il est possible de calculer la moyenne de façon vectorielle % pour calculer la moyenne selon les lignes % moy= mean(A,2) ---------------calc_moy_module.m function calc_moy_module(A) % dans ce cas la moyenne est calculée selon les colonnes % le nombre de modules nb=size(A,2); % le nombre d'étudiants nb_etudiant= size(A,1); moy =zeros(nb_etudiant,1); % creer un vecteur pour stocker les moyennes dans chaque module fprintf('\n----------Moyennes des étudiants dans chaque module----- ---\n'); for i=1:nb moy(i) = sum(A(:,i)) / nb_etudiant; fprintf('la moyenne des étudiants dans le module %d: %.2f\n',i, moy(i)); end % il est possible de calculer la moyenne de façon vectorielle % pour calculer la moyenne selon les lignes % moy= mean(A,1) --------------------- calc_sup.m function calc_sup_10(A) % le nombre de modules nb=size(A,2); % le nombre d'étudiants nb_etudiant= size(A,1); nbsup =zeros(nb_etudiant,1); % creer vecteur pour stocker le nombre de note >10 for i=1:nb_etudiant for j=1:nb if(A(i,j)>=10) nbsup(i)=nbsup(i)+1; end end end fprintf('\n---------Nombre de notes >=10 pour chaque étudiant -------\n') for i=1:size(A,1) fprintf('l''étudiant %d a obtenu %d notes >=10 \n',j,nbsup(i)); end