T. P. Traitement du Signal Maîtrise E.E.A. - LASC
T. P. Traitement du Signal Maîtrise E.E.A. - LASC
T. P. Traitement du Signal Maîtrise E.E.A. - LASC
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
T. P. <strong>Traitement</strong> <strong>du</strong> <strong>Signal</strong><br />
Maîtrise E.E.A.<br />
Année Universitaire 2004/2005<br />
E. Losson, O. Horn, G. Bourhis et A. Fattouh
TP 1 : INITIATION A MATLAB<br />
1) But de TP<br />
Il s’agit de se familiariser avec le logiciel MATLAB qui intègre l’analyse numérique et le calcul<br />
matriciel. MATLAB (MATrix LABoratory) est un logiciel puissant de calcul matriciel. En effet, toute<br />
variable est intro<strong>du</strong>ite sous forme de matrice.<br />
Exemple: un nombre (réel, complexe ou entier) correspond à une matrice 1 x 1,<br />
un vecteur de n nombres correspond à une matrice 1 x n.<br />
Ce TP doit permettre à tout étudiant de maîtriser l’environnement <strong>du</strong> logiciel de manière à pouvoir<br />
travailler de manière autonome.<br />
2) Instructions élémentaires utilisées dans MATLAB<br />
2.1) Manipulations de variables et opérations arithmétiques sur les matrices<br />
Après avoir cliqué sur l’icône MATLAB dans WINDOWS, vous vous trouvez dans la feuille de calcul de<br />
MATLAB que l’on appellera fenêtre MATLAB. Le curseur se situe derrière 'l'invite' représenté par ce<br />
symbole: >><br />
A cet endroit vous pouvez utiliser MATLAB aussi simplement qu’une machine à calculer.<br />
Taper par exemple 2+3 puis Entrée, le résultat apparaît directement à la suite.<br />
Bien enten<strong>du</strong> MATLAB est beaucoup plus puissant que votre calculatrice puisque vous pouvez réaliser<br />
des programmes structurés, travailler sur des matrices de grande dimension, faire des calculs sur des<br />
nombres complexes, afficher ou imprimer des graphes de qualité en 2D ou 3D. Enfin le grand avantage de<br />
MATLAB est d’offrir à l’utilisateur un grand nombre de fonctions dédiées soit au calcul numérique, soit<br />
au traitement <strong>du</strong> signal, soit à l’automatique ou encore aux réseaux de neurones.<br />
Nous n’utiliserons qu’une infime partie des immenses possibilités de calcul de MATLAB, nous allons bien<br />
sûr commencer par les plus élémentaires d’entre elles.<br />
Assignation d’une variable : taper a=2 puis ‘Entrée’ (pour valider votre opération) et la variable a vaudra<br />
2.<br />
Attention MATLAB fait la différence entre les majuscules et les minuscules.<br />
Taper par exemple a et le contenu de la variable a sera affiché, c’est à dire 2. Si vous tapez A aucune<br />
valeur ne sera affichée puisque la variable A n’est pas allouée.<br />
Vous pouvez fort bien réallouer une autre valeur à la variable a. Taper par exemple:<br />
3
a=[1 2; 3 4] et le résultat suivant sera affiché :<br />
a =<br />
1 2<br />
3 4<br />
La variable a est ainsi devenue une matrice 2 x 2. Nous verrons dans le paragraphe suivant comment l'on<br />
peut définir des matrices sans nécessairement donner tous les éléments de celles-ci. Dans la définition de<br />
la matrice a donnée ci dessus, les crochets servent à englober tous les éléments et le point virgule<br />
permet de séparer chaque ligne. A noter que les indices partent obligatoirement de 1, ils ne sont pas<br />
paramétrables comme dans d’autres langages. Ainsi si vous tapez a(1,1), le résultat affiché sera 1. Le<br />
chiffre 1 sera donc l’élément (1,1) de la matrice a; on ne pourra pas changer cela pour qu’il devienne<br />
l’élément (0,0).<br />
Pour extraire une ligne ou une colonne d’une matrice, il existe les instructions a(n, :) et a( :,n) où n<br />
représente le numéro de la ligne. Tester ces instructions en tapant a(1, :) et a( :,1).<br />
Pour transposer la matrice, il suffit de taper a’. Les transpositions peuvent être utiles pour transformer un<br />
vecteur ligne en vecteur colonne, ou inversement.<br />
Pour créer une matrice, nous avons vu qu’il était possible de la définir à partir de l’ensemble de ses<br />
éléments mis entre crochets en séparant les lignes par des points virgules. Dans le cas de matrices<br />
élémentaires, Matlab permet de définir celles-ci de manière simple, pour définir une matrice x ne<br />
contenant que des 0 par exemple, il suffit de taper : x=zeros(m,n) où m et n représentent respectivement<br />
le nombre de lignes et le nombre de colonnes. Les instructions ones et eye permettent de définir<br />
respectivement des matrices de 1 et des matrices identité. Il existe d’autres matrices élémentaires qu’il<br />
est possible de créer de cette manière, reportez vous à l’aide de Matlab pour en prendre connaissance en<br />
cliquant sur Help puis Help Window et matlab\elmat. Vous trouverez également sous cette rubrique :<br />
- des instructions donnant des informations sur les matrices comme la taille par exemple : size et<br />
length.<br />
- des instructions permettant de manipuler les matrices comme la rotation avec rot90, flipud, fliplr.<br />
Passons à présent aux opérations matricielles:<br />
- Addition: taper: b=2+a et vérifier l’opération réalisée.<br />
taper:<br />
c=a+b et vérifier le résultat.<br />
- Soustracti on: taper: b=b-2 et vérifier que b vaut à présent a.<br />
taper:<br />
b=b-a et vérifier que les éléments de b sont nuls.<br />
- Multiplication: taper: b=2*a et noter ce que vaut b<br />
taper: c=a.*b et relever les valeurs de c pour comprendre<br />
comment les éléments de a et b sont multipliés entre eux.<br />
taper: d=a*b et donner la différence par rapport à l’opération<br />
précédente.<br />
4
Attention cette dernière opération n’est pas commutative contrairement au .*. Le pro<strong>du</strong>it b*a est donc<br />
différent de d (sauf cas particulier comme ici).<br />
- Division: taper: c./a et comparer le résultat avec b.<br />
taper: c./b et comparer le résultat avec a.<br />
taper:<br />
a\d et vérifier que le résultat correspond à l’inverse de a<br />
multiplié par d (c’est à dire b).<br />
taper:<br />
d/b et vérifier que le résultat correspond au pro<strong>du</strong>it de d<br />
par l’inverse de b (c’est à dire a).<br />
- Puissance: taper: a.^2 et expliquer le type d’opération effectuée.<br />
taper:<br />
a^2 et comparer ce résultat avec le précédent.<br />
Nous venons de créer un certain nombre de variables. Contrairement aux langages de programmation les<br />
plus courants, il n'y a pas besoin de déclarer les variables ainsi que leur type (entier, réel ou autre).<br />
Tapez la commande who pour connaître les différentes variables utilisées. Pour effacer les variables,<br />
tapez clear. Attention, de nombreuses erreurs de programmations pourront être commises à cause de<br />
noms de variables utilisés plusieurs fois et devant désigner des choses différentes.<br />
2.2) Génération de matrices ou de vecteurs et calculs sur les nombres complexes en traitement<br />
<strong>du</strong> signal<br />
En traitement <strong>du</strong> signal, nous travaillerons surtout avec des vecteurs qui correspondent à des matrices à<br />
une seule ligne ou une seule colonne. Ces vecteurs permettent de simuler un signal échantillonné.<br />
Prenons l’exemple de la fonction : y t)<br />
sin( 2πt)<br />
( = .<br />
Nous définissons tout d’abord un vecteur temps par l’instruction suivante :<br />
t=t0 :te :tf avec t0 : l’instant initial choisi, te : la période d’échantillonnage, tf : le temps correspondant au<br />
dernier échantillon. Une autre écriture possible est : t=[t0 :te :tf].<br />
Pour les simulations, prenez par exemple : t=0 :0.1 :1<br />
Pour définir y, il suffit ensuite de taper : y=sin(2*pi*t). La variable pi est prédéfinie dans Matlab et<br />
correspond bien sur à la valeur de π. Pour connaître l’ensemble des fonctions mathématiques<br />
élémentaires définies dans Matlab, reportez vous à l’aide en cliquant sur Help puis Help Window et<br />
matlab\elfun. Les fonctions sont classées dans trois familles :<br />
- les fonctions trigonométriques<br />
- les fonctions exponentielles et logarithmiques<br />
- les fonctions sur les nombres complexes.<br />
Cette dernière catégorie de fonctions est également intéressante pour nos applications en traitement <strong>du</strong><br />
signal. Il est par exemple possible de définir des fonctions exponentielles complexes comme :<br />
5
y=exp(i*2*pi*t) que l’on rencontre dans les définitions des transformées de Fourier. Les variables i et j<br />
sont prédéfinies dans Matlab pour les nombres complexes. Parmi les opérations les plus fréquemment<br />
utilisées en traitement <strong>du</strong> signal, vous avez :<br />
- abs : valeur absolue d’un réel ou norme d’un complexe.<br />
- angle : phase correspondant au nombre complexe.<br />
- conj : conjugué d'un nombre complexe.<br />
- real: partie réelle d'un nombre complexe.<br />
- imag: partie imaginaire d'un nombre complexe.<br />
D'autres instructions permettent l'analyse des données contenues dans des matrices sont également très<br />
utiles. C'est le cas des fonctions :<br />
- max: qui donne la valeur maximale d'une matrice.<br />
- min: qui donne la valeur minimale d'une matrice.<br />
- mean: qui donne la valeur moyenne d'une matrice.<br />
- hist: qui donne l'histogramme des valeurs contenues dans la matrice.<br />
- sum: qui calcule la somme des éléments d'une matrice<br />
Pour plus de renseignements sur ce type de fonctions, reportez vous à l'aide dans la rubrique<br />
matlab\datafun où figure un grand nombre d'instructions utiles au traitement de données.<br />
Si vous voulez avoir de l'aide sur une fonction dont vous connaissez le nom, il suffit de taper help suivi <strong>du</strong><br />
nom de l'instruction dans la fenêtre de travail pour avoir des renseignements sur la syntaxe et le rôle de<br />
cette instruction.<br />
2.3) Graphisme<br />
Pour obtenir l’aide sur les instructions propres au graphisme, sélectionner la rubrique matlab\graphics.<br />
Afin de vous guider nous présenterons en premier lieu la fonction graphique élémentaire: plot<br />
Utilisation de plot pour tracer un graphe en 2 dimensions :<br />
Reprenons les données t et y générées auparavant.<br />
Le vecteur y contenant des nombres complexes, si vous tapez plot(y) , le graphe obtenu représentera la<br />
partie imaginaire de y tracée en fonction de la partie réelle.<br />
Si vous voulez tracer la fonction sinus, tapez plot(imag(y)) ou plot(t,imag(y)) si vous voulez avoir en<br />
abscisse le vecteur temps t.<br />
Si vous voulez tracer la fonction sinus et la fonction cosinus sur un même graphe, tapez<br />
plot(t,real(y),t,imag(y)).<br />
Tapez la suite d’instructions suivantes :<br />
6
t2=0 :0.001 :1 ;y2=cos(2*pi*t2) ;<br />
plot(t2,y2)<br />
hold on<br />
stem(t,real(y))<br />
Dé<strong>du</strong>ire d’après les observations <strong>du</strong> graphe obtenu à la suite de chacune des 3 dernières instructions ce<br />
que réalisent les fonctions hold on et stem.<br />
Vous pouvez fort bien spécifier la couleur et le style de tracé en rajoutant une chaîne de caractères S<br />
dans l’instruction: plot(X,Y,S). Par exemple, si vous tapez: plot(t,real(y),’b+’), vous tracerez des + de<br />
couleur bleue. Pour connaître les différentes possibilités de tracé, tapez help plot.<br />
Tracé de plusieurs graphes dans la même fenêtre :<br />
Grâce à l’instruction subplot, il est possible de spécifier le nombre de graphes que l’on veut tracer dans<br />
une fenêtre. SUBPLOT(M,N,P) permet de diviser la fenêtre en M x N, et à la prochaine instruction plot, le<br />
graphe sera tracé à l’emplacement n° P. A titre d’exemple taper:<br />
subplot(1,3,1)<br />
plot(t,real(y))<br />
subplot(1,3,2)<br />
plot(t,imag(y))<br />
subplot(1,3,3)<br />
plot(real(y),imag(y))<br />
2.4) Programmation structurée, instructions conditionnelles et boucles<br />
L'écriture de fichiers de commandes ou scripts :<br />
Un fichier de commandes ou script est une séquence d'instructions Matlab. Ces fichiers portent<br />
toujours l'extension m. Les variables créées dans ces fichiers sont globales, ce qui signifie que depuis la<br />
fenêtre Matlab vous pouvez accéder aux contenus de ces variables. Les fichiers de commandes<br />
permettent la saisie de données grâce à l'instruction input utilisée dans l'exemple qui va vous être<br />
présenté.<br />
Nous allons écrire un script qui permet le tracé d'une fonction y=x²+5. En haut de la fenêtre Matlab,<br />
cliquez sur File puis New et M-File. Puis reportez dans l'éditeur qui vient de s'ouvrir (MATLAB<br />
Editor/Debugger) la suite d'instructions suivantes:<br />
clc<br />
T=input('Durée <strong>du</strong> signal = ');<br />
N=input('Nombre de points = ');<br />
7
t=0:T/N:T-T/N;<br />
y=t.^2+5;<br />
plot(t,y);<br />
Pour sauvegarder ce script, il faut au préalable créer un répertoire de travail sur le disque <strong>du</strong>r, nommez<br />
le par exemple mst2 sur la disquette. Cliquez ensuite sur File puis Save as et donnez le nom suivant:<br />
courbe1 ainsi que le répertoire que vous venez de créer. Pour exécuter ce script, donnez le nom <strong>du</strong><br />
répertoire ou plus précisément le chemin (path) en cliquant sur File puis Set Path. Revenez dans la fenêtre<br />
de Matlab et tapez: courbe1. Vous devrez donner une <strong>du</strong>rée <strong>du</strong> signal et un nombre de points avant de<br />
visualiser le tracé de la fonction.<br />
L'écriture de fichiers de fonctions :<br />
Vous pouvez créer de nouvelles fonctions spécifiques à votre domaine de travail qui auront le<br />
même statut que toutes les autres fonctions Matlab, comme par exemple les fonctions sin, cos, sinc,…<br />
L'avantage de fonctions par rapport aux scripts est le paramétrage facile d'entrées et de sorties, ce qui<br />
permet une utilisation commode et une intégration possible dans un script. Les variables utilisées dans les<br />
fonctions sont par défaut locales, mais on peut aussi définir des variables globales grâce à l'instruction<br />
global.<br />
A titre d'application, nous allons écrire une fonction pour générer un tableau de N nombres correspondant<br />
au calcul de la fonction y=x²+5 sur une <strong>du</strong>rée T.<br />
Les fichiers de fonctions portent également l'extension m et sont créés avec le même éditeur que celui<br />
utilisé précédemment pour générer des fichiers de commandes. Voici la suite d'instructions que l'on vous<br />
demande de taper dans un fichier de fonctions que vous nommerez signal1:<br />
function res=signal1(T,N)<br />
% res: vecteur correspondant au signal y=x^2+5<br />
% T: <strong>du</strong>rée <strong>du</strong> signal<br />
% N: nombre de points<br />
temps=0:T/N:T-T/N;<br />
res=temps.^2+5;<br />
La première ligne déclare le nom de la fonction, les arguments d'entrée et de sortie. Sans cette première<br />
ligne, le fichier correspondrait plutôt à un fichier de commandes ou script. Pour exécuter cette fonction<br />
après l'avoir enregistrer sur la disquette, tapez y=signal1(1,50) dans la fenêtre Matlab. La variable y<br />
comprendra alors 50 valeurs calculées à partir d'un vecteur temps allant de 0 à 1seconde. Les lignes<br />
commençant par % dans un fichier de fonctions ou un script permettent de donner des commentaires.<br />
Notez que la variable temps est locale à la fonction signal1 et n'est pas connue dans la fenêtre Matlab,<br />
idem pour T et N.<br />
8
Les boucles et instructions conditionnelles :<br />
La syntaxe de ce type d’instructions (for, while, if) est décrite dans l’aide (option Help, puis Help<br />
Window et la rubrique matlab\lang).<br />
A titre d’exercice utiliser les instructions if et for pour créer une matrice X de dimension<br />
5 x 5 où les éléments de la diagonale sont égaux à 5 et les autres à 7.<br />
Il est souhaitable de ne pas utiliser i et j comme des variables (ex: for i=1:1:n) car i et j sont utilisées pour<br />
définir des nombres complexes.<br />
La ponctuation :<br />
Les virgules, points virgules, et trois points (...) sont utilisés dans les scripts et les fonctions dans<br />
les cas suivants:<br />
- Pour séparer deux instructions sur une même ligne, on utilise la virgule.<br />
Exemple: taper subplot(1,2,1),plot(t,real(y)),subplot(1,2,2),plot(t,imag(y))<br />
L’ensemble de ces instructions sera réalisé en une fois.<br />
- Pour que le résultat de l’opération n’apparaisse pas dans la fenêtre MATLAB, utiliser le point virgule.<br />
Exemple: taper a=[1 2; 3 4];<br />
La matrice a n’est pas retranscrite à l’écran.<br />
- Si vous avez une instruction qui est trop longue, vous pouvez l’écrire sur deux lignes grâce au trois<br />
points.<br />
Exemple: taper a=[1 2 3 4 5 6 7 8 9;...<br />
11 22 33 44 55 66 77 88 99]<br />
Cette dernière instruction est intéressante à utiliser pour la mise en page de vos programmes.<br />
Pour voir de manière plus générale à quoi peuvent servir les signes de ponctuation, choisissez la rubrique<br />
matlab\general et cliquez au bas de la page sur See also PUNCT.<br />
3) Exercices<br />
3-1) Calcul d’intégrales par la méthode des trapèzes<br />
Créez une fonction que vous nommerez: integ dans laquelle vous placerez toutes les instructions<br />
nécessaires pour réaliser l’intégrale par la méthode des trapèzes d’une fonction quelconque sur une <strong>du</strong>rée<br />
allant de t 0 à t f par pas de t e .<br />
On veut en fait qu’en tapant par exemple integ(‘sin’,0,2*pi,0.01), on obtienne le résultat de l’intégrale de la<br />
fonction sinus prise entre 0 et 2π avec un pas de 0.01.<br />
Le calcul de l’intégrale d’une fonction f(t) par la méthode des trapèzes est obtenu par la formule<br />
suivante :<br />
9
t f<br />
∫<br />
t0<br />
f ( t)<br />
dt<br />
t<br />
⎡<br />
N −1<br />
e<br />
= f (0) f ( N)<br />
2<br />
2<br />
⎢ + + ∑<br />
k=<br />
1<br />
⎣<br />
⎤<br />
f ( k)<br />
⎥ avec<br />
⎦<br />
f(k) =<br />
f(kt<br />
e<br />
)<br />
et<br />
N<br />
t<br />
=<br />
f<br />
− t<br />
t<br />
e<br />
0<br />
Pour réaliser votre programme, vous devrez utiliser des instructions spécifiques au traitement de chaînes<br />
de caractères comme par exemple eval et strcat. L'aide concernant l'ensemble des fonctions de<br />
traitement des chaînes de caractères se trouve sous la rubrique matlab\strfun.<br />
∫ +∞ −∞<br />
sin c ( t)<br />
dt<br />
- A titre d'application estimez l'intégrale suivante . Calculer la valeur théorique de cette<br />
intégrale et vérifier que le résultat obtenu numériquement en prenant des bornes de –100 à +100 s'y<br />
approche.<br />
3-2) Calcul de transformée de Fourier discrète.<br />
Créez un script tfd qui vous affichera quatre graphes correspondant à :<br />
- la représentation temporelle <strong>du</strong> signal échantillonné<br />
- la partie réelle de la représentation spectrale obtenue par calcul de la TFD<br />
- la partie imaginaire de la représentation spectrale obtenue par calcul de la TFD<br />
- le mo<strong>du</strong>le de la représentation spectrale obtenue par calcul de la TFD<br />
Le signal a étudier est donné par une fonction sinus de fréquence 1Hz et d’amplitude 1. Les paramètres<br />
demandés par le programme seront la fréquence d’échantillonnage (f e ) et le nombre de points de la T.F.D.<br />
(N). Utiliser de préférence la fonction stem pour tracer des spectres de raies plutôt que plot.<br />
La formule générale donnant la T.F.D. est la suivante:<br />
N<br />
∑ − 1<br />
⎛ mn ⎞<br />
X[<br />
n]<br />
= x(<br />
m) exp⎜<br />
− i2π ⎟ avec<br />
m=<br />
0 ⎝ N ⎠<br />
N valeurs de X[n] sont calculées pour n allant de 0 à N-1.<br />
⎛<br />
x ( m)<br />
= x(<br />
mT =<br />
⎜<br />
e<br />
) x<br />
⎝<br />
m<br />
f<br />
e<br />
⎞<br />
⎟<br />
⎠<br />
Attention aux indices car Matlab n’admet pas des indices (numéros de lignes ou colonnes de matrices)<br />
inférieurs à 1. Pour éviter les boucles for, il est souhaitable de réaliser le calcul sous forme matriciel :<br />
X=Wx (cf cours de TNS).<br />
Commentez les graphes obtenus pour N=4 et f e =4Hz (cf TD de TNS).<br />
A noter que la fonction fft de Matlab permet la calcul de la transformée de Fourier discrète par un<br />
algorithme de transformée rapide.<br />
3-3) Figures de Lissajou<br />
Pour créer des figures de Lissajou, il faut tracer une fonction sinus de fréquence f 1 en fonction d’une<br />
autre fonction sinus de fréquence f 2 (les deux fréquences f 1 et f 2 étant proportionnelles) dont le<br />
déphasage avec la première sinusoïde peut varier. Vous pouvez ainsi créer des graphes animés en<br />
réitérant plusieurs graphes avec un déphasage qui varie de façon linéaire. Utilisez une boucle while ainsi<br />
10
que l’instruction pause(0.1) dans cette boucle pour avoir le temps de voir l’évolution des graphes. Pour ne<br />
pas être trop original, vous nommerez votre script lissajou.m<br />
- Observez par exemple ce qui se passe pour f 1 =f 2 =1Hz et un déphasage qui varie de 0 à 2π par pas<br />
de 0.1radian ; fixer le vecteur temps ainsi : t=0 :0.01 :1 .<br />
- Par la suite prenez par exemple f 2 =2, 3 ou 4 ; c’est plus joli.<br />
4) Conclusion<br />
Vous serez vite convaincus que ce logiciel a de nombreux avantages pour tout type de calcul. Parmi les<br />
points forts de MATLAB:<br />
- important nombre de fonctions prédéfinies, ce qui permet de réaliser des programmes de calculs<br />
complexes en très peu de lignes de programmation.<br />
- graphisme de très haute qualité.<br />
- simplicité <strong>du</strong> langage de programmation.<br />
- les paramètres n’ont pas à être déclarés; ceci est un avantage et un inconvénient car vous<br />
pouvez commettre des erreurs en utilisant deux fois le même nom de variable dans un programme.<br />
11
TP 2 : ANALYSE ET SYNTHÈSE DE SIGNAUX PÉRIODIQUES<br />
1) INTRODUCTION<br />
Le but de ce TP est d’établir la correspondance entre le spectre en amplitude d’un signal<br />
périodique et son développement en série trigonométrique. Ceci doit permettre dans un second temps de<br />
synthétiser différents signaux périodiques à partir <strong>du</strong> relevé de leurs spectres.<br />
Nous allons à présent rappeler quelques généralités sur l’analyse de Fourier. La décomposition en<br />
série de Fourier d’un signal périodique de période T 0 (ou à <strong>du</strong>rée limitée sur un intervalle T 0 ) s’écrit :<br />
∑ +∞ ⎛ t ⎞<br />
x( t)<br />
= x<br />
⎜<br />
⎟<br />
n<br />
exp i2π n<br />
(1)<br />
n=<br />
−∞ ⎝ T0<br />
⎠<br />
x(t) : signal périodique de période T 0 .<br />
x n : coefficients de Fourier de x(t).<br />
Ces coefficients donnent une représentation en fréquence ou spectrale <strong>du</strong> signal. Pour passer de la<br />
représentation temporelle à la représentation spectrale, on utilise la formule suivante :<br />
1 ⎛ t<br />
∫<br />
⎟ ⎞<br />
x = ⎜<br />
n<br />
x(<br />
t)exp<br />
− i2π n dt<br />
(2)<br />
T<br />
[ T ] ⎝ T0<br />
⎠<br />
0 0<br />
1/T 0 : représente une fréquence appelée fondamentale, et de manière plus générale on nomme n ième<br />
harmonique la fréquence correspondant à n/T 0 .<br />
Prenons une fonction cosinus comme exemple pour calculer le spectre d’un signal périodique à partir des<br />
séries de Fourier :<br />
T 0 : période<br />
⎛ t ⎞<br />
x(<br />
t)<br />
= Acos<br />
⎜2π ⎟<br />
(3)<br />
⎝ T0<br />
⎠<br />
A : amplitude<br />
En utilisant l’équation (2) pour calculer les coefficients de Fourier, nous obtenons :<br />
x n =A/2 pour n=±1 et x n =0 pour n différent de ± 1<br />
Le spectre en amplitude est donné par la norme de x n et peut être tracé de la façon suivante :<br />
13
On remarque que ce signal périodique n’est constitué que d’une fondamentale, il est monochromatique.<br />
Le domaine des fréquences négatives n’a aucune signification physique, il est dû aux fonctions<br />
exponentielles complexes intro<strong>du</strong>ites dans la définition des séries de Fourier. Pour les signaux réels,<br />
le spectre en amplitude sera toujours une fonction paire. Les analyseurs de spectre délivrent plus<br />
généralement le spectre en puissance qui est représenté ci-dessous dans le cas de la fonction cosinus<br />
Cette représentation permet de faire un calcul très simple de la puissance moyenne totale par le<br />
théorème de Parseval :<br />
1 T<br />
∫<br />
∑ +∞<br />
n=<br />
−∞<br />
0 2<br />
2<br />
P = x ( t)<br />
dt = xn<br />
(4)<br />
T<br />
0<br />
Le résultat P=A 2 /2 est alors immédiat à partir <strong>du</strong> spectre représenté précédemment.<br />
0<br />
14
Relations entre la série de Fourier et la décomposition en série trigonométrique.<br />
Pour obtenir la relation entre les coefficients x n et les coefficients en cosinus (a n ) et les<br />
coefficients en sinus (b n ), on remplace la fonction exponentielle complexe dans la formule (1) par cosinus<br />
+ i sinus. Ensuite, on identifie le résultat obtenu avec le développement en série trigonométrique donné<br />
ci-dessous :<br />
x(<br />
t)<br />
= a<br />
⎛<br />
+∞<br />
+∞<br />
∑<br />
⎜<br />
⎟ + ∑<br />
⎜<br />
0<br />
+ an<br />
cos 2 n bn<br />
sin 2πn<br />
n=<br />
1 T0<br />
n=<br />
1 T0<br />
⎝<br />
t<br />
⎞<br />
⎠<br />
⎛<br />
⎝<br />
t ⎞<br />
⎟<br />
⎠<br />
π (5)<br />
On obtient alors la relation suivante entre les coefficients x n et les valeurs de a n et b n :<br />
x<br />
x<br />
n<br />
0<br />
an<br />
− ibn<br />
= pour n différent de 0.<br />
(6)<br />
2<br />
= a<br />
0<br />
1<br />
=<br />
T<br />
0<br />
∫<br />
[ T0<br />
]<br />
x(<br />
t)<br />
dt<br />
Les relations donnant les valeurs de a n et b n sont obtenues à partir des équations (6) et (2) :<br />
2 ⎛ t<br />
∫<br />
⎟ ⎞<br />
a = ⎜<br />
n<br />
x(t)cos 2 π n dt<br />
(7)<br />
T0<br />
[ T ] ⎝ T0<br />
⎠<br />
0<br />
2 ⎛ t<br />
∫<br />
⎟ ⎞<br />
b = ⎜<br />
n<br />
x(t)sin 2 π n dt<br />
(8)<br />
T0<br />
[ T ] ⎝ T0<br />
⎠<br />
0<br />
Les coefficients a n et b n ne sont définis que pour des valeurs de n positives. Dans le cas des signaux réels<br />
(à partie imaginaire nulle) une relation simple provenant de la propriété de symétrie hermitienne permet<br />
de calculer les coefficients x n pour des indices n négatifs à partir des valeurs de x n pour n positif :<br />
x =<br />
*<br />
−n x n<br />
En appliquant ces relations à notre signal sinusoïdal, le seul coefficient différent de 0 est a 1 =A. Ce<br />
résultat s’obtient également de façon très simple dans ce cas particulier en identifiant les équations (3) et<br />
(5).<br />
Relation entre la transformée de Fourier et les coefficients de Fourier pour les signaux périodiques.<br />
Il est également possible de calculer la transformée de Fourier pour un signal périodique de période T 0 , le<br />
résultat obtenu donne en réalité les mêmes informations que les coefficients de Fourier, ceci va être<br />
démontré à présent :<br />
15
X ( f ) =<br />
=<br />
=<br />
=<br />
∫<br />
+∞<br />
−∞<br />
+∞<br />
∫ ∑<br />
+∞<br />
∑<br />
+∞<br />
∑<br />
n=−∞<br />
+∞<br />
n<br />
−∞<br />
n=−∞<br />
x<br />
n<br />
n=−∞<br />
x(<br />
t) exp<br />
∫<br />
x<br />
+∞<br />
−∞<br />
⎛<br />
x<br />
⎜<br />
nδ<br />
f −<br />
⎝<br />
( − i2πft)<br />
⎛ n<br />
exp<br />
⎜i2π<br />
⎝ T0<br />
⎛ ⎛<br />
exp⎜<br />
− i2π<br />
⎜ f −<br />
⎝ ⎝<br />
n<br />
T<br />
0<br />
⎞<br />
⎟<br />
⎠<br />
dt<br />
⎞<br />
t<br />
⎟ exp<br />
⎠<br />
n<br />
T<br />
0<br />
( − i2πft)<br />
⎞ ⎞<br />
⎟<br />
⎟t<br />
dt<br />
⎠ ⎠<br />
dt<br />
(9)<br />
Propriétés de la série trigonométrique :<br />
Il existe de nombreux cas où les coefficients a n et b n se calculent très rapidement :<br />
a) pour un signal réel et pair tous les coefficients b n sont nuls seuls les coefficients a n sont différents de<br />
zéro.<br />
b) pour un signal réel et impair tous les coefficients a n sont nuls seuls les coefficients b n sont non nuls.<br />
Les valeurs de a 0 ne suivent pas les conditions précédentes, a 0 représente la valeur moyenne <strong>du</strong> signal.<br />
Travail demandé<br />
2.1) Calcul des coefficients en série trigonométrique<br />
Calculer les coefficients en série trigonométrique des signaux suivants, prenez soins à bien<br />
relever les périodes des signaux (attention l’axe des abscisses est donné en millisecondes):<br />
a) Sinusoïde redressée<br />
Montrer que :<br />
a n<br />
40<br />
= ,<br />
π<br />
2<br />
( 1−<br />
( 2n)<br />
)<br />
0 =<br />
20<br />
π<br />
a et b n=0 pour tout n.<br />
16
) Rampe<br />
Montrer que:<br />
c) <strong>Signal</strong> mo<strong>du</strong>lé en amplitude<br />
( )<br />
cos πn<br />
b n<br />
= −10<br />
et a n =0 pour tout n.<br />
π n<br />
Ce dernier signal peut être modélisé par l'équation:<br />
y( t)<br />
= (1 + m cos(2πf<br />
t)) cos(2πf<br />
t)<br />
m<br />
p<br />
avec f m =1 kHz: fréquence <strong>du</strong> signal mo<strong>du</strong>lant, f p =8kHz: fréquence de la porteuse, m indice de mo<strong>du</strong>lation<br />
fixé arbitrairement à 0.5 dans le cas présent. Pour trouver la décomposition en série trigonométrique de<br />
17
ce signal, il n'est pas nécessaire d'utiliser les formules 7 et 8 pour calculer les coefficients a n et b n , il<br />
suffit de développer le pro<strong>du</strong>it des fonctions cosinus apparaissant dans l'équation précédente. Le signal<br />
y(t) peut alors s'exprimer comme la somme de fonctions cosinus, on réalise donc aussi la décomposition<br />
de ce signal en somme de plusieurs sinusoïdes que l'on peut appeler série trigonométrique.<br />
- Déterminer la période <strong>du</strong> signal mo<strong>du</strong>lé ainsi que les coefficients de Fourier.<br />
d) Peigne de Dirac<br />
Le peigne de Dirac a été étudié en cours et nous avons déterminé la transformée de Fourier de ce signal<br />
et donc ses différents coefficients de Fourier.<br />
- Calculer les coefficients de Fourier d’un peigne de Dirac de période égale à 1 seconde.<br />
- En dé<strong>du</strong>ire les valeurs des coefficients a 0 , a n et b n .<br />
2-2) Synthèse de signaux périodiques à partir des valeurs de a n et b n précédemment obtenues.<br />
Réalisez des fonctions que vous nommerez sinred.m, rampe.m, modam.m et dirac.m pour réaliser la<br />
synthèse par série trigonométrique des fonctions sinus redressée, rampe, cosinus mo<strong>du</strong>lé en amplitude<br />
par un cosinus, et peigne de Dirac. Les arguments d’entrée de ces fonctions seront :<br />
- N : le nombre de sinusoïdes à sommer<br />
- T 0 : la période de la fonction.<br />
Il n’y a pas d’argument de sortie, il faut simplement tracer les représentations temporelles et<br />
fréquentielles : x(t) et |X(f)|<br />
Pour cela, les signaux seront donc générés à partir d’un vecteur temps t de 1000points répartis sur<br />
l’intervalle [0, 2T 0 ] grâce à la formule suivante :<br />
N<br />
N<br />
⎛ t ⎞ ⎛ t ⎞<br />
xt () = a0<br />
+ ∑ancos⎜2πn ⎟+<br />
∑ bnsin⎜2πn<br />
⎟<br />
n= 1 ⎝ T0 ⎠ n=<br />
1 ⎝ T0<br />
⎠<br />
Pour chaque fonction il faudra calculer les valeurs pour a n , b n et a 0 . C'est ainsi que l'on pourra synthétiser<br />
de façon exacte ou de manière approchée les signaux a),b),c),d) à partir de leurs décompositions en série<br />
trigonométrique.<br />
- Pour les signaux a) et b), relevez et commentez l'évolution des on<strong>du</strong>lations présentes sur les<br />
signaux synthétisés x(t) au fur et à mesure que vous augmentez le nombre N de sinusoïdes. En dé<strong>du</strong>ire<br />
l'origine de ces on<strong>du</strong>lations qui constituent ce qu'on appelle l'effet Gibbs. Comment expliquez vous que<br />
ces on<strong>du</strong>lations soient plus importantes sur la rampe que sur le sinus redressé. Pour vos explications,<br />
basez-vous sur les spectres des signaux générés.<br />
18
- Pour le signal c), vérifiez que le signal que vous obtenez par synthèse de plusieurs sinusoïdes<br />
correspond exactement à celui représenté dans l'énoncé.<br />
- Pour bien visualiser l’effet Gibbs et son évolution avec le nombre N de sinusoïdes ajoutées,<br />
créer dans la fonction Dirac une animation obtenue en ré initialisant dans une boucle while le graphe<br />
obtenu pour le tracer de x(t) au fur et à mesure que N augmente. Expliquer en conclusion pour quelles<br />
raisons il est impossible de générer un peigne de Dirac ou une impulsion de Dirac.<br />
19
TP 3 : UTILISATION DE LA TFD<br />
POUR L’ANALYSE SPECTRALE DE SIGNAUX<br />
1) Intro<strong>du</strong>ction<br />
Le but de ce TP est d’interpréter correctement les résultats obtenus par le calcul d’une transformée<br />
de Fourier discrète dans le cas de signaux périodiques. Il faudra pouvoir lier ces résultats aux<br />
coefficients de Fourier et à la transformée de Fourier <strong>du</strong> signal échantillonné. A titre d’illustration on<br />
traitera des cas simples de signaux périodiques et on verra tout l’intérêt de l’analyse spectrale sur des<br />
signaux périodiques bruités. Nous verrons comment le choix de la fréquence d’échantillonnage et <strong>du</strong><br />
nombre d’échantillons influe sur les spectres obtenus. Pour des rappels sur l’analyse de Fourier de<br />
signaux périodiques, reportez vous à l’intro<strong>du</strong>ction <strong>du</strong> TP 2. On peut facilement exprimer la transformée<br />
de Fourier X(f) à partir des coefficients de Fourier x n pour un signal périodique x(t) :<br />
avec<br />
T 0 : la période de x(t)<br />
∑ +∞ ⎛ n ⎞<br />
X ( f ) = x<br />
⎜ −<br />
⎟<br />
nδ f<br />
(1)<br />
n=<br />
−∞ ⎝ T0<br />
⎠<br />
et<br />
δ : l’impulsion de Dirac ou impulsion unité<br />
En théorie, échantillonner le signal x(t) revient à le multiplier par un peigne de Dirac δ Te (t) de période<br />
égale à la période d’échantillonnage T e . On notera x s (t) le signal échantillonné, il s’écrira en fonction de<br />
x(t) sous la forme :<br />
∑ +∞<br />
n=<br />
−∞<br />
( t − nT )<br />
x ( t)<br />
= x(<br />
t)<br />
δ ( t)<br />
= x(<br />
t)<br />
δ<br />
(2)<br />
s<br />
La transformée de Fourier de x s (t) (X s (f)) s’écrira alors comme le pro<strong>du</strong>it de convolution de X(f) avec la<br />
transformée de Fourier <strong>du</strong> peigne de Dirac qui est également un peigne de Dirac :<br />
Te<br />
e<br />
X ( f ) = X ( f ) ∗ f δ ( f )<br />
s<br />
=<br />
f<br />
∑ + ∞<br />
e<br />
n=<br />
−∞<br />
X<br />
e<br />
fe<br />
( f − nf )<br />
e<br />
(3)<br />
La simplification opérée pour passer de la première à la deuxième ligne de l’équation (3) est <strong>du</strong>e à la<br />
propriété d’élément neutre de l’impulsion de Dirac pour la convolution. La figure suivante illustre la<br />
relation existant entre X(f) et X s (f). Attention la fonction X s (f) étant périodique de période f e , il est<br />
impossible de la représenter dans son intégralité (de -∞ à +∞).<br />
21
Cette figure montre bien qu’il est nécessaire d’échantillonner le signal à une fréquence f e supérieure ou<br />
égale à 2 fois la bande limitée <strong>du</strong> signal B de manière à éviter un recouvrement de spectre (théorème de<br />
Shannon). On comprend dès lors l’intérêt d’un filtre anti-repliement à placer avant l’échantillonneur pour<br />
limiter le spectre <strong>du</strong> signal. On conçoit également qu’une simple opération de filtrage passe-bas puisse<br />
permettre de reconstruire le signal<br />
initial à partir de ces échantillons. La figure précédente montre<br />
également une propriété importante de X s (f) : la périodicité.<br />
La transformée de Fourier discrète (X[n]) de x(t) est directement liée à la transformée de Fourier <strong>du</strong><br />
signal échantillonné (X s (f)) par la relation suivante :<br />
N<br />
∑ − 1<br />
⎛ n ⎞<br />
⎛ mn ⎞<br />
X[<br />
n]<br />
= X<br />
⎜<br />
⎟<br />
s<br />
f = = x( tm<br />
) exp⎜<br />
− i2π ⎟<br />
(4)<br />
⎝ T0<br />
⎠ m=<br />
0 ⎝ N ⎠<br />
Cette équation s’obtient en simplifiant l’expression de la transformée de Fourier de x s (t) calculée en<br />
f=n/T 0 . T 0 désigne ici le temps de mesure <strong>du</strong> signal, N représente le nombre de points échantillonnés sur<br />
cette <strong>du</strong>rée, et t m =mt e où t e est la période d’échantillonnage qui correspond à T 0 /N. La majeure partie des<br />
problèmes d’analyse spectrale par calcul de transformée de Fourier discrète proviennent de cette<br />
limitation de <strong>du</strong>rée <strong>du</strong> signal qui est évidemment indispensable. En effet limiter la <strong>du</strong>rée de x(t) revient à<br />
multiplier x(t) par une fonction porte de largeur égale à T 0 . X(f) sera alors convolué par la transformée de<br />
Fourier de cette fonction porte qui est un sinus cardinal. Au lieu d’avoir un spectre de raies pour un<br />
signal périodique on aura des fonctions sinus cardinales présentant différents lobes (un lobe principal ou<br />
central et des lobes secondaires) qui donnent lieu à l’effet Gibbs. Les problèmes de résolution spectrale<br />
en analyse par transformée de Fourier discrète sont liés au recouvrement possible de ces lobes.<br />
A titre d’exemple, prenons le cas d’une fonction cosinus de fréquence et d’amplitude unité :<br />
( π )<br />
x() t = cos 2 ft avec f = 1Hz<br />
1 1<br />
1<br />
X ( f)<br />
= f − f + f + f<br />
2<br />
( δ ( 1) δ ( 1)<br />
)<br />
22
Le spectre en amplitude de ce signal périodique est donc formé d’une impulsion de Dirac dans les<br />
fréquences positives située en f 1 =1Hz. Pour calculer une TFD sur ce signal, on est amené à limiter le<br />
nombre d’échantillons <strong>du</strong> signal, donc la <strong>du</strong>rée de celui-ci. On note alors x`(t) le signal x(t) limitée à un<br />
intervalle de temps allant de 0 à T 0 :<br />
⎛ T0<br />
⎞<br />
x '( t) = x( t) rT<br />
0⎜t − ⎟ avec T0<br />
= 1s<br />
⎝ 2 ⎠<br />
T<br />
T<br />
X '( f) = sin c( ( f − f ) T ) exp −iπ( f − f ) T + sin c<br />
2 2<br />
f + f T exp − i f + f T<br />
( ) (( ) ) ( π ( ) )<br />
0 0<br />
1 0 1 0 1 0 1 0<br />
Le spectre en amplitude <strong>du</strong> signal limité en <strong>du</strong>rée laisse alors apparaître des pics ou lobes dont le plus<br />
important est situé à f 1 =1Hz.<br />
Après échantillonnage de ce signal limité à l’intervalle [0,T 0 [, le spectre <strong>du</strong> signal devient périodique de<br />
période f e . Ce spectre est déterminé à partir de la transformée de Fourier <strong>du</strong> signal échantillonné donné<br />
par :<br />
X ( f ) =<br />
s<br />
f<br />
∑ +∞ e<br />
k = −∞<br />
X '<br />
( f − kf )<br />
e<br />
La TFD correspond à une ensemble d’échantillons prélevés sur la transformée de Fourier <strong>du</strong> signal<br />
échantillonné calculés par :<br />
N<br />
∑ − 1<br />
⎛ n ⎞<br />
⎛ mn ⎞<br />
X[<br />
n]<br />
= X<br />
⎜<br />
⎟<br />
s<br />
f = = x( tm<br />
) exp⎜<br />
− i2π<br />
⎟<br />
⎝ T0<br />
⎠ m=<br />
0 ⎝ N ⎠<br />
23
N correspond aux nombres d’échantillons prélevés sur x(t) sur [0, T 0 [ avec une période d’échantillonnage<br />
T<br />
= . N correspond aussi au nombre d’échantillons prélevés sur X s (f) sur [0, f e [ avec un pas appelé<br />
N<br />
t e<br />
0<br />
résolution spectrale qui vaut :<br />
∆ f =<br />
1<br />
. Ce dernier résultat découle directement de l’expression de X[n]<br />
T<br />
0<br />
donnée précédemment, on vérifie bien qu’en prenant N échantillons distants de 1/T 0 , on couvre bien une<br />
gamme de fréquence égale à f e :<br />
N<br />
f e<br />
= .<br />
T 0<br />
Dans notre exemple, nous avons choisi N=8 et f e =8Hz. Voici ce que nous obtenons dans ce cas au niveau<br />
des spectres.<br />
Dans l’exemple que nous venons de traiter, nous avons particulièrement bien choisi la fréquence<br />
d’échantillonnage f e et la <strong>du</strong>rée de mesure T 0 .<br />
En effet, f e respecte le théorème de Shannon f e >2f 1 et T 0 est un multiple de la période <strong>du</strong> signal ce qui<br />
nous permet d’avoir la fréquence <strong>du</strong> signal f 1 multiple entier de la résolution spectrale ∆f. Lorsque ces<br />
deux conditions sur f e et T 0 sont satisfaites, il est possible d’établir la relation suivante entre les<br />
coefficients de Fourier <strong>du</strong> signal périodique et la transformée de Fourier discrète :<br />
x<br />
Xn [ ]<br />
N<br />
n<br />
=<br />
e<br />
sur l'intervalle [0, f / 2[ . En toute rigueur x n désigne ici les coefficients de Fourier de la<br />
répétition périodique de x`(t), il faut donc nécessairement que T 0 soit égale à la période de x(t) ou alors<br />
un multiple entier de celle-ci. Dans le cas contraire, il est impossible d’établir un lien entre les résultats<br />
de la TFD et les coefficients de Fourier ou la transformée de Fourier <strong>du</strong> signal périodique. C’est ce que<br />
24
nous pouvons observer au travers de l'exemple suivant dans lequel pour le même signal périodique, nous<br />
avons choisi une <strong>du</strong>rée de mesure T 0 différente d’un multiple entier de la période.<br />
Pour ces spectres, la <strong>du</strong>rée de mesure a été choisie égale à T 0 =1.3s. La fréquence de la fonction cosinus<br />
est toujours de 1Hz et 8 échantillons sont prélevés sur la <strong>du</strong>rée T 0 .<br />
Dans ce cas, on voit bien que la troncature <strong>du</strong> signal et le repliement dû à l’échantillonnage modifie<br />
fortement les résultats obtenus par TFD et on n’a plus de relation directe entre les coefficients de<br />
Fourier et la TFD.<br />
25
2) Travail demandé<br />
2-1) Analyse d’une fonction cosinus<br />
Créer une fonction similaire au script tfd que vous avez fait au TP1 qui aura pour but de tracer la<br />
représentation temporelle x(t) ainsi que le spectre sous 3 représentations complémentaires :<br />
1) partie réelle <strong>du</strong> spectre obtenu par calcul de la transformée de Fourier discrète en fonction<br />
des fréquences<br />
2) partie imaginaire<br />
3) mo<strong>du</strong>le<br />
Pour tracer ces 4 graphes, il faut bien sur définir la fonction à étudier et les conditions d’échantillonnage.<br />
On choisit d’analyser une fonction cosinus, il faudra fournir son amplitude et sa fréquence ainsi que la<br />
fréquence d’échantillonnage f e et la <strong>du</strong>rée de mesure T 0 comme paramètres d’entrées de votre<br />
programme. Si vous voulez par exemple étudier un signal de fréquence 3kHz et d’amplitude 0.2 avec une<br />
fréquence d’échantillonnage 30kHz et une <strong>du</strong>rée de mesure 1ms, il faudra taper tfd(3000,0.2,30000,0.001)<br />
pour obtenir les 4 graphes donnant les représentations temporelles et spectrales <strong>du</strong> signal.<br />
NB :<br />
- pour calculer la transformée de Fourier discrète vous pouvez utiliser l’instruction fft.<br />
- utiliser toujours de préférence l’instruction stem plutôt que plot.<br />
- Expliquer comment vous allez calculer le vecteur temps nécessaire à la représentation temporelle <strong>du</strong><br />
signal.<br />
- Expliquer comment vous allez calculer le vecteur des fréquences nécessaire pour pouvoir représenter<br />
le spectre.<br />
- En reprenant l’exemple donné précédemment expliquez comment vous pouvez exploiter le spectre<br />
pour retrouver l’amplitude et la fréquence <strong>du</strong> signal.<br />
- Déterminer les valeurs minimales de f e et T 0 qui permettent d’obtenir un spectre ‘exploitable‘ pour<br />
l’étude d’un signal défini par x t)<br />
5cos( 100πt<br />
)<br />
( = , j’entends par spectre exploitable un spectre à partir<br />
<strong>du</strong>quel il est possible de déterminer l’amplitude et la fréquence <strong>du</strong> signal sans aucune ambiguïté. Il est<br />
bien sûr souhaitable de donner les graphes obtenus pour les valeurs de f e et T 0 choisies.<br />
- Expliquer pourquoi lorsque vous tapez tfd(1000,1,1050,0.04) vous observez une représentation<br />
temporelle <strong>du</strong> signal qui laisse à penser que le signal a une période de 0.02s. Commenter et<br />
interpréter également le spectre obtenu.<br />
26
2.2) Analyse d’une fonction cosinus bruitée<br />
Reprenez la fonction tfd précédente en rajoutant cette fois à la fonction cosinus <strong>du</strong> bruit obtenu grâce à<br />
l’instruction randn qui permet de générer des nombres aléatoires qui suivent une loi gaussienne. Pour<br />
réaliser cette addition, il faudra par exemple sommer à la fonction cosinus un vecteur<br />
ab*randn(1,length(t)) où ab désigne l’amplitude <strong>du</strong> bruit et length(t) la longueur <strong>du</strong> vecteur temps noté t.<br />
La variable ab devra être fournie comme paramètre d’entrée de la fonction tfd. Au niveau des graphes à<br />
tracer, contentez vous à présent de représenter le signal en fonction <strong>du</strong> temps et le spectre en amplitude<br />
(reporter uniquement le mo<strong>du</strong>le et pas les parties réelles et imaginaires).<br />
Si vous voulez par exemple étudier un signal sinusoïdal de fréquence 3kHz et d’amplitude 0.1 bruité par la<br />
fonction randn d’amplitude 0.1 et échantillonné à une fréquence d’échantillonnage 100kHz sur une <strong>du</strong>rée<br />
de mesure 1ms, il faudra taper tfd(3000,0.1,0.1,100000,0.001) pour obtenir les 2 graphes donnant les<br />
représentations temporelles et spectrales <strong>du</strong> signal.<br />
- Observer et commenter les graphes obtenus pour le signal pris comme exemple auparavant en<br />
choisissant pour ab différentes valeurs : 0.01, 0.05 et 0.1. Essayer dans chaque cas d’exploiter les<br />
deux représentations (temporelles et fréquentielles) pour en extraire l’amplitude et la fréquence de la<br />
sinusoïde, quelles conclusions peut-on en tirer quant à l’intérêt de l’étude fréquentielle d’un signal.<br />
2.3) Analyse d’une somme de sinusoïdes<br />
Reprenez la fonction tfd précédente en remplaçant cette fois le bruit par une deuxième fonction cosinus.<br />
Pour réaliser cette addition, il faudra par exemple sommer à la fonction cosinus de départ un vecteur<br />
a2*cos(2*pi*f2*t) où a2 et f2 désignent l’amplitude et la fréquence de la deuxième sinusoïde. Les variables<br />
a2 et f2 devront être fournis comme paramètres d’entrée de la fonction tfd.<br />
Si vous voulez par exemple étudier une somme d’un signal sinusoïdal de fréquence 3kHz et d’amplitude<br />
0.1 et d’une fonction cosinus de fréquence 3.3kHz et d’amplitude 0.05 échantillonnée à une fréquence<br />
d’échantillonnage 100kHz sur une <strong>du</strong>rée de mesure 1ms, il faudra taper<br />
tfd(3000,0.1,3300,0.05,100000,0.001) pour obtenir les 2 graphes donnant les représentations temporelles<br />
et spectrales <strong>du</strong> signal.<br />
- Observer et commenter les graphes obtenus dans l’exemple précédent. Essayer d’extraire de ces<br />
graphes les amplitudes et fréquences des deux sinusoïdes.<br />
- Quel est le paramètre d’échantillonnage à modifier pour pouvoir extraire correctement les<br />
amplitudes et fréquences des deux sinusoïdes. Représenter et exploiter les graphes alors obtenus.<br />
- En guise de conclusion générale à ce TP donner les points forts de l’analyse fréquentielle de signaux<br />
périodiques par transformée de Fourier discrète.<br />
27
TP 4 : UTILISATION DE LA TFD<br />
POUR L’ESTIMATION D’UNE FONCTION DE CORRÉLATION<br />
1) Intro<strong>du</strong>ction<br />
Un signal aléatoire X(t,ω) est défini à chaque instant t 1 ,t 2 ,t 3 ,… par sa loi de probabilité temporelle:<br />
p(x 1 ,x 2 ,x 3 ,…,t 1 ,t 2 ,t 3 ,…). Il existe un grand nombre de lois de probabilité dont la loi gaussienne et la loi<br />
uniforme:<br />
1 ⎛<br />
loi gaussienne : p( x) = exp<br />
−<br />
σ 2π<br />
⎜<br />
⎝<br />
⎧<br />
loi uniforme : p( x)<br />
= ⎨<br />
⎪⎩<br />
1<br />
( − ) 2<br />
x m x<br />
2<br />
2σ<br />
⎪ inf sup<br />
xsup<br />
− x<br />
⎣ ⎦<br />
inf<br />
0 ailleurs<br />
⎞<br />
⎟<br />
⎠<br />
sur un intervalle ⎡x<br />
, x<br />
Il est possible de générer les signaux aléatoires à partir de variables aléatoires qui suivent ces lois de<br />
probabilité. On peut ainsi générer des bruits en prenant comme modèle:<br />
( t,ω<br />
) = Y( t,<br />
X ) = aX b<br />
Y +<br />
avec X une variable aléatoire gaussienne ou uniforme, et a et b des constantes qui permettent de<br />
paramétrer la puissance moyenne totale, la variance ou encore la valeur moyenne <strong>du</strong> signal Y.<br />
Un signal aléatoire est dit stationnaire au sens strict si ses propriétés statistiques sont indépendantes de<br />
l'origine des temps. Il est stationnaire au second ordre si son moment d'ordre 1 (valeur moyenne<br />
statistique) ne dépend pas de l'instant choisi et si le moment mixte d'ordre 2 (l'autocorrélation statistique)<br />
ne dépend que de τ: l'écart entre les instants t 1 et t 2 choisis pour relever les ensembles statistiques.<br />
Ces moments sont calculés à partir d'ensembles statistiques formés par des observations <strong>du</strong> signal en<br />
différents instants (t 1 , t 2 , …). Pour obtenir des résultats significatifs, il est donc nécessaire de constituer<br />
des ensembles importants, et pour cela un grand nombre de relevés doit être entrepris. Il est souvent<br />
plus facile de travailler sur un seul relevé <strong>du</strong> signal en fonction <strong>du</strong> temps et de calculer alors des<br />
moments temporels. C'est ce qui est fait habituellement pour des signaux déterministes, pour les signaux<br />
aléatoires, ces moments temporels ne donnent des résultats significatifs que si on fait l'hypothèse<br />
d'ergodicité, c'est à dire que les moments ou moyennes temporelles correspondent aux moments<br />
statistiques. Nous allons présenter les deux principales manières d'estimer numériquement la fonction<br />
d'autocorrélation.<br />
⎤<br />
29
• Estimation numérique de l'autocorrélation<br />
La fonction d'autocorrélation R x (τ) est calculée en prenant la valeur moyenne de X(t,ω) multiplié par X(tτ,ω).<br />
Pour simplifier les écritures, les signaux numérisés sont le plus souvent exprimés en fonction<br />
d'indices prenant des valeurs entières. Par exemple, au lieu d'écrire x(t m ) avec t m =mt e (t e : période<br />
d'échantillonnage), on préfère écrire x(m). Ainsi, pour estimer numériquement la fonction<br />
d'autocorrélation, on pose simplement le calcul d'une valeur moyenne sur l’ensemble de N échantillons<br />
qui constituent x(m):<br />
r 1<br />
1( p ) = x ( m ) x ( m − p ) pour 0≤<br />
p N 1<br />
N<br />
N −1 *<br />
∑ ≤ − (4.1)<br />
m=<br />
p<br />
Lorsque p tend vers N-1, peu de termes interviennent dans le calcul de la moyenne alors que le terme de<br />
normalisation reste constant à 1/N. Cela a pour conséquence d'intro<strong>du</strong>ire un biais dans l'estimation:<br />
l'autocorrélation est pondérée par une fenêtre triangulaire.<br />
Pour éliminer le biais, un second estimateur peut être défini de la façon suivante:<br />
1<br />
( ) = ∑ N 1 *<br />
r2 p<br />
− x(<br />
m)<br />
x ( m − p)<br />
pour 0 ≤ p ≤ N −1<br />
m<br />
N − p<br />
= p<br />
(4.2)<br />
L'avantage de cet estimateur est son absence de biais, mais sa variance devient importante lorsque p<br />
tend vers N-1. Les fonctions de corrélation qui vont être calculées par la suite permettront de saisir les<br />
notions de biais et de variance d’un estimateur.<br />
• Utilisation de la TFD pour calculer ces estimées.<br />
Pour calculer une fonction de corrélation numérique, il est plus intéressant de passer dans le domaine<br />
fréquentiel au moyen de la TFD pour des signaux présentant plus de 80 échantillons car les opérations sont<br />
moins nombreuses donc plus rapides à exécuter. L’utilisation de la TFD est basée sur le théorème de<br />
Plancherel qui dit que la transformée de Fourier d’un pro<strong>du</strong>it de convolution de deux signaux donne le<br />
pro<strong>du</strong>it simple de la transformée de Fourier des deux signaux : TF ( x( t)*<br />
y(<br />
t)<br />
) = X ( f ) Y(<br />
f )<br />
Il est possible d’utiliser ce théorème pour estimer la fonction d’autocorrélation car cette dernière<br />
*<br />
renferme une convolution : ( τ ) = x(<br />
τ )* x ( −τ<br />
)<br />
R x<br />
Si on applique cette dernière relation au cas d’un signal numérique sur lequel on essaie de calculer<br />
l’estimateur biaisé de l’autocorrélation, on obtient :<br />
r 1 1 * 1<br />
*<br />
1( p N −<br />
) = ∑ x ( m ) x ( m − p ) = x ( p )* x ( − p )<br />
m=<br />
p<br />
N<br />
N<br />
( )<br />
ou * désigne la convolution linéaire définie par: x( p)* y( p) = x( m) y( p − m)<br />
avec y( p- m) = 0 pour ( p- m) est en dehors de l'intervalle [0, N -1]<br />
La difficulté pour les signaux numériques est qu’il existe deux définitions de la convolution : la<br />
convolution cyclique et la convolution linéaire. La convolution cyclique est définie par la relation :<br />
∑<br />
N − 1<br />
m=<br />
0<br />
30
N −1<br />
∑<br />
x( p)* y( p) = x( m) y( p−m) en imposant une périodicité N pour les signaux x et y<br />
m=<br />
0<br />
de manière à pouvoir calculer les valeurs de ym ( - p) lorsque m- p< 0 ( ym ( - p) = ym ( - p+<br />
N)<br />
convolution cyclique présente la propriété suivante :<br />
TFD ( x(<br />
p)*<br />
y(<br />
p))<br />
= TFD(<br />
x(<br />
p)).<br />
TFD(<br />
y(<br />
p))<br />
, ce qui permet de réaliser cette opération de la manière<br />
suivante :<br />
x(<br />
p)*<br />
y(<br />
p)<br />
= TFD<br />
−1<br />
-1<br />
( TFD(<br />
x(<br />
p)).<br />
TFD(<br />
y(<br />
p))<br />
) où TFD désigne la TFD inverse.<br />
Cette dernière égalité n’étant pas applicable à la convolution linéaire, une manière de contourner le<br />
problème pour pouvoir utiliser la TFD afin de calculer une convolution linéaire est de rajouter N zéros<br />
aux signaux x et y. La convolution linéaire de deux signaux x et y de N échantillons chacun peut donc<br />
être calculée de la manière suivante :<br />
( X ' Y ' ) avec X' et Y' correspondant à : X ' = TFD(<br />
x + N0)<br />
Y ' = TFD( y N0<br />
− 1<br />
x ( p)*<br />
y(<br />
p)<br />
= TFD<br />
+<br />
estimées de l’autocorrélation peuvent donc être calculées de la manière suivante :<br />
1<br />
r1<br />
( p)<br />
= TFD<br />
N<br />
1<br />
r2<br />
( p)<br />
=<br />
N −<br />
−1<br />
TFD<br />
p<br />
*<br />
( X ' X ' )(<br />
p)<br />
)<br />
−1<br />
*<br />
( X ' X ' )(<br />
p)<br />
)<br />
La<br />
)Les deux<br />
(4.3)<br />
Ces deux estimées sont obtenus directement sous Matlab grâce à la fonction xcorr :<br />
[ r1,<br />
p]<br />
= xcorr(<br />
x,<br />
x,'<br />
biased ') pour l'estimateur biaisé<br />
[ r2,<br />
p]<br />
= xcorr(<br />
x,<br />
x,'<br />
unbiased ') pour l'estimateur non biaisé<br />
(4.4)<br />
r 1 et r 2 sont les deux vecteurs renfermant les deux estimées ; p représente un vecteur qui contiendra les<br />
valeurs entières allant de –(N-1) à (N-1) et va servir pour calculer l’axe des abscisses nécessaire à<br />
représenter les autocorrélations. Les valeurs de r(p) pour des valeurs de p négatives sont obtenues grâce<br />
à la propriété de périodicité des autocorrélations estimées avec la TFD.<br />
2) Travail demandé<br />
a) Autocorrélation d'une sinusoïde<br />
Ecrivez un fonction que vous nommerez autocor.m et dans laquelle vous générez par exemple un signal<br />
sinusoïdal d'amplitude 1 de fréquence 0.1Hz échantillonné à une fréquence de 1Hz en 50 points en partant<br />
de 0s. Les paramètres d’entrée seront : l’amplitude et la fréquence de la sinusoïde, la fréquence<br />
d’échantillonnage et le nombre d’échantillons. On considérera que le vecteur temps part de 0. Pour traiter<br />
l’exemple précédent, il faudra taper : autocor(1,0.1,1,50).<br />
- La fonction devra effectuer les calculs et tracés des estimations biasées et non biaisées de ce<br />
signal par les différentes formules données auparavant : 4.1, 4.2, 4.3 et 4.4. Vérifier que vous<br />
31
obtenez les mêmes résultats par ces trois méthodes pour les deux estimations. Ne passer pas plus<br />
d’une heure sur cette partie car l’essentiel <strong>du</strong> TP n’est pas là. Par la suite, on se contentera de<br />
calculer et tracer uniquement les deux estimées obtenues avec l’instruction xcorr.<br />
- Tracer et comparer les estimations biaisées et non biaisée de l’autocorrélation <strong>du</strong> signal pris<br />
comme exemple auparavant.<br />
- Exploiter ces tracés pour retrouver les caractéristiques <strong>du</strong> signal, à savoir la puissance moyenne<br />
totale et la fréquence.<br />
- Sachant que la puissance moyenne totale est donnée par la fonction d'autocorrélation en zéro,<br />
donnez l'expression de l'estimée numérique de la puissance moyenne totale à partir des<br />
estimateurs biaisé et non biaisé de l'autocorrélation. Calculer l'estimée la puissance moyenne<br />
totale <strong>du</strong> signal et confronter votre résultat à la théorie.<br />
b) Autocorrélation d'un bruit blanc<br />
Sous Matlab comme dans la plupart des langages de programmation, il existe un générateur de nombres<br />
aléatoires qui permet de modéliser un bruit échantillonné. Matlab propose deux types de générateur: rand<br />
et randn.<br />
- En comparant les histogrammes obtenus pour ces deux bruits en tapant hist(rand(1,1000)) et<br />
hist(randn(1,1000)) donnez les différences essentielles des deux générateurs.<br />
- Calculer l'estimée de la puissance moyenne totale <strong>du</strong> signal obtenu à partir de l'instruction<br />
randn(1,1000).<br />
- Calculer également l'estimée de la valeur moyenne <strong>du</strong> même signal.<br />
- Comment à partir d’un ensemble de variables aléatoires qui suivent une loi de distribution<br />
gaussienne de moyenne nulle et de variance 1 est-il possible de générer un signal aléatoire de<br />
moyenne a et de variance b <br />
- Remplacer dans la fonction autocor le signal sinusoïdal par un bruit blanc gaussien. Les<br />
paramètres à fournir seront la valeur moyenne, la variance <strong>du</strong> bruit ainsi que le nombre<br />
d’échantillons. Par exemple, pour générer 100 échantillons d'un bruit blanc gaussien de valeur<br />
moyenne 2 et de variance 3, il faudra taper : autocor(2,3,100). La fréquence d’échantillonnage<br />
sera prise égale à 1Hz dans tous les cas.<br />
- Tracer et comparer les estimations biaisées et non biaisée de son autocorrélation pour l’exemple<br />
choisi auparavant.<br />
- Expliquer comment utiliser ces tracés pour extraire la valeur moyenne, la puissance moyenne<br />
totale et la valeur efficace <strong>du</strong> signal.<br />
- Recommencer avec 1000 échantillons, commenter l’évolution des résultats.<br />
32
c) Autocorrélation d'un sinus bruité<br />
Rajoutez à présent dans la fonction autocor.m des instructions pour générer et tracer un sinus bruité par<br />
un bruit blanc gaussien centré. On prendra comme exemple un sinus d’amplitude 1 et de fréquence 0.1Hz<br />
constitué de 500 échantillons relevés à une fréquence de 1Hz.<br />
- Sachant que l'on désire un rapport signal sur bruit de 0dB, en dé<strong>du</strong>ire la variance <strong>du</strong> bruit blanc.<br />
- Commenter le tracé <strong>du</strong> signal bruité, peut-on déterminer l’amplitude et la fréquence de la fonction<br />
sinus <br />
- Tracer et commenter les estimations biaisées et non biaisées de son autocorrélation<br />
- Exploiter ces tracés afin de retrouver la puissance moyenne totale <strong>du</strong> bruit, <strong>du</strong> sinus et la<br />
fréquence <strong>du</strong> sinus.<br />
33
TP 5 : FILTRAGE ANALOGIQUE<br />
But <strong>du</strong> TP : Il s'agit de voir comment utiliser Matlab pour concevoir et simuler un filtre analogique, ceci<br />
se fera au travers d'une application particulière concernant la mo<strong>du</strong>lation à bande latérale unique (BLU).<br />
1) Généralités sur la mo<strong>du</strong>lation à bande latérale unique<br />
La mo<strong>du</strong>lation BLU est utilisée par les cibistes, certain radio amateurs, en communication militaire<br />
ainsi qu’en téléphonie pour concentrer plusieurs voies de manières analogique. Les principaux avantages<br />
de ce mode de transmission sont le faible encombrement spectral et par voie de conséquence la faible<br />
puissance nécessaire à l'émission.<br />
Rappelons ci-dessous le spectre d'un signal mo<strong>du</strong>lé en amplitude sans porteuse dans le cas d'un<br />
message sinusoïdal mt () de fréquence f<br />
m<br />
. Il est possible de montrer que ce signal peut être obtenu par<br />
le pro<strong>du</strong>it simple de la porteuse Ap cos(<br />
2π ft<br />
p ) par le signal mo<strong>du</strong>lant Amcos( 2π ft<br />
m ) .<br />
Les informations qui caractérisent le message mo<strong>du</strong>lant que l'on veut transmettre sont sa fréquence<br />
et son amplitude Am<br />
. Après mo<strong>du</strong>lation ces informations sont contenues dans les raies situées en fp + fm<br />
et f<br />
p<br />
− fm<br />
. En réalité, les raies f<br />
p<br />
+ fm<br />
et f<br />
p<br />
− fm<br />
contiennent les mêmes informations. Ceci veut donc<br />
dire qu'il est inutile de transmettre simultanément les deux raies situées en f p<br />
+ f m<br />
et f<br />
p<br />
− fm<br />
; ces deux<br />
raies constituent dans ce cas particulier ce qu'on appelle plus généralement les bandes latérales<br />
supérieure et inférieure.<br />
La mo<strong>du</strong>lation BLU consiste à filtrer le signal mo<strong>du</strong>lé en amplitude de manière à ne transmettre qu'une<br />
seule bande latérale (BLI ou BLS suivant la bande sélectionnée: Inférieure ou Supérieure respectivement).<br />
Un avantage essentiel est que la bande à transmettre est ré<strong>du</strong>ite de moitié par rapport aux mo<strong>du</strong>lations<br />
AM (avec ou sans porteuse) pour un message donné. On gagne donc un demi bande qui peut servir à<br />
transmettre un autre signal. Par contre le signal est plus difficile à démo<strong>du</strong>ler en raison de l'absence de<br />
porteuse.<br />
f m<br />
35
Le schéma de principe qui peut s'appliquer à la mo<strong>du</strong>lation BLU est donc le suivant:<br />
Le travail qui vous est demandé est de simuler les signaux mo<strong>du</strong>lés, et de concevoir et vérifier le bon<br />
fonctionnement <strong>du</strong> filtre passe-bande. Nous vous donnerons donc dans un premier temps les principaux<br />
types de filtres analogiques qu'il est possible de concevoir avec Matlab.<br />
2) Caractéristiques des filtres analogiques<br />
Nous donnerons dans un premier temps les caractéristiques des fonctions de transfert des<br />
différents types de filtre pour des passe-bas.<br />
2.1) Filtres de Butterworth<br />
Un filtre de Butterworth d'ordre n de type passe-bas sera défini par une fonction de transfert H(ω) qui<br />
vérifie l'équation suivante:<br />
1<br />
2<br />
H ( ) =<br />
2n<br />
ω ω 0<br />
⎛ ω ⎞<br />
1+<br />
⎜<br />
⎟<br />
⎝ω<br />
0 ⎠<br />
ω 0 représentant la pulsation de coupure à –3dB.<br />
Ces filtres ne présentent pas d'on<strong>du</strong>lations en bande passante ni en bande atténuée.<br />
2.2) Filtres de Tchebycheff<br />
Il existe deux types de filtres de Tchebycheff, noté type 1 et type 2.<br />
Pour le type 1, la fonction de transfert est donnée par l’équation :<br />
avec<br />
⎪⎧<br />
cos( n arccos( x))<br />
pour x < 1<br />
Tn ( x)<br />
= ⎨<br />
⎪⎩ cosh( n arg cosh( x))<br />
pour x > 1<br />
2 1<br />
H ( f ) =<br />
2<br />
2<br />
( 1 + ε T ( f ))<br />
Pour le type deux, la fonction de transfert est donnée par :<br />
n<br />
où<br />
( 2<br />
1<br />
H f ) =<br />
2<br />
2 2<br />
( 1 + ε T ( f ) / T ( f ))<br />
f<br />
a<br />
représente la fréquence de début de bande atténuée.<br />
n<br />
a<br />
n<br />
36
Les filtres de Tchebycheff présentent :<br />
- soit une on<strong>du</strong>lation en bande passante mais pas en bande atténuée (filtre de type 1)<br />
- soit une on<strong>du</strong>lation en bande atténuée mais pas en bande passante (filtre de type 2)<br />
2<br />
L’on<strong>du</strong>lation en bande passante vaut / 1 + . Les caractéristiques des filtres de Tchebycheff sont<br />
meilleures en atténuation que celles des filtres de Butterworth.<br />
1 ε<br />
2.3) Filtres de Cauer ou filtres elliptiques<br />
Ils sont optimaux en terme de bande de transition et ont pour gain :<br />
où<br />
n<br />
2 1<br />
H ( f ) =<br />
2<br />
2<br />
( 1 + ε R ( f , L)<br />
)<br />
R est une fonction rationnelle de Tchebycheff et où L caractérise l’atténuation. Les filtres de Cauer<br />
présentent des on<strong>du</strong>lations en bande passante et en bande atténuée. La valeur de l’on<strong>du</strong>lation en bande<br />
atténuée vaut<br />
1/<br />
1 ε<br />
3) Travail demandé<br />
2<br />
+ .<br />
3.1) Simulation et analyse <strong>du</strong> signal mo<strong>du</strong>lé en amplitude sans porteuse Y () t<br />
Créez un script que vous nommerez filtanal.m dans lequel vous allez générer le signal YAM<br />
( t )<br />
correspondant au pro<strong>du</strong>it <strong>du</strong> signal mo<strong>du</strong>lant m( t)<br />
= cos( 2πf<br />
mt)<br />
avec la porteuse p( t)<br />
= cos( 2πf<br />
pt)<br />
. On<br />
choisit les fréquences suivantes: f m =1kHz et f p =100kHz, et le calcul <strong>du</strong> signal () t se fera sur un<br />
vecteur temps défini par:<br />
t=0:t e :(N-1)t e avec t e =4/f m /N et N=5000.<br />
Ce script devra permettre le tracé de 2 graphes sur une même figure :<br />
n<br />
AM<br />
YAM<br />
- le premier correspondant à Y AM<br />
en fonction de t.<br />
- le second pour le spectre calculé avec l'instruction fft: Y<br />
AM<br />
en fonction de la fréquence.<br />
- Expliquez comment vous générez le vecteur des fréquences<br />
- Interpréter le spectre obtenu en le confrontant à ce que prédit la théorie (utilisez le zoom pour bien<br />
visualiser toutes les raies).<br />
3.2) Synthèse d'un filtre passe-bande<br />
On fixe le gabarit suivant pour le filtre passe-bande devant sélectionner la bande latérale inférieure et<br />
éliminer la bande latérale supérieure.<br />
37
R p =3dB<br />
Rs=30dB<br />
f P1 =95kHz<br />
f P2 =100kHz<br />
f S1 =94.4kHz<br />
f S2 =100.6kHz<br />
Utilisez les instructions cheb1ord et cheby1 pour trouver la fonction de transfert <strong>du</strong> filtre correspondant<br />
au gabarit précédent. Attention les anglophones appellent frequency ce que nous appelons pulsation et qui<br />
correspond à ω = 2πf<br />
.<br />
Ne créez pas une nouvelle fonction *.m, rajoutez les instructions nécessaires à l'obtention de la fonction<br />
de transfert <strong>du</strong> filtre dans le fichier filtanal.m. Vérifiez que ce que vous avez obtenu pour le filtre passe<br />
bande répond bien au gabarit demandé en traçant le mo<strong>du</strong>le <strong>du</strong> gain <strong>du</strong> filtre (en dB) en fonction de la<br />
fréquence en utilisant les instructions freqs et tf.<br />
3.3) Simulation et vérification <strong>du</strong> fonctionnement <strong>du</strong> filtre passe-bande.<br />
Pour vérifier à présent le bon fonctionnement <strong>du</strong> filtre passe-bande, nous allons rajouter certaines<br />
instructions dans le fichier filtanal.m pour tracer dans la même figure sur 4 axes différents les<br />
représentations temporelles et fréquentielles des signaux et .(nous garderons le signal<br />
simulé précédemment.<br />
Pour générer le signal<br />
Y BLI<br />
, utilisez l'instruction lsim.<br />
Y<br />
AM<br />
Y Y ( t )<br />
BLI<br />
AM<br />
- Observez et commentez les représentations temporelles et fréquentielles <strong>du</strong> signal mo<strong>du</strong>lé.<br />
- Même question lorsque vous remplacez le signal mo<strong>du</strong>lant mt ( ) par la somme de 2 fonctions<br />
cosinus de fréquences 1 et 2 kHz.<br />
- Interprétez l'évolution des résultats lorsque vous diminuez progressivement le nombre N de valeurs<br />
utilisées pour la simulation. Prenez successivement les valeurs N=2000, N=1000 et N=500.<br />
38
TP 6 : FILTRAGE NUMÉRIQUE<br />
1) Intro<strong>du</strong>ction<br />
La transformée en z est utilisée pour modéliser les opérations effectuées dans le domaine des signaux<br />
échantillonnés. Le filtrage numérique peut ainsi se formuler par :<br />
Y z = H z X z<br />
(1)<br />
( ) ( ) ( )<br />
avec H(z) la fonction de transfert en z <strong>du</strong> filtre numérique qui peut s’écrire sous la forme :<br />
H<br />
N −1<br />
∑<br />
z)<br />
=<br />
1+<br />
b<br />
k<br />
k = 0<br />
M<br />
La formule (1) peut ainsi se ramener à une équation aux différences :<br />
∑<br />
l = 1<br />
z<br />
a<br />
l<br />
− k<br />
( (2)<br />
y(<br />
n)<br />
=<br />
N −1<br />
∑<br />
k = 0<br />
k<br />
z<br />
−l<br />
b x(<br />
n − k)<br />
−<br />
On différencie principalement deux types de filtre numérique :<br />
- les filtres à réponse impulsionnelle finie (RIF)<br />
- les filtres à réponse impulsionnelle infinie (RII)<br />
M<br />
∑<br />
l = 1<br />
a y(<br />
n − l)<br />
l<br />
(3)<br />
1.1) Filtres RIF<br />
Ces filtres n’ont aucun pôle, ce qui signifie que tous les coefficients<br />
calcul <strong>du</strong> signal en sortie <strong>du</strong> filtre y se ramène à l’expression :<br />
y(<br />
n)<br />
=<br />
N<br />
∑ − 1<br />
k = 0<br />
b x(<br />
n − k)<br />
k<br />
a l<br />
b x x<br />
pour l supérieur à 1 sont nuls. Le<br />
y correspond donc au pro<strong>du</strong>it de convolution de par . correspond alors à la réponse<br />
h<br />
impulsionnelle <strong>du</strong> filtre notée plus généralement . Le nombre de coefficients étant limité, on dit que la<br />
réponse impulsionnelle est finie, d’où le nom de ce type de filtre.<br />
Les avantages de ces filtres sont :<br />
- la stabilité toujours assurée car il n’y a pas de pôles.<br />
- la phase qui varie linéairement avec la fréquence, ce qui intro<strong>du</strong>it un retard constant entre le<br />
signal de sortie et le signal d’entrée <strong>du</strong> filtre.<br />
Nous allons présenter deux manières de calculer les coefficients d’un filtre RIF.<br />
a) Synthèse d’un filtre RIF par série de Fourier.<br />
(4)<br />
On désire réaliser un filtre passe-bas idéal de fréquence de coupure f c . Etant donné que l’on travaille sur<br />
des signaux échantillonnés (y(n),h(n),x(n)), les spectres obtenus par transformée de Fourier de ces<br />
signaux seront périodiques de période égale à la fréquence d’échantillonnage f . Ce qui explique la forme<br />
H<br />
( f )<br />
donnée à :<br />
e<br />
44
H<br />
( f )<br />
Etant donné que est périodique, on peut calculer son développement en série de Fourier par :<br />
1 f e / 2 ⎛ n<br />
h n<br />
H f i f df<br />
f<br />
∫ − f e<br />
e<br />
f ⎟ ⎞<br />
( ) = ( ) exp<br />
⎜ 2π (5)<br />
/ 2<br />
⎝ e ⎠<br />
N.B. : on notera la présence d’un signe + à la place d’un – dans la fonction exponentielle car on passe <strong>du</strong><br />
domaine spectral au domaine temporel.<br />
On se limitera au calcul de N coefficients h( n ) (ou ( )<br />
rendre le filtre causal, il faut décaler les indices n de ( )<br />
donc un déphasage de ( N − ) π fT et un retard de ( N − ) T<br />
1<br />
e<br />
b n ) pris symétriquement autour de 0, et pour<br />
h n de manière à démarrer en 0. Ceci intro<strong>du</strong>it<br />
1 e<br />
2avec T la période d’échantillonnage (pour<br />
N impair). Pour atténuer l’effet GIBBS lié à la troncature de la réponse impulsionnelle, on utilise<br />
généralement des fenêtres de pondération comme celle de Hamming.<br />
b) Echantillonnage en fréquence<br />
La méthode précédente devient difficile à appliquer lorsque la forme de H( f ) devient plus compliquée.<br />
Cette nouvelle méthode permet de fixer n’importe quelle forme pour H( f ) . H( f ) est échantillonnée en<br />
N points de − f e<br />
2 à<br />
e<br />
2<br />
Le décalage des indices de<br />
Nous allons à présent définir les filtres RII.<br />
1.2) Filtres RII<br />
f . Les N coefficients h( n ) sont obtenus par TFD inverse de ( )<br />
e<br />
H f :<br />
( N −1)/2<br />
1<br />
⎛ n ⎞<br />
hk ( ) = Hn ( )exp⎜2 ik ⎟, k∈ − N−1 2, N−1 2<br />
N n=−( N−1)/2<br />
N<br />
⎣ ⎦<br />
⎝ ⎠<br />
h( n)<br />
∑ π<br />
⎡ ( ) ( ) ⎤ (6)<br />
pour raison de causalité va également entraîner une phase linéaire.<br />
Les filtres RII sont définis par l’équation générale :<br />
N −1<br />
∑<br />
H z)<br />
=<br />
1+<br />
b<br />
k<br />
k = 0<br />
M<br />
∑<br />
l=<br />
1<br />
z<br />
−k<br />
( (7)<br />
Ce type de filtre peut être instable si les pôles sont situés en dehors <strong>du</strong> cercle unité. D’autre part la phase<br />
ne varie pas linéairement avec la fréquence. Par contre, le nombre de coefficients à calculer est<br />
relativement faible en comparaison des filtres RIF, ce qui permet de limiter les temps de calcul. Pour<br />
synthétiser un filtre RIF, la méthode la plus simple consiste à partir de la fonction de transfert d’un filtre<br />
a z<br />
l<br />
−l<br />
45
analogique (Butterworth, Tchebycheff, Cauer, etc.) et de passer <strong>du</strong> plan des variables p (ou ) à celui<br />
des z . La transformation la plus couramment utilisée est la transformation bilinéaire :<br />
avec<br />
k =<br />
2 f e<br />
2) Travail demandé<br />
p est remplacé par :<br />
en règle générale.<br />
1−<br />
z<br />
k<br />
1+<br />
z<br />
−1<br />
−1<br />
s<br />
2.1) Filtres RIF<br />
a) Synthèse par série de Fourier<br />
- Calculer les valeurs des coefficients de la réponse impulsionnelle d’un filtre RIF passe-bas idéal de<br />
fréquence de coupure 1kHz sachant que f e =8kHz. On limite la réponse impulsionnelle à 9 éléments.<br />
- Grâce au programme RIFFOUR, il est possible de vérifier vos calculs.<br />
- Commenter les tracés des réponses en fréquence. Les deux courbes dans chaque graphe<br />
correspondent à l’usage de 2 fenêtres de pondération : la fenêtre rectangle (ou box-car) et la fenêtre<br />
de Hamming.<br />
- Expliquer en particulier l’évolution de la phase avec la fréquence<br />
- Commenter l’évolution de la réponse en fréquence <strong>du</strong> filtre lorsqu’on augmente le nombre de points<br />
N (prendre successivement 17 et 33).<br />
N.B. : Avant de cliquer sur ‘Réponse en fréquence’, il faut cliquer sur ‘Réponse impulsionnelle’ pour<br />
réactualiser celle-ci à chaque fois que vous changez un paramètre : f e , f c ou N.<br />
- Commenter les tracés de la réponse à un sinus réalisés pour diverses fréquences de la fonction sinus<br />
(prendre N=33).<br />
- Expliquer en particulier la raison pour laquelle les premières valeurs en sortie <strong>du</strong> filtre sont quasi<br />
nulles.<br />
- Noter le temps de retard entre les 2 sinusoïdes et son évolution avec la fréquence <strong>du</strong> sinus.<br />
N.B. : il y a possibilité de zoomer certaines parties des graphes.<br />
b) Echantillonnage en fréquence<br />
On propose de réaliser un filtre RIF basé sur le gabarit suivant pour H( f ) :<br />
Sur l’intervalle de fréquence allant de –f e /2 à f e /2 : (f) = 1 pour –f 1
- Calculer les valeurs de la réponse impulsionnelle d’un filtre RIF basée sur un tel gabarit avec :<br />
f 1 =1kHz, f 2 =1.5kHz, f e =8kHz et N=9.<br />
- Grâce au programme RIFECH, il est possible de vérifier vos calculs.<br />
- Commenter l’évolution de la réponse impulsionnelle <strong>du</strong> filtre lorsque :<br />
- on augmente N (prendre N=17 puis 33).<br />
- à N fixé (17 par exemple) on décale la position de f 2 (1.1kHz puis 2kHz)<br />
- Sachant que les cercles représentés dans le mo<strong>du</strong>le de la réponse en fréquence sont les points<br />
échantillonnés sur H( f ) (gabarit donné au départ), quels commentaires cela vous inspire-t-il <br />
2.2) Filtres RII<br />
Dans le but de limiter au maximum la difficulté des calculs que vous devez réaliser, nous choisissons<br />
comme filtre analogique de départ un passe-bas de type RC :<br />
x(t)<br />
R<br />
C<br />
y(t)<br />
R=330Ω, C=470nF<br />
- Exprimer la fonction de transfert <strong>du</strong> filtre sous la forme :<br />
H ( p)<br />
A<br />
p<br />
1+<br />
2π<br />
En donnant les valeurs <strong>du</strong> gain nominal A et de la fréquence de coupure<br />
( )<br />
H z<br />
= (7)<br />
- Donner l’expression obtenue pour après transformation bilinéaire (on choisit fe=8kHz). Mettez<br />
H( z)<br />
sous la forme suivante :<br />
a<br />
H<br />
z)<br />
N −1<br />
∑<br />
k = 0<br />
= M<br />
∑<br />
l=<br />
0<br />
b<br />
k<br />
a z<br />
l<br />
z<br />
−k<br />
−l<br />
f c<br />
( avec a 0 =1 (8)<br />
- Relevez les coefficients et et comparez vos résultats à ceux fournis par le programme RII (les<br />
l<br />
b<br />
k<br />
valeurs sont données pour les valeurs de l et k croissantes en partant de 0).<br />
- Observez et commentez la réponse en fréquence en identifiant les 2 courbes apparaissant dans<br />
chaque graphe et qui correspondent au filtre analogique H( p ) et au filtre numérique H( z ) .<br />
- Commentez en particulier l’évolution observée lorsqu’on modifie la fréquence d’échantillonnage.<br />
f c<br />
.<br />
47
TP 7 : OUTILS POUR LA SYNTHÈSE DE FILTRES<br />
Intro<strong>du</strong>ction :<br />
L’option ‘<strong>Signal</strong> Processing Toolbox’ de MATLAB permet de comparer un grand nombre de méthodes de<br />
synthèse de filtres numériques. Nous séparerons une fois encore les filtres RII des RIF.<br />
1) Synthèse de filtres RIF<br />
Nous avons vu dans le TP précédent deux méthodes élémentaires de synthèse de filtres RIF : la synthèse<br />
par série de Fourier et la méthode d’échantillonnage. Ces deux méthodes sont implémentées sous<br />
MATLAB avec les noms fir1 et fir2. En plus de ces méthodes, il existe une méthode d’optimisation en<br />
moyenne quadratique firls dont l’objectif est la synthèse d’un filtre RIF dont la réponse en fréquence<br />
D f suivant un critère des moindres carrés. Cette méthode<br />
H( f ) approche une fonction donnée ( )<br />
consiste donc à trouver les coefficients <strong>du</strong> filtre qui minimisent la fonction suivante :<br />
eqm = ∑ P( f )[ H ( f ) − D(<br />
f )]<br />
où P( f ) est une fonction de pondération éventuelle.<br />
Le problème lié aux différentes méthodes présentées jusqu’à maintenant est le manque de maîtrise des<br />
oscillations <strong>du</strong> filtre. Or dans de nombreuses applications, il se révèle intéressant d’utiliser des filtres<br />
présentant des on<strong>du</strong>lations d’amplitude constante. La méthode de Remez (remez) permet de tenir compte<br />
de cette contrainte supplémentaire sur le gabarit <strong>du</strong> filtre.<br />
2) Synthèse des filtres RII<br />
2<br />
Pour la conception de filtres RII, nous nous baserons essentiellement sur les filtres analogiques décrits<br />
dans le TP6, sachez néanmoins qu’il est possible de faire la synthèse de filtre RII sans utiliser les<br />
modèles analogiques. Il existe en effet des techniques discrètes itératives qui permettent de calculer<br />
directement les coefficients d’un filtre RII à partir d’un gabarit donné par des méthodes d’optimisation<br />
(voir les instructions prony et yulewalk par exemple).<br />
3) Travail demandé sous SPTOOL<br />
Lorsque vous tapez sptool sous Matlab, une fenêtre que l’on peut décomposer en trois parties apparaît. La<br />
première partie <strong>Signal</strong>s sur la gauche de la fenêtre permet de visualiser avec View des signaux tracés en<br />
fonction <strong>du</strong> temps généralement. Il est possible ainsi d’importer des signaux définis dans la fenêtre de<br />
travail Matlab (workspace) en cliquant sur File puis Import. Ensuite ces signaux en plus d’être visualisés<br />
peuvent être filtrés dans la partie Filters. Il est aussi possible de faire l’analyse spectrale de ces signaux<br />
dans la partie Spectra.<br />
La zone centrale notée Filters permet de visualiser les caractéristiques d’un filtre par View, de lancer une<br />
synthèse de filtre par New Design, de modifier les caractéristiques d’un filtre par Edit Design et enfin<br />
d’appliquer un filtre à un signal présent dans la partie <strong>Signal</strong>s par Apply. Dans un premier temps, nous<br />
utiliserons la fonction New Design pour comparer les caractéristiques de différents types de filtres<br />
numériques synthétisés à partir d’un gabarit et d’un algorithme donné.<br />
49
Exercice1 : comparaison des résultats obtenus par les méthodes firls et remez.<br />
On fixe la fréquence d’échantillonnage à 1Hz et on désire synthétiser un passe-bas :<br />
d’ordre 15 avec fp=0.275 et fs=0.325Hz.<br />
Exercice2 : comparaison des RII.<br />
On donne les spécifications suivantes pour un filtre numérique passe-bas :<br />
Fe=1Hz, fp=0.25Hz, fs=0.26Hz<br />
On<strong>du</strong>lation dans la bande passante Rp=3dB, atténuation dans la bande coupée Rs=20.<br />
50
6<br />
SPTool: A <strong>Signal</strong><br />
Processing GUI Suite<br />
The following chapter describes the <strong>Signal</strong> Processing Tool (SPTool) and provides a detailed example<br />
showing how to use this Graphical User Interface.<br />
SPTool: An Interactive <strong>Signal</strong> Processing<br />
Environment (p. 6-3)<br />
Opening SPTool (p. 6-5)<br />
Getting Context-Sensitive Help (p. 6-7)<br />
<strong>Signal</strong> Browser (p. 6-8)<br />
Filter Designer (p. 6-11)<br />
Filter Visualization Tool (p. 6-14)<br />
Spectrum Viewer (p. 6-18)<br />
Filtering and Analysis of Noise (p. 6-21)<br />
Exporting <strong>Signal</strong>s, Filters, and Spectra (p. 6-33)<br />
Accessing Filter Parameters (p. 6-35)<br />
Importing Filters and Spectra into SPTool<br />
(p. 6-40)<br />
Loading Variables from the Disk (p. 6-44)<br />
Selecting <strong>Signal</strong>s, Filters, and Spectra in<br />
SPTool (p. 6-45)<br />
Editing <strong>Signal</strong>s, Filters, or Spectra in SPTool<br />
(p. 6-46)<br />
Designing a Filter with the Pole/Zero Editor<br />
(p. 6-47)<br />
Overview of the tool<br />
How to start the tool<br />
How to get help<br />
Viewing signals<br />
Designing filters<br />
Viewing and analyzing filters<br />
Viewing spectra<br />
Full example using the tool<br />
Sending data out of the tool<br />
Using MATLAB to access saved filter parameters<br />
Bringing data into the tool<br />
Bringing data from a disk into the tool<br />
Selecting data<br />
Editing data<br />
Using the Pole/Zero Editor
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Redesigning a Filter Using the Magnitude Plot<br />
(p. 6-50)<br />
Setting Preferences (p. 6-51)<br />
Making <strong>Signal</strong> Measurements with Markers<br />
(p. 6-53)<br />
Changing the filter design using Magnitude plot<br />
Customizing the tool<br />
Measuring signals<br />
6-2
SPTool: An Interactive <strong>Signal</strong> Processing Environment<br />
SPTool: An Interactive <strong>Signal</strong> Processing Environment<br />
SPTool is an interactive GUI for digital signal processing that can be used to<br />
• Analyze signals<br />
• Design filters<br />
• Analyze (view) filters<br />
• Filter signals<br />
• Analyze signal spectra<br />
You can accomplish these tasks using four GUIs that you access from within<br />
SPTool:<br />
• The <strong>Signal</strong> Browser is for analyzing signals. You can also play portions of<br />
signals using your computer’s audio hardware.<br />
• The Filter Designer is for designing or editing FIR and IIR digital filters.<br />
Most of the <strong>Signal</strong> Processing Toolbox filter design methods available at the<br />
command line are also available in the Filter Designer. Additionally, you can<br />
design a filter by using the Pole/Zero Editor to graphically place poles and<br />
zeros on the z-plane.<br />
• The Filter Visualization Tool is for analyzing filter characteristics. See<br />
“Filter Visualization Tool” on page 6-14.<br />
• The Spectrum Viewer is for spectral analysis. You can use the <strong>Signal</strong><br />
Processing Toolbox spectral estimation methods to estimate the power<br />
spectral density of a signal. See “Spectrum Viewer” on page 6-18.<br />
SPTool Data Structures<br />
You can use SPTool to analyze signals, filters, or spectra that you create at the<br />
MATLAB command line.<br />
You can bring signals, filters, or spectra from the MATLAB workspace into the<br />
SPTool workspace using the Import item under the File menu. <strong>Signal</strong>s, filters,<br />
or spectra that you create in (or import into) the SPTool workspace exist as<br />
MATLAB structures. See the MATLAB documentation for more information on<br />
MATLAB structures.<br />
6-3
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
When you use the Export item under the File menu to save signals, filters, and<br />
spectra that you create or modify in SPTool, these are also saved as MATLAB<br />
structures.<br />
6-4
Opening SPTool<br />
Opening SPTool<br />
To open SPTool, type<br />
sptool<br />
When you first open SPTool, it contains a collection of default signals, filters,<br />
and spectra. You can specify your own preferences for what signals, filters, and<br />
spectra you want to see when SPTool opens. See “Designing a Filter with the<br />
Pole/Zero Editor” on page 6-47 for more details.<br />
You can access these three GUIs from SPTool by selecting a signal, filter, or<br />
spectrum and pressing the appropriate View button:<br />
• <strong>Signal</strong> Browser<br />
• Filter Visualization Tool<br />
• Spectrum Viewer<br />
6-5
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
You can access the Filter Designer GUI by pressing the New button to create<br />
a new filter or the Edit button to edit a selected filter. The Apply button applies<br />
a selected filter to a selected signal.<br />
The Create button opens the Spectrum Viewer and creates the power spectral<br />
density of the selected signal. The Update button opens the Spectrum Viewer<br />
for the selected spectrum.<br />
6-6
Getting Context-Sensitive Help<br />
Getting Context-Sensitive Help<br />
To find information on a particular region of the <strong>Signal</strong> Browser, Filter<br />
Designer, or Spectrum Viewer:<br />
1 Press the What’s this button, .<br />
2 Click on the region of the GUI you want information on.<br />
You can also use the What’s this menu item in the Help menu to launch<br />
context-sensitive help.<br />
6-7
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
<strong>Signal</strong> Browser<br />
You can use the <strong>Signal</strong> Browser to display and analyze signals listed in the<br />
<strong>Signal</strong>s list box in SPTool.<br />
Using the <strong>Signal</strong> Browser you can:<br />
• Analyze and compare vector or array (matrix) signals.<br />
• Zoom in on portions of signal data.<br />
• Measure a variety of characteristics of signal data.<br />
• Compare multiple signals.<br />
• Play portions of signal data on audio hardware.<br />
• Print signal plots.<br />
Opening the <strong>Signal</strong> Browser<br />
To open the <strong>Signal</strong> Browser from SPTool:<br />
1 Select one or more signals in the <strong>Signal</strong>s list in SPTool<br />
2 Press the View button under the <strong>Signal</strong>s list<br />
6-8
<strong>Signal</strong> Browser<br />
The <strong>Signal</strong> Browser has the following components:<br />
• A display region for analyzing signals, including markers for measuring,<br />
comparing, or playing signals<br />
• A “panner” that displays the entire signal length, highlighting the portion<br />
currently active in the display region<br />
• A marker measurements area<br />
• A toolbar with buttons for convenient access to frequently used functions<br />
Icon<br />
Description<br />
Print and print preview<br />
Play an audio signal<br />
Display array and complex signals<br />
6-9
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Icon<br />
Description<br />
Zoom the signal in and out<br />
Select one of several loaded signals<br />
Set the display color and line style of a signal<br />
Toggle the markers on and off<br />
Set marker types<br />
(See “Making <strong>Signal</strong> Measurements with<br />
Markers” on page 6-53)<br />
Turn on the What’s This help<br />
6-10
Filter Designer<br />
Filter Designer<br />
The Filter Designer provides an interactive graphical environment for the<br />
design of digital IIR and FIR filters based on specifications that you enter on a<br />
magnitude or pole-zero plot.<br />
Note You can also use the Filter Design and Analysis Tool (FDATool)<br />
described in Chapter 5, “FDATool: A Filter Design and Analysis GUI” for filter<br />
design and analysis.<br />
Filter Types<br />
You can design filters of the following types using the Filter Designer:<br />
• Bandpass<br />
• Lowpass<br />
• Bandstop<br />
• Highpass<br />
FIR Filter Methods<br />
You can use the following filter methods to design FIR filters:<br />
• Equiripple<br />
• Least squares<br />
• Window<br />
IIR Filter Methods<br />
You can use the following filter methods to design IIR filters:<br />
• Butterworth<br />
• Chebyshev Type I<br />
• Chebyshev Type II<br />
• Elliptic<br />
6-11
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Pole/Zero Editor<br />
You can use the Pole/Zero Editor to design arbitrary FIR and IIR filters by<br />
placing and moving poles and zeros on the complex z-plane.<br />
Spectral Overlay Feature<br />
You can also superimpose spectra on a filter’s magnitude response to see if the<br />
filtering requirements are met.<br />
Opening the Filter Designer<br />
Open the Filter Designer from SPTool by either:<br />
• Pressing the New button in the Filters list in SPTool<br />
• Selecting a filter you want to edit from the Filters list in SPTool, and then<br />
pressing the Edit button<br />
The Filter Designer has the following components:<br />
6-12
Filter Designer<br />
• A pull-down Filter menu for selecting a filter from the list in SPTool<br />
• A Sampling Frequency text box<br />
• A pull-down Algorithm menu for selecting a filter design method or a<br />
pole-zero plot display<br />
• A Specifications area for viewing or modifying a filter’s design parameters<br />
or pole-zero locations<br />
• A plot display region for graphically adjusting filter magnitude responses or<br />
the pole-zero locations<br />
• A Measurements area for viewing the response characteristics and stability<br />
of the current filter<br />
• A toolbar with the following buttons<br />
Icon<br />
Description<br />
Print and print preview<br />
Zoom in and out<br />
Passband view<br />
Overlay spectrum<br />
Turn on the What’s This help<br />
6-13
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Filter Visualization Tool<br />
You can use the Filter Visualization Tool (fvtool) to analyze the following<br />
response characteristics of selected filters:<br />
• Magnitude response<br />
• Phase response<br />
• Impulse response<br />
• Step response<br />
• Group delay<br />
• Phase delay<br />
• Pole and zero locations<br />
• Detailed filter information<br />
FVTool also provides features for<br />
• Overlaying filter responses<br />
• Zooming<br />
• Measuring filter responses<br />
• Modifying display parameters such as frequency ranges or magnitude units<br />
If you start FVTool by clicking the SPTool Filter View button, that FVTool is<br />
linked to SPTool. Any changes made in SPTool to the filter are immediately<br />
reflected in FVTool. The FVTool title bar includes “SPTool” to indicate the link.<br />
If you start an FVTool by clicking the New button or by selecting File-->New<br />
from within FVTool, that FVTool is a stand-alone version and is not linked to<br />
SPTool.<br />
Note Every time you click the Filter View button a new, linked FVTool<br />
starts. This allows you to view multiple analyses simultaneously.<br />
Opening the Filter Visualization Tool<br />
You open FVTool from SPTool as follows.<br />
6-14
Filter Visualization Tool<br />
1 Select one or more filters in the Filters list in SPTool.<br />
2 Click the View button under the Filters list.<br />
When you first open FVTool, it displays the selected filter’s magnitude plot.<br />
Filter Visualization Tool Components<br />
FVTool has the following components:<br />
6-15
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
• Figure toolbar with the following icons.<br />
Icon<br />
Description<br />
Start a new unlinked FVTool<br />
Print file and print preview<br />
Toggle plot editing, add text, add arrow, and add line<br />
Zoom in, zoom in x only, zoom in y only, and return to<br />
full view<br />
Toggle legend<br />
Toggle grid<br />
• Analysis toolbar with the following icons<br />
Icon<br />
Description<br />
Display Magnitude plot<br />
Display Phase plot<br />
Display Magnitude and Phase plot<br />
Display Group Delay plot<br />
Display Phase Delay plot<br />
Display Impulse Response<br />
Display Step Response<br />
Display Pole-Zero plot<br />
Display filter coefficients<br />
Display filter information<br />
• A display area for analyzing one or more frequency response plots for the<br />
selected filter(s)<br />
6-16
Filter Visualization Tool<br />
Using Data Markers<br />
In FVTool, you can use data markers to display information on particular<br />
points in the response plot(s). See “Data Markers” in the FDATool online help<br />
more information.<br />
Analysis Parameters<br />
In the plot area of any filter response plot, right-click and select Analysis<br />
Parameters to display details about the displayed plot. See “Analysis<br />
Parameters” in the FDATool online help for more information.<br />
You can change any parameter in a linked FVTool, except the sampling<br />
frequency. You can only change the sampling frequency using Sampling<br />
Frequency in the SPTool Edit menu or the SPTool Filters Edit button.<br />
6-17
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Spectrum Viewer<br />
You can use the Spectrum Viewer for estimating and analyzing a signal’s<br />
power spectral density (PSD). You can use the PSD estimates to understand a<br />
signal’s frequency content.<br />
The Spectrum Viewer provides the following functionality.<br />
• Analyze and compare spectral density plots.<br />
• Use different spectral estimation methods to create spectra:<br />
- Burg (pburg)<br />
- Covariance (pcov)<br />
- FFT (fft)<br />
- Modified covariance (pmcov)<br />
- MTM (multitaper method) (pmtm)<br />
- MUSIC (pmusic)<br />
- Welch (pwelch)<br />
- Yule-Walker AR (pyulear)<br />
• Modify power spectral density parameters such as FFT length, window type,<br />
and sample frequency.<br />
• Print spectral plots.<br />
Opening the Spectrum Viewer<br />
To open the Spectrum Viewer and create a PSD estimate from SPTool:<br />
1 Select a signal from the <strong>Signal</strong> list box in SPTool.<br />
2 Press the Create button in the Spectra list.<br />
3 Press the Apply button in the Spectrum Viewer.<br />
To open the Spectrum Viewer with a PSD estimate already listed in SPTool:<br />
1 Select a PSD estimate from the Spectra list box in SPTool.<br />
2 Press the View button in the Spectra list.<br />
6-18
Spectrum Viewer<br />
For example:<br />
1 Select mtlb in the default <strong>Signal</strong>s list in SPTool.<br />
2 Press the Create button in SPTool to open the Spectrum Viewer.<br />
3 Press the Apply button in the Spectrum Viewer to plot the spectrum.<br />
The Spectrum Viewer has the following components:<br />
• A signal identification region that provides information about the signal<br />
whose power spectral density estimate is displayed<br />
• A Parameters region for modifying the PSD parameters<br />
• A display region for analyzing spectra and an Options menu for modifying<br />
display characteristics<br />
• Spectrum management controls<br />
- Inherit from menu to inherit PSD specifications from another PSD object<br />
listed in the menu<br />
- Revert button to revert to the named PSD’s original specifications<br />
6-19
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
- Apply button for creating or updating PSD estimates<br />
• A toolbar with buttons for convenient access to frequently used functions<br />
Icon<br />
Description<br />
Print and print preview<br />
Zoom the signal in and out<br />
Select one of several loaded signals<br />
Set the display color and line style of a signal<br />
Toggle the markers on and off<br />
Set marker types<br />
Turn on the What’s This help<br />
6-20
Filtering and Analysis of Noise<br />
Filtering and Analysis of Noise<br />
The following sections provide an example of using the GUI-based interactive<br />
tools to:<br />
• Design and implement an FIR bandpass digital filter<br />
• Apply the filter to a noisy signal<br />
• Analyze signals and their spectra<br />
The steps include:<br />
1 Creating a noisy signal in the MATLAB workspace and importing it into<br />
SPTool<br />
2 Designing a bandpass filter using the Filter Designer<br />
3 Applying the filter to the original noise signal to create a bandlimited noise<br />
signal<br />
4 Comparing the time domain information of the original and filtered signals<br />
using the <strong>Signal</strong> Browser<br />
5 Comparing the spectra of both signals using the Spectrum Viewer<br />
Step 1: Importing a <strong>Signal</strong> into SPTool<br />
To import a signal into SPTool from the workspace or disk, the signal must be<br />
either:<br />
• A special MATLAB signal structure, such as that saved from a previous<br />
SPTool session<br />
• A signal created as a variable (vector or matrix) in the MATLAB workspace<br />
For this example, create a new signal at the command line and then import it<br />
as a structure into SPTool:<br />
1 Create a random signal in the MATLAB workspace by typing<br />
randn('state',0);<br />
x = randn(5000,1);<br />
2 If SPTool is not already open, open SPTool by typing<br />
6-21
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
sptool<br />
The SPTool window is displayed.<br />
3 Select Import from the File menu in SPTool. The Import to SPTool dialog<br />
opens.<br />
The variable x is displayed in the Workspace Contents list. (If it is not,<br />
select the From Workspace radio button to display the contents of the<br />
workspace.)<br />
4 Select the signal and import it into the Data field:<br />
a<br />
b<br />
c<br />
d<br />
e<br />
Make sure that <strong>Signal</strong> is selected in the Import As pull-down menu.<br />
Select the signal variable x in the Workspace Contents list.<br />
Click on the arrow to the left of the Data field or type x in the Data field.<br />
Type 5000 in the Sampling Frequency field.<br />
Name the signal by typing noise in the Name field.<br />
f<br />
Press OK.<br />
At this point, the signal noise[vector] is selected in SPTool’s <strong>Signal</strong>s list.<br />
6-22
Filtering and Analysis of Noise<br />
Note You can import filters and spectra into SPTool in much the same way as<br />
you import signals. See “Importing Filters and Spectra into SPTool” on<br />
page 6-40 for specific details.<br />
You can also import signals from MAT-files on your disk, rather than from the<br />
workspace. See “Loading Variables from the Disk” on page 6-44 for more<br />
information.<br />
Type help sptool for information about importing from the command line.<br />
Step 2: Designing a Filter<br />
You can import an existing filter into SPTool, or you can design and edit a new<br />
filter using the Filter Designer.<br />
In this example:<br />
1 Open a default filter in the Filter Designer.<br />
2 Specify an equiripple bandpass FIR filter.<br />
Opening the Filter Designer<br />
To open the Filter Designer, press the New button in SPTool. This opens the<br />
Filter Designer with a default filter named filt1.<br />
Specifying the Bandpass Filter<br />
Design an equiripple bandpass FIR filter with the following characteristics:<br />
• Sampling frequency of 5000 Hz<br />
• Stopband frequency ranges of [0 500] Hz and [1500 2500] Hz<br />
• Passband frequency range of [750 1250] Hz<br />
• Ripple in the passband of 0.01 dB<br />
• Stopband attenuation of 75 dB<br />
To modify your filter in the Filter Designer to meet these specifications:<br />
6-23
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
1 Change the filter sampling frequency to 5000 by entering this value in the<br />
Sampling Frequency text box.<br />
2 Select Equiripple FIR from the Algorithm list.<br />
3 Select bandpass from the Type list.<br />
4 Set the passband edge frequencies by entering 750 for Fp1 and 1250 for Fp2.<br />
5 Set the stopband edge frequencies by entering 500 for Fs1 and 1500 for Fs2.<br />
6 Type 0.01 into the Rp field and 75 into the Rs field.<br />
Rp sets the maximum passband ripple and Rs sets the stopband attenuation<br />
for the filter.<br />
7 Press the Apply button to design the new filter.When the new filter is<br />
designed, the magnitude response of the filter is displayed with a solid line<br />
in the display region.<br />
6-24
Filtering and Analysis of Noise<br />
The resulting filter is an order-78 bandpass equiripple filter.<br />
Note You can use the solid line in the plot to modify your filter design. See<br />
“Redesigning a Filter Using the Magnitude Plot” on page 6-50 for more<br />
information.<br />
Step 3: Applying a Filter to a <strong>Signal</strong><br />
When you apply a filter to a signal, you create a new signal in SPTool<br />
representing the filtered signal.<br />
To apply the filter filt1 you just created to the signal noise:<br />
1 Select SPTool from the Window menu in the Filter Designer.<br />
6-25
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
2 Select the signal noise[vector] from the <strong>Signal</strong>s list and select the filter<br />
(named filt1[design]) from the Filters list.<br />
Press Apply to apply the filter filt1 to the signal noise. The Apply Filter<br />
dialog box is displayed<br />
.<br />
3 Keep the default filter structure selected in the Algorithm list.<br />
4 Name the new signal by typing blnoise in the Output <strong>Signal</strong> field in this<br />
dialog box.<br />
6-26
Filtering and Analysis of Noise<br />
5 Press OK to close the Apply Filter dialog box.<br />
The filter is applied to the selected signal and the filtered signal<br />
blnoise[vector] is listed in the <strong>Signal</strong>s list in SPTool.<br />
Step 4: Analyzing a <strong>Signal</strong><br />
You can analyze and print signals using the <strong>Signal</strong> Browser. You can also play<br />
the signals if your computer has audio output capabilities.<br />
For example, compare the signal noise to the filtered signal blnoise:<br />
1 Shift+click on the noise and blnoise signals in the <strong>Signal</strong>s list of SPTool to<br />
select both signals.<br />
2 Press the View button under the <strong>Signal</strong>s list.<br />
The <strong>Signal</strong> Browser is activated and both signals are displayed in the<br />
display region. (The names of both signals are shown above the display<br />
region.) Initially, the original noise signal covers up the bandlimited<br />
blnoise signal.<br />
3 Push the selection button on the toolbar, , to select the blnoise signal.<br />
The display area is updated. Now you can see the blnoise signal<br />
superimposed on top of the noise signal. The signals are displayed in<br />
different colors in both the display region and the panner. You can change<br />
the color of the selected signal using the Line Properties button on the<br />
toolbar, .<br />
6-27
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Playing a <strong>Signal</strong><br />
When you press the Play button in the <strong>Signal</strong> Browser toolbar,<br />
signal is played on the computer’s audio hardware:<br />
, the active<br />
1 To hear a portion of the active (selected) signal<br />
a<br />
b<br />
Use the vertical markers to select a portion of the signal you want to play.<br />
Vertical markers are enabled by the and buttons.<br />
Press the Play button.<br />
2 To hear the other signal<br />
a<br />
b<br />
Select the signal as in step 3 above. You can also select the signal directly<br />
in the display region.<br />
Press the Play button again.<br />
Printing a <strong>Signal</strong><br />
You can print from the <strong>Signal</strong> Browser using the Print button, .<br />
6-28
Filtering and Analysis of Noise<br />
You can use the line display buttons to maximize the visual contrast between<br />
the signals by setting the line color for noise to gray and the line color for<br />
blnoise to white. Do this before printing two signals together.<br />
Note You can follow the same rules to print spectra, but you can’t print filter<br />
responses directly from SPTool.<br />
Use the <strong>Signal</strong> Browser region in the Preferences dialog box in SPTool to<br />
suppress printing of both the panner and the marker settings.<br />
To print both signals, press the Print button in the <strong>Signal</strong> Browser toolbar.<br />
Step 5: Spectral Analysis in the Spectrum Viewer<br />
You can analyze the frequency content of a signal using the Spectrum Viewer,<br />
which estimates and displays a signal’s power spectral density.<br />
For example, to analyze and compare the spectra of noise and blnoise:<br />
1 Create a power spectral density (PSD) object, spect1, that is associated with<br />
the signal noise, and a second PSD object, spect2, that is associated with<br />
the signal blnoise.<br />
6-29
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
2 Open the Spectrum Viewer to analyze both of these spectra.<br />
3 Print both spectra.<br />
Creating a PSD Object From a <strong>Signal</strong><br />
1 Click on SPTool, or select SPTool from the Window menu of any active open<br />
GUI. SPTool is now the active window.<br />
2 Select the noise[vector] signal in the <strong>Signal</strong>s list of SPTool.<br />
3 Press Create in the Spectra list.<br />
The Spectrum Viewer is activated, and a PSD object (spect1) corresponding<br />
to the noise signal is created in the Spectra list. The PSD is not computed<br />
or displayed yet.<br />
4 Press Apply in the Spectrum Viewer to compute and display the PSD<br />
estimate spect1 using the default parameters.<br />
The PSD of the noise signal is displayed in the display region. The<br />
identifying information for the PSD’s associated signal (noise) is displayed<br />
above the Parameters region.<br />
The PSD estimate spect1 is within 2 or 3 dB of 0, so the noise has a fairly<br />
“flat” power spectral density.<br />
5 Follow steps 1 through 4 for the bandlimited noise signal blnoise to create<br />
a second PSD estimate spect2.<br />
The PSD estimate spect2 is flat between 750 and 1250 Hz and has 75 dB<br />
less power in the stopband regions of filt1.<br />
Opening the Spectrum Viewer with Two Spectra<br />
1 Reactivate SPTool again, as in step 1 above.<br />
2 Shift+click on spect1 and spect2 in the Spectra list to select them both.<br />
3 Press View in the Spectra list to reactivate the Spectrum Viewer and<br />
display both spectra together.<br />
6-30
Filtering and Analysis of Noise<br />
Printing the Spectra<br />
Before printing the two spectra together, use the color and line style selection<br />
button, , to differentiate the two plots by line style, rather than by color.<br />
To print both spectra:<br />
1 Press the Print Preview button, , in the toolbar on the Spectrum<br />
Viewer.<br />
2 From the Spectrum Viewer Print Preview window, drag the legend out of<br />
the display region so that it doesn’t obscure part of the plot.<br />
3 Press the Print button in the Spectrum Viewer Print Preview window.<br />
6-31
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
6-32
Exporting <strong>Signal</strong>s, Filters, and Spectra<br />
Exporting <strong>Signal</strong>s, Filters, and Spectra<br />
You can export SPTool signals, filters, and spectra as structures to the<br />
MATLAB workspace or to your disk.<br />
In each case you:<br />
1 Select the items in SPTool you want to export.<br />
2 Select Export from the File menu.<br />
Opening the Export Dialog Box<br />
To save the filter filt1 you just created in this example, open the Export<br />
dialog box with filt1 preselected:<br />
1 Select filt1 in the SPTool Filters list.<br />
2 Select Export from the File menu.<br />
The Export dialog box opens with filt1 preselected.<br />
6-33
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Exporting a Filter to the MATLAB Workspace<br />
To export the filter filt1 to the MATLAB workspace:<br />
1 Select filt1 from the Export List and deselect all other items using<br />
Ctrl+click.<br />
2 Press the Export to Workspace button.<br />
6-34
Accessing Filter Parameters<br />
Accessing Filter Parameters<br />
You can access filter parameters in the following two ways.<br />
• “Accessing Filter Parameters in a Saved Filter”<br />
• “Accessing Parameters in a Saved Spectrum”<br />
Accessing Filter Parameters in a Saved Filter<br />
The MATLAB structures created by SPTool have several associated fields,<br />
many of which are also MATLAB structures. See the MATLAB documentation<br />
for general information about MATLAB structures.<br />
For example, after exporting a filter filt1 to the MATLAB workspace, type<br />
filt1<br />
to display the fields of the MATLAB filter structure. The tf, Fs, and specs<br />
fields of the structure contain the information that describes the filter.<br />
The tf Field: Accessing Filter Coefficients<br />
The tf field is a structure containing the transfer function representation of<br />
the filter. Use this field to obtain the filter coefficients;<br />
• filt1.tf.num contains the numerator coefficients.<br />
• filt1.tf.den contains the denominator coefficients.<br />
The vectors contained in these structures represent polynomials in descending<br />
powers of z. The numerator and denominator polynomials are used to specify<br />
the transfer function<br />
Hz ()<br />
where:<br />
Bz () b( 1) + b( 2)z ----------<br />
– 1 + L + bnb ( + 1)z = = -----------------------------------------------------------------------------------------<br />
– m<br />
Az () a( 1) + a( 2)z – 1 + L + ana ( + 1)z – n<br />
• b is a vector containing the coefficients from the tf.num field.<br />
• a is a vector containing the coefficients from the tf.den field.<br />
• m is the numerator order.<br />
• n is the denominator order.<br />
6-35
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
You can change the filter representation from the default transfer function to<br />
another form by using the tf2ss or tf2zp functions.<br />
The Fs Field: Accessing Filter Sample Frequency<br />
The Fs field contains the sampling frequency of the filter in hertz.<br />
The specs Field: Accessing other Filter Parameters<br />
The specs field is a structure containing parameters that you specified for the<br />
filter design. The first field, specs.currentMo<strong>du</strong>le, contains a string<br />
representing the most recent design method selected from the Filter Designer’s<br />
Algorithm list before you exported the filter. The possible contents of the<br />
currentMo<strong>du</strong>le field and the corresponding design methods are shown below.<br />
Contents of the currentMo<strong>du</strong>le field<br />
fdbutter<br />
fdcheby1<br />
fdcheby2<br />
fdellip<br />
fdfirls<br />
fdkaiser<br />
fdremez<br />
Design Method<br />
Butterworth IIR<br />
Chebyshev Type I IIR<br />
Chebyshev Type II IIR<br />
Elliptic IIR<br />
Least Squares FIR<br />
Kaiser Window FIR<br />
Equiripple FIR<br />
Following the specs.currentMo<strong>du</strong>le field, there may be up to seven additional<br />
fields, with labels such as specs.fdremez, specs.fdfirls, etc. The design<br />
specifications for the most recently exported filter are contained in the field<br />
whose label matches the currentMo<strong>du</strong>le string. For example, if the specs<br />
structure is<br />
filt1.specs<br />
ans<br />
currentMo<strong>du</strong>le: 'fdremez'<br />
fdremez: [1x1 struct]<br />
6-36
Accessing Filter Parameters<br />
the filter specifications are contained in the fdremez field, which is itself a data<br />
structure.<br />
The specifications include the parameter values from the Specifications<br />
region of the Filter Designer, such as band edges and filter order. For example,<br />
the filter above has the following specifications stored in<br />
filt1.specs.fdremez:<br />
filt1.specs.fdremez<br />
ans =<br />
setOrderFlag: 0<br />
type: 3<br />
f: [0 0.2000 0.3000 0.5000 0.6000 1]<br />
m: [6x1 double]<br />
Rp: 0.0100<br />
Rs: 75<br />
wt: [3.2371 1 3.2371]<br />
order: 78<br />
Because certain filter parameters are unique to a particular design, this<br />
structure has a different set of fields for each filter design.<br />
The table below describes the possible fields associated with the filter design<br />
specification field (the specs field) that can appear in the exported structure.<br />
Parameter<br />
Beta<br />
f<br />
Fpass<br />
Fstop<br />
Description<br />
Kaiser window β parameter.<br />
Contains a vector of band-edge frequencies, normalized so<br />
that 1 Hz corresponds to half the sample frequency.<br />
Passband cutoff frequencies. Scalar for lowpass and<br />
highpass designs, two-element vector for bandpass and<br />
bandstop designs.<br />
Stopband cutoff frequencies. Scalar for lowpass and<br />
highpass designs, two-element vector for bandpass and<br />
bandstop designs.<br />
6-37
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Parameter<br />
m<br />
order<br />
Rp<br />
Rs<br />
setOrderFlag<br />
type<br />
w3db<br />
wind<br />
Wn<br />
wt<br />
Description<br />
The response magnitudes corresponding to the band-edge<br />
frequencies in f.<br />
Filter order.<br />
Passband ripple (dB)<br />
Stopband attenuation (dB)<br />
Contains 1 if the filter order was specified manually (i.e.,<br />
the Minimum Order box in the Specifications region<br />
was not selected). Contains 0 if the filter order was<br />
computed automatically.<br />
Contains 1 for lowpass, 2 for highpass, 3 for bandpass, or<br />
4 for bandstop.<br />
-3 dB frequency for Butterworth IIR designs.<br />
Vector of Kaiser window coefficients.<br />
Cutoff frequency for the Kaiser window FIR filter when<br />
setOrderFlag = 1.<br />
Vector of weights, one weight per frequency band.<br />
Accessing Parameters in a Saved Spectrum<br />
The following structure fields describe the spectra saved by SPTool.<br />
Field<br />
P<br />
f<br />
Description<br />
The spectral power vector.<br />
The spectral frequency vector.<br />
6-38
Accessing Filter Parameters<br />
Field<br />
confid<br />
Description<br />
A structure containing the confidence intervals data<br />
• The confid.level field contains the chosen<br />
confidence level.<br />
• The confid.Pc field contains the spectral power<br />
data for the confidence intervals.<br />
• The confid.enable field contains a 1 if confidence<br />
levels are enabled for the power spectral density.<br />
signalLabel<br />
Fs<br />
The name of the signal from which the power spectral<br />
density was generated.<br />
The associated signal’s sample rate.<br />
You can access the information in these fields as you do with every MATLAB<br />
structure.<br />
For example, if you export an SPTool PSD estimate spect1 to the workspace,<br />
type<br />
spect1.P<br />
to obtain the vector of associated power values.<br />
6-39
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Importing Filters and Spectra into SPTool<br />
In addition to importing signals into SPTool, you can import filters or spectra<br />
into SPTool from either the workspace or from a file.<br />
The proce<strong>du</strong>res are very similar to those explained in:<br />
• “Step 1: Importing a <strong>Signal</strong> into SPTool” on page 6-21 for loading variables<br />
from the workspace<br />
• “Loading Variables from the Disk” on page 6-44 for loading variables from<br />
your disk<br />
Importing Filters<br />
When you import filters, first select the appropriate filter form from the Form<br />
list.<br />
For every filter you specify a variable name or a value for the filter’s sampling<br />
frequency in the Sampling Frequency field. Each filter form requires different<br />
variables.<br />
Transfer Function<br />
For Transfer Function, you specify the filter by its transfer function<br />
representation:<br />
6-40
Importing Filters and Spectra into SPTool<br />
Hz ()<br />
Bz ()<br />
= ---------- =<br />
Az ()<br />
b( 1) b( 2)z ---------------------------------------------------------------------------------------<br />
+ – 1 + L + bm ( + 1)z – m<br />
a( 1) + a( 2)z – 1 + L + an ( + 1)z – n<br />
• The Numerator field specifies a variable name or value for the numerator<br />
coefficient vector b, which contains m+1 coefficients in descending powers of<br />
z.<br />
• The Denominator field specifies a variable name or value for the<br />
denominator coefficient vector a, which contains n+1 coefficients in<br />
descending powers of z.<br />
State Space<br />
For State Space, you specify the filter by its state-space representation:<br />
x· = Ax + Bu<br />
y = Cx + Du<br />
The A-Matrix, B-Matrix, C-Matrix, and D-Matrix fields specify a variable<br />
name or a value for each matrix in this system.<br />
Zeros, Poles, Gain<br />
For Zeros, Poles, Gain, you specify the filter by its zero-pole-gain<br />
representation:<br />
Hz ()<br />
=<br />
Zz<br />
---------<br />
()<br />
= k-----------------------------------------------------------------------------------<br />
( z – z( 1)<br />
)( z – z( 2)<br />
)L( z – z( m)<br />
)<br />
Pz () ( z – p( 1)<br />
)( z – p( 2)<br />
)L( z – p( n)<br />
)<br />
• The Zeros field specifies a variable name or value for the zeros vector z,<br />
which contains the locations of m zeros.<br />
• The Poles field specifies a variable name or value for the zeros vector p,<br />
which contains the locations of n poles.<br />
• The Gain field specifies a variable name or value for the gain k.<br />
Second Order Sections<br />
For 2nd Order Sections you specify the filter by its second-order section<br />
representation:<br />
6-41
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
L<br />
∏<br />
Hz () = H k () z =<br />
k = 1<br />
L<br />
b 0k + b 1k z – 1 +<br />
∏<br />
b z–<br />
2<br />
--------------------------------------------------------- 2k<br />
1 + a 1k z – 1 + a z–<br />
2<br />
2k k = 1<br />
The SOS Matrix field specifies a variable name or a value for the L-by-6 SOS<br />
matrix<br />
b 01 b 11 b 21 1 a 11 a 21<br />
sos =<br />
b 02 b 12 b 22 1 a 12 a 22<br />
M M M M M M<br />
b 0L b 1L b 2L 1 a 1L a 2L<br />
whose rows contain the numerator and denominator coefficients b ik and a ik of<br />
the second-order sections of H(z).<br />
Note If you import a filter that was not created in SPTool, you can only edit<br />
that filter using the Pole/Zero Editor.<br />
Importing Spectra<br />
When you import a power spectral density (PSD), you specify:<br />
• A variable name or a value for the PSD vector in the PSD field<br />
• A variable name or a value for the frequency vector in the Freq. Vector field<br />
The PSD values in the PSD vector correspond to the frequencies contained in<br />
the Freq. Vector vector; the two vectors must have the same length.<br />
6-42
Importing Filters and Spectra into SPTool<br />
6-43
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Loading Variables from the Disk<br />
To import variables representing signals, filters, or spectra from a MAT-file on<br />
your disk;<br />
1 Select the From Disk radio button and do either of the following:<br />
- Type the name of the file you want to import into the MAT-file Name field<br />
and press either the Tab or the Enter key on your keyboard.<br />
- Select Browse, and then find and select the file you want to import using<br />
the Select File to Open dialog. Press OK to close that dialog.<br />
In either case, all variables in the MAT-file you selected are displayed in the<br />
File Contents list.<br />
2 Select the variables to be imported into SPTool.<br />
You can now import one or more variables from the File Contents list into<br />
SPTool, as long as these variables are scalars, vectors, or matrices.<br />
6-44
Selecting <strong>Signal</strong>s, Filters, and Spectra in SPTool<br />
Selecting <strong>Signal</strong>s, Filters, and Spectra in SPTool<br />
All signals, filters, or spectra listed in SPTool exist as special MATLAB<br />
structures. You can bring data representing signals, filters, or spectra into<br />
SPTool from the MATLAB workspace. In general, you can select one or several<br />
items in a given list box. An item is selected when it is highlighted.<br />
The <strong>Signal</strong>s list shows all vector and array signals in the current SPTool<br />
session.<br />
The Filters list shows all designed and imported filters in the current SPTool<br />
session.<br />
The Spectra list shows all spectra in the current SPTool session.<br />
You can select a single data object in a list, a range of data objects in a list, or<br />
multiple separate data objects in a list. You can also have data objects<br />
simultaneously selected in different lists:<br />
• To select a single item, click on it. All other items in that list box become<br />
deselected.<br />
• To add or remove a range of items, Shift+click on the items at the top and<br />
bottom of the section of the list that you want to add. You can also drag your<br />
mouse pointer to select these items.<br />
• To add a single data object to a selection or remove a single data object from<br />
a multiple selection, Ctrl+click on the object.<br />
6-45
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Editing <strong>Signal</strong>s, Filters, or Spectra in SPTool<br />
You can edit selected items in SPTool by:<br />
1 Selecting the names of the signals, filters, or spectra you want to edit.<br />
2 Selecting the appropriate Edit menu item:<br />
- Duplicate to copy an item in an SPTool list<br />
- Clear to delete an item in an SPTool list<br />
- Name to rename an item in an SPTool list<br />
- Sampling Frequency to modify the sampling frequency associated with<br />
either a signal (and its associated spectra) or filter in an SPTool list<br />
The pull-down menu next to each menu item shows the names of all selected<br />
items.<br />
You can also edit the following signal characteristics by right-clicking in the<br />
display region of the <strong>Signal</strong> Browser, the Filter Visualization Tool, or the<br />
Spectrum Viewer:<br />
• The signal name<br />
• The sampling frequency<br />
• The line style properties<br />
Note If you modify the sampling frequency associated with a signal’s<br />
spectrum using the right-click menu on the Spectrum Viewer display region,<br />
the sampling frequency of the associated signal is automatically updated.<br />
6-46
Designing a Filter with the Pole/Zero Editor<br />
Designing a Filter with the Pole/Zero Editor<br />
To design a filter transfer function using the Filter Designer Pole/Zero Editor:<br />
1 Select the Pole/Zero Editor option from the Algorithm list to open the<br />
Pole/Zero Editor in the Filter Designer display.<br />
2 Enter the desired filter gain in the Gain edit box.<br />
3 Select a pole or zero (or conjugate pair) by selecting one of the (pole) or<br />
(zero) symbols on the plot.<br />
4 Choose the coordinates to work in by specifying Polar or Rectangular from<br />
the Coordinates list.<br />
5 Specify the new location(s) of the selected pole, zero, or conjugate pair by<br />
typing values into the Mag and Angle fields (for angular coordinates) or X<br />
and Y (for rectangular coordinates) fields. Alternatively, position the poles<br />
and zeros by dragging the and symbols.<br />
6 Use the Conjugate pair check box to create a conjugate pair from a lone pole<br />
or zero, or to break a conjugate pair into two indivi<strong>du</strong>al poles or zeros.<br />
Design a new filter or edit an existing filter in the same way.<br />
Note Keep the Filter Visualization Tool (FVTool) open while designing a<br />
filter with the Pole/Zero Editor. Any changes that you make to the filter<br />
transfer function in the Pole/Zero Editor are then simultaneously reflected in<br />
the response plots of FVTool.<br />
6-47
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Positioning Poles and Zeros<br />
You can use your mouse to move poles and zeros around the pole/zero plot and<br />
modify your filter design.<br />
Icon<br />
Description<br />
Enable moving poles or zeros by dragging on the plot<br />
Add pole<br />
Add zero<br />
Erase poles or zeros<br />
You can move both members of a conjugate pair simultaneously by<br />
manipulating just one of the poles or zeros.<br />
To ungroup conjugates, select the desired pair and clear Conjugate pair in the<br />
Specifications region on the Filter Designer.<br />
When you place two or more poles (or two or more zeros) directly on top of each<br />
other, a number is displayed next to the symbols (on the left for poles, and on<br />
the right for zeros) indicating the number of poles or zeros at that location (e.g.,<br />
for three zeros). This number makes it easy to keep track of all the poles<br />
and zeros in the plot area, even when several are superimposed on each other<br />
6-48
Designing a Filter with the Pole/Zero Editor<br />
and are not visually differentiable. Note, however, that this number does not<br />
indicate the multiplicity of the poles or zeros to which it is attached.<br />
To detect whether or not a set of poles or zeros are truly multiples, use the zoom<br />
tools to magnify the region around the poles or zeros in question. Because<br />
numerical limitations usually prevent any set of poles or zeros from sharing<br />
exactly the same value, at a high enough zoom level even truly multiple poles<br />
or zeros appear distinct from each other.<br />
A common way to assess whether a particular group of poles or zeros contains<br />
multiples is by comparing the mutual proximity of the group members against<br />
a selected threshold value. As an example, the resi<strong>du</strong>ez function defines a pole<br />
or zero as being a multiple of another pole or zero if the absolute distance<br />
separating them is less than 0.1% of the larger pole or zero’s magnitude.<br />
6-49
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
Redesigning a Filter Using the Magnitude Plot<br />
After designing a filter in the Filter Designer, you can redesign it by dragging<br />
the specification lines on the magnitude plot. Use the specification lines to<br />
change passband ripple, stopband attenuation, and edge frequencies.<br />
In the following example, create a Chebyshev filter and modify it by dragging<br />
the specification lines:<br />
1 Select Chebyshev Type I IIR from the Algorithm menu.<br />
2 Select highpass from the Type menu.<br />
3 Type 2000 in the Sampling Frequency field.<br />
4 Set the following parameters:<br />
- Fp = 800<br />
- Fs = 700<br />
- Rp = 2.5<br />
- Rs = 35<br />
5 Select Minimum Order so the Filter Designer can calculate the lowest filter<br />
order that pro<strong>du</strong>ces the desired characteristics.<br />
6 Press Apply to compute the filter and update the response plot.<br />
7 Position the cursor over the horizontal filter specification line for the<br />
stopband. This is the first (leftmost) horizontal specification line you see.<br />
The cursor changes to the up/down drag indicator.<br />
8 Drag the line until the Rs (stopband attenuation) field reads 100.<br />
Note The Order value in the Measurements region changes because a<br />
higher filter order is needed to meet the new specifications.<br />
6-50
Setting Preferences<br />
Setting Preferences<br />
Use Preferences from the SPTool File menu to customize displays and certain<br />
parameters for SPTool and its four component GUIs. The new settings are<br />
saved on disk and are used when you restart SPTool from MATLAB.<br />
In the Preferences regions, you can:<br />
• Select colors and markers for all displays.<br />
• Select colors and line styles for displayed signals.<br />
• Configure labels, and enable/disable markers, panner, and zoom in the<br />
<strong>Signal</strong> Browser.<br />
• Configure display parameters, and enable/disable markers and zoom in the<br />
Spectrum Viewer.<br />
• Specify FFT length, and enable/disable mouse zoom and grid in the Filter<br />
Designer.<br />
• Enable/disable use of a default session file.<br />
• Export filters for use with the Control System Toolbox.<br />
• Enable/disable search for plug-ins at start-up.<br />
Note You can set MATLAB preferences that affect the Filter Visualization<br />
Tool only from within FVTool by selecting Preferences from the File menu.<br />
You can set FVTool-specific preferences using the Analysis Parameters on<br />
the Analysis menu.<br />
When you first select Preferences, the Preferences dialog box opens with<br />
Markers selected by default.<br />
6-51
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
You can:<br />
• Change the settings for markers from this panel of the Preferences dialog.<br />
• Choose any of the other categories listed to customize its settings.<br />
Click once on any listed category in the left pane of the Preferences dialog to<br />
select it.<br />
6-52
Making <strong>Signal</strong> Measurements with Markers<br />
Making <strong>Signal</strong> Measurements with Markers<br />
You can use the markers on the <strong>Signal</strong> Browser or the Spectrum Viewer to<br />
make measurements on either of the following:<br />
• A signal in the <strong>Signal</strong> Browser<br />
• A power spectral density plotted in the Spectrum Viewer<br />
The following marker buttons are included<br />
.<br />
Icon<br />
Description<br />
Toggle markers on/off<br />
Vertical markers<br />
Horizontal markers<br />
Vertical markers with tracking<br />
Vertical markers with tracking and slope<br />
Display peaks (local maxima)<br />
Display valleys (local minima)<br />
To make a measurement:<br />
1 Select a line to measure (or play, if you are in the <strong>Signal</strong> Browser).<br />
2 Select one of the marker buttons to apply a marker to the displayed signal.<br />
3 Position a marker in the main display area by grabbing it with your mouse<br />
and dragging:<br />
6-53
6 SPTool: A <strong>Signal</strong> Processing GUI Suite<br />
a<br />
b<br />
c<br />
Select a marker setting. If you choose the Vertical, Track, or Slope<br />
buttons, you can drag a marker to the right or left. If you choose the<br />
Horizontal button, you can drag a marker up or down.<br />
Move the mouse over the marker (1 or 2) that you want to drag.<br />
The hand cursor with the marker number inside it is displayed when<br />
your mouse passes over a marker.<br />
Drag the marker to where you want it on the signal.<br />
As you drag a marker, the bottom of the <strong>Signal</strong> Browser shows the current<br />
position of both markers. Depending on which marker setting you select,<br />
some or all of the following fields are displayed—x1, y1, x2, y2, dx, dy, m.<br />
These fields are also displayed when you print from the <strong>Signal</strong> Browser,<br />
unless you suppress them.<br />
You can also position a marker by typing its x1 and x2 or y1 and y2 values in<br />
the region at the bottom.<br />
6-54