18.01.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!