Mont-Saint-Aignan – 7 décembre 2006 – Benoît Decoux
1
- Traitement du Signal –
Travaux Pratiques - 1ère séance Sommaire :
1) Prise en main de Scilab 1.1) Commande de base
1.2) Génération et affichage d’un signal a) Signal sinusoïdal
b) Signal de parole
2) Séries de Fourier (appliquées à la synthèse additive)
1) Prise en main de Scilab
1.1) Commandes de base
Scilab est un langage de programmation scientifique, développé sur le modèle de Matlab par l’INRIA (Institut National de Recherche en Informatique et Automatique), un laboratoire français. Sa syntaxe est donc très proche de celle de Matlab ; il possède des librairies de fonctions moins nombreuses que Matlab mais est en développement rapide. Chacun peut en effet écrire ses propres librairies et les proposer à l’INRIA pour les proposer comme ajouts au logiciel. Il est téléchargeable gratuitement sur le site www.scilab.org.
Il s’agit d’un langage interprété, c’est à dire que si l’on écrit une suite de commandes, celles-ci sont traitées une à une. Les variables utilisées dans une ligne de commande restent alors en mémoire. La liste des commandes peut également être copiée dans un fichier texte (portant l’extension .sce) ; il est recommandé de le faire lorsque celle-ci s’allonge. La structure de ces programmes peut alors être très proche d’un programme en C, les déclarations de variables et les allocations mémoire en moins.
Comme Matlab, Scilab fonctionne sur le principe du calcul matriciel. Toutes les variables sont vues comme des matrices. Une variable simple (ce qu’on appelle "un scalaire") est vue comme un tableau à une ligne et une colonne ; un vecteur de N éléments est vu comme une matrice à une colonne et N lignes.
En dernière page de ce document est donnée une suite de commande destinée à la découverte des principales commandes de Scilab par la pratique directe, de manière progressive. Il est fortement conseillé de toutes les tester, et de les comprendre, pour aborder plus facilement les programmes suivants.
Pour des explications sur les commandes Scilab, on peut utiliser la commande help suivi du nom de la commande. Si malgré cela il y a toujours quelque chose qui n’est pas clair, il faut avoir recours à l’enseignant. Il est conseillé de commenter à chaque l’effet des commandes ; cela peut s’avérer très utile pour la suite.
Remarque importante : pour cette partie, il n’y a rien à rédiger sur le compte-rendu.
Mont-Saint-Aignan – 7 décembre 2006 – Benoît Decoux
2 1.2) Génération et affichage de signaux
a) Signal sinusoïdal
On souhaite générer afficher un signal sinusoïdal d’équation ) ft 2 sin(
. A ) t sin(
. A ) t (
s = ω = π
où A est son amplitude, f sa fréquence et ω sa pulsation.
Les différentes étapes ci-dessous permettent de réaliser cette opération.
Remarque : le nombre π s’obtient sous Scilab en écrivant %pi.
1.2.1) Pour connaître les instants des échantillons de ce signal, il faut générer un vecteur dont les éléments représentent des instants régulièrement espacés. On choisit les paramètres suivants :
• fréquence d’échantillonnage : fe=44100Hz
• N=1/(10Te) échantillons par période (Te période d’échantillonnage) Générer ce vecteur pour une période de signal.
1.2.2) Compléter ce programme pour générer et afficher graphiquement une période d’un signal sinusoïdal d’amplitude A=1 et de fréquence f=10Hz.
1.2.3) Modifier le programme pour afficher 3 périodes de signal, en rouge.
b) Signal de parole
1.2.4) En utilisant la commande wavread, afficher graphiquement le signal contenu dans le fichier WAV fourni avec cet énoncé.
1.2.5) Observer la forme du signal en quelques endroits différents en n’affichant que quelques centaines d’échantillons.
2) Séries de Fourier (appliquées à la synthèse additive)
2.1) Additionner le fondamental avec le 1er harmonique, puis avec le 2e, puis le 3e, puis le 4e, d’un signal carré et l’afficher graphiquement. Interpréter le résultat.
2.2) Recommencer pour 100 puis 1000 harmoniques. Observer et commenter le résultat.
2.3) Reprendre la question 2.1 pour un signal en dents de scie.
2.4) Même chose pour un signal triangulaire.
Mont-Saint-Aignan – 7 décembre 2006 – Benoît Decoux
3
Prise en main de Scilab par l’exemple (Partie 1)
x=2;
x
clear x x
x=3 clear x x=[1 2 3];
x
clear x
x=[1 2 3] //noter la différence par rapport à la 1ère commande y=[4;5;6]
x’
y’
clear y y=[4 5 6]
z=[x y]
clear z z=[x;y]
y(2) //noter que les indices commencent à 1 z(2,3)
z’ //transposition de matrice size(z)
size(z’) length(z) length(z’) help size t=[0:9]
t=(0:9) size(t)
t=[0:0.1:0.9]
t=[0:9]’
size(t)
%pi clear
for i=1:10 s(i)=i; end s
clear
t=0:0.1:2*%pi
s=sin(t) //observer ces valeurs plot2d(s)
plot2d(t,s) //noter la différence
xsetech([0,0,1,1/2]); //définition de la zone graphique help
plot2d(s)
xsetech([0,1/2,1,1/2]);
plot2d(t,s) clear
N=10 e=0.1
t=(0:N-1)*e m=ones(2,3) zeros(3,2) eye(3,3) m(:,2)=0 m(2,:)=0 x=[1 2 3]
y=[4;5;6]
x*y x.*y’