Vous êtes sur la page 1sur 104

T. P.

Traitement du Signal
Maîtrise E.E.A.

Année Universitaire 2004/2005

E. Losson, O. Horn, G. Bourhis et A. Fattouh


2
TP 1 : INITIATION A MATLAB

1) But de TP

Il s’agit de se familiariser avec le logiciel MATLAB qui intègre l’analyse numérique et le calcul
matriciel. MATLAB (MATrix LABoratory) est un logiciel puissant de calcul matriciel. En effet, toute
variable est introduite sous forme de matrice.
Exemple: un nombre (réel, complexe ou entier) correspond à une matrice 1 x 1,
un vecteur de n nombres correspond à une matrice 1 x n.
Ce TP doit permettre à tout étudiant de maîtriser l’environnement du logiciel de manière à pouvoir
travailler de manière autonome.

2) Instructions élémentaires utilisées dans MATLAB

2.1) Manipulations de variables et opérations arithmétiques sur les matrices

Après avoir cliqué sur l’icône MATLAB dans WINDOWS, vous vous trouvez dans la feuille de calcul de
MATLAB que l’on appellera fenêtre MATLAB. Le curseur se situe derrière 'l'invite' représenté par ce
symbole: >>
A cet endroit vous pouvez utiliser MATLAB aussi simplement qu’une machine à calculer.
Taper par exemple 2+3 puis Entrée, le résultat apparaît directement à la suite.
Bien entendu MATLAB est beaucoup plus puissant que votre calculatrice puisque vous pouvez réaliser
des programmes structurés, travailler sur des matrices de grande dimension, faire des calculs sur des
nombres complexes, afficher ou imprimer des graphes de qualité en 2D ou 3D. Enfin le grand avantage de
MATLAB est d’offrir à l’utilisateur un grand nombre de fonctions dédiées soit au calcul numérique, soit
au traitement du signal, soit à l’automatique ou encore aux réseaux de neurones.
Nous n’utiliserons qu’une infime partie des immenses possibilités de calcul de MATLAB, nous allons bien
sûr commencer par les plus élémentaires d’entre elles.

Assignation d’une variable : taper a=2 puis ‘Entrée’ (pour valider votre opération) et la variable a vaudra
2.
Attention MATLAB fait la différence entre les majuscules et les minuscules.
Taper par exemple a et le contenu de la variable a sera affiché, c’est à dire 2. Si vous tapez A aucune
valeur ne sera affichée puisque la variable A n’est pas allouée.
Vous pouvez fort bien réallouer une autre valeur à la variable a. Taper par exemple:

3
a=[1 2; 3 4] et le résultat suivant sera affiché :
a=
1 2
3 4
La variable a est ainsi devenue une matrice 2 x 2. Nous verrons dans le paragraphe suivant comment l'on
peut définir des matrices sans nécessairement donner tous les éléments de celles-ci. Dans la définition de
la matrice a donnée ci dessus, les crochets servent à englober tous les éléments et le point virgule
permet de séparer chaque ligne. A noter que les indices partent obligatoirement de 1, ils ne sont pas
paramétrables comme dans d’autres langages. Ainsi si vous tapez a(1,1), le résultat affiché sera 1. Le
chiffre 1 sera donc l’élément (1,1) de la matrice a; on ne pourra pas changer cela pour qu’il devienne
l’élément (0,0).
Pour extraire une ligne ou une colonne d’une matrice, il existe les instructions a(n, :) et a( :,n) où n
représente le numéro de la ligne. Tester ces instructions en tapant a(1, :) et a( :,1).
Pour transposer la matrice, il suffit de taper a’. Les transpositions peuvent être utiles pour transformer un
vecteur ligne en vecteur colonne, ou inversement.
Pour créer une matrice, nous avons vu qu’il était possible de la définir à partir de l’ensemble de ses
éléments mis entre crochets en séparant les lignes par des points virgules. Dans le cas de matrices
élémentaires, Matlab permet de définir celles-ci de manière simple, pour définir une matrice x ne
contenant que des 0 par exemple, il suffit de taper : x=zeros(m,n) où m et n représentent respectivement
le nombre de lignes et le nombre de colonnes. Les instructions ones et eye permettent de définir
respectivement des matrices de 1 et des matrices identité. Il existe d’autres matrices élémentaires qu’il
est possible de créer de cette manière, reportez vous à l’aide de Matlab pour en prendre connaissance en
cliquant sur Help puis Help Window et matlab\elmat. Vous trouverez également sous cette rubrique :
- des instructions donnant des informations sur les matrices comme la taille par exemple : size et
length.
- des instructions permettant de manipuler les matrices comme la rotation avec rot90, flipud, fliplr.
Passons à présent aux opérations matricielles:
- Addition: taper: b=2+a et vérifier l’opération réalisée.
taper: c=a+b et vérifier le résultat.
- Soustraction: taper: b=b-2 et vérifier que b vaut à présent a.
taper: b=b-a et vérifier que les éléments de b sont nuls.
- Multiplication: taper: b=2*a et noter ce que vaut b
taper: c=a.*b et relever les valeurs de c pour comprendre
comment les éléments de a et b sont multipliés entre eux.
taper: d=a*b et donner la différence par rapport à l’opération
précédente.

4
Attention cette dernière opération n’est pas commutative contrairement au .*. Le produit b*a est donc
différent de d (sauf cas particulier comme ici).
- Division: taper: c./a et comparer le résultat avec b.
taper: c./b et comparer le résultat avec a.
taper: a\d et vérifier que le résultat correspond à l’inverse de a
multiplié par d (c’est à dire b).
taper: d/b et vérifier que le résultat correspond au produit de d
par l’inverse de b (c’est à dire a).
- Puissance: taper: a.^2 et expliquer le type d’opération effectuée.
taper: a^2 et comparer ce résultat avec le précédent.
Nous venons de créer un certain nombre de variables. Contrairement aux langages de programmation les
plus courants, il n'y a pas besoin de déclarer les variables ainsi que leur type (entier, réel ou autre).
Tapez la commande who pour connaître les différentes variables utilisées. Pour effacer les variables,
tapez clear. Attention, de nombreuses erreurs de programmations pourront être commises à cause de
noms de variables utilisés plusieurs fois et devant désigner des choses différentes.

2.2) Génération de matrices ou de vecteurs et calculs sur les nombres complexes en traitement
du signal

En traitement du signal, nous travaillerons surtout avec des vecteurs qui correspondent à des matrices à
une seule ligne ou une seule colonne. Ces vecteurs permettent de simuler un signal échantillonné.

Prenons l’exemple de la fonction : y(t)=sin(2πt ) .


Nous définissons tout d’abord un vecteur temps par l’instruction suivante :
t=t0 :te :tf avec t0 : l’instant initial choisi, te : la période d’échantillonnage, tf : le temps correspondant au
dernier échantillon. Une autre écriture possible est : t=[t0 :te :tf].
Pour les simulations, prenez par exemple : t=0 :0.1 :1
Pour définir y, il suffit ensuite de taper : y=sin(2*pi*t). La variable pi est prédéfinie dans Matlab et
correspond bien sur à la valeur de π. Pour connaître l’ensemble des fonctions mathématiques
élémentaires définies dans Matlab, reportez vous à l’aide en cliquant sur Help puis Help Window et
matlab\elfun. Les fonctions sont classées dans trois familles :
- les fonctions trigonométriques
- les fonctions exponentielles et logarithmiques
- les fonctions sur les nombres complexes.
Cette dernière catégorie de fonctions est également intéressante pour nos applications en traitement du
signal. Il est par exemple possible de définir des fonctions exponentielles complexes comme :

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
sont prédéfinies dans Matlab pour les nombres complexes. Parmi les opérations les plus fréquemment
utilisées en traitement du signal, vous avez :
- abs : valeur absolue d’un réel ou norme d’un complexe.
- angle : phase correspondant au nombre complexe.
- conj : conjugué d'un nombre complexe.
- real: partie réelle d'un nombre complexe.
- imag: partie imaginaire d'un nombre complexe.
D'autres instructions permettent l'analyse des données contenues dans des matrices sont également très
utiles. C'est le cas des fonctions :
- max: qui donne la valeur maximale d'une matrice.
- min: qui donne la valeur minimale d'une matrice.
- mean: qui donne la valeur moyenne d'une matrice.
- hist: qui donne l'histogramme des valeurs contenues dans la matrice.
- sum: qui calcule la somme des éléments d'une matrice
Pour plus de renseignements sur ce type de fonctions, reportez vous à l'aide dans la rubrique
matlab\datafun où figure un grand nombre d'instructions utiles au traitement de données.
Si vous voulez avoir de l'aide sur une fonction dont vous connaissez le nom, il suffit de taper help suivi du
nom de l'instruction dans la fenêtre de travail pour avoir des renseignements sur la syntaxe et le rôle de
cette instruction.

2.3) Graphisme

Pour obtenir l’aide sur les instructions propres au graphisme, sélectionner la rubrique matlab\graphics.
Afin de vous guider nous présenterons en premier lieu la fonction graphique élémentaire: plot

Utilisation de plot pour tracer un graphe en 2 dimensions :


Reprenons les données t et y générées auparavant.
Le vecteur y contenant des nombres complexes, si vous tapez plot(y) , le graphe obtenu représentera la
partie imaginaire de y tracée en fonction de la partie réelle.
Si vous voulez tracer la fonction sinus, tapez plot(imag(y)) ou plot(t,imag(y)) si vous voulez avoir en
abscisse le vecteur temps t.
Si vous voulez tracer la fonction sinus et la fonction cosinus sur un même graphe, tapez
plot(t,real(y),t,imag(y)).
Tapez la suite d’instructions suivantes :

6
t2=0 :0.001 :1 ;y2=cos(2*pi*t2) ;
plot(t2,y2)
hold on
stem(t,real(y))

Déduire d’après les observations du graphe obtenu à la suite de chacune des 3 dernières instructions ce
que réalisent les fonctions hold on et stem.
Vous pouvez fort bien spécifier la couleur et le style de tracé en rajoutant une chaîne de caractères S
dans l’instruction: plot(X,Y,S). Par exemple, si vous tapez: plot(t,real(y),’b+’), vous tracerez des + de
couleur bleue. Pour connaître les différentes possibilités de tracé, tapez help plot.

Tracé de plusieurs graphes dans la même fenêtre :


Grâce à l’instruction subplot, il est possible de spécifier le nombre de graphes que l’on veut tracer dans
une fenêtre. SUBPLOT(M,N,P) permet de diviser la fenêtre en M x N, et à la prochaine instruction plot, le
graphe sera tracé à l’emplacement n° P. A titre d’exemple taper:
subplot(1,3,1)
plot(t,real(y))
subplot(1,3,2)
plot(t,imag(y))
subplot(1,3,3)
plot(real(y),imag(y))

2.4) Programmation structurée, instructions conditionnelles et boucles

L'écriture de fichiers de commandes ou scripts :


Un fichier de commandes ou script est une séquence d'instructions Matlab. Ces fichiers portent
toujours l'extension m. Les variables créées dans ces fichiers sont globales, ce qui signifie que depuis la
fenêtre Matlab vous pouvez accéder aux contenus de ces variables. Les fichiers de commandes
permettent la saisie de données grâce à l'instruction input utilisée dans l'exemple qui va vous être
présenté.
Nous allons écrire un script qui permet le tracé d'une fonction y=x²+5. En haut de la fenêtre Matlab,
cliquez sur File puis New et M-File. Puis reportez dans l'éditeur qui vient de s'ouvrir (MATLAB
Editor/Debugger) la suite d'instructions suivantes:
clc
T=input('Durée du signal = ');
N=input('Nombre de points = ');

7
t=0:T/N:T-T/N;
y=t.^2+5;
plot(t,y);
Pour sauvegarder ce script, il faut au préalable créer un répertoire de travail sur le disque dur, nommez
le par exemple mst2 sur la disquette. Cliquez ensuite sur File puis Save as et donnez le nom suivant:
courbe1 ainsi que le répertoire que vous venez de créer. Pour exécuter ce script, donnez le nom du
répertoire ou plus précisément le chemin (path) en cliquant sur File puis Set Path. Revenez dans la fenêtre
de Matlab et tapez: courbe1. Vous devrez donner une durée du signal et un nombre de points avant de
visualiser le tracé de la fonction.

L'écriture de fichiers de fonctions :


Vous pouvez créer de nouvelles fonctions spécifiques à votre domaine de travail qui auront le
même statut que toutes les autres fonctions Matlab, comme par exemple les fonctions sin, cos, sinc,…
L'avantage de fonctions par rapport aux scripts est le paramétrage facile d'entrées et de sorties, ce qui
permet une utilisation commode et une intégration possible dans un script. Les variables utilisées dans les
fonctions sont par défaut locales, mais on peut aussi définir des variables globales grâce à l'instruction
global.
A titre d'application, nous allons écrire une fonction pour générer un tableau de N nombres correspondant
au calcul de la fonction y=x²+5 sur une durée T.
Les fichiers de fonctions portent également l'extension m et sont créés avec le même éditeur que celui
utilisé précédemment pour générer des fichiers de commandes. Voici la suite d'instructions que l'on vous
demande de taper dans un fichier de fonctions que vous nommerez signal1:
function res=signal1(T,N)
% res: vecteur correspondant au signal y=x^2+5
% T: durée du signal
% N: nombre de points
temps=0:T/N:T-T/N;
res=temps.^2+5;
La première ligne déclare le nom de la fonction, les arguments d'entrée et de sortie. Sans cette première
ligne, le fichier correspondrait plutôt à un fichier de commandes ou script. Pour exécuter cette fonction
après l'avoir enregistrer sur la disquette, tapez y=signal1(1,50) dans la fenêtre Matlab. La variable y
comprendra alors 50 valeurs calculées à partir d'un vecteur temps allant de 0 à 1seconde. Les lignes
commençant par % dans un fichier de fonctions ou un script permettent de donner des commentaires.
Notez que la variable temps est locale à la fonction signal1 et n'est pas connue dans la fenêtre Matlab,
idem pour T et N.

8
Les boucles et instructions conditionnelles :
La syntaxe de ce type d’instructions (for, while, if) est décrite dans l’aide (option Help, puis Help
Window et la rubrique matlab\lang).
A titre d’exercice utiliser les instructions if et for pour créer une matrice X de dimension
5 x 5 où les éléments de la diagonale sont égaux à 5 et les autres à 7.
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
définir des nombres complexes.

La ponctuation :
Les virgules, points virgules, et trois points (...) sont utilisés dans les scripts et les fonctions dans
les cas suivants:
- Pour séparer deux instructions sur une même ligne, on utilise la virgule.
Exemple: taper subplot(1,2,1),plot(t,real(y)),subplot(1,2,2),plot(t,imag(y))
L’ensemble de ces instructions sera réalisé en une fois.
- Pour que le résultat de l’opération n’apparaisse pas dans la fenêtre MATLAB, utiliser le point virgule.
Exemple: taper a=[1 2; 3 4];
La matrice a n’est pas retranscrite à l’écran.
- Si vous avez une instruction qui est trop longue, vous pouvez l’écrire sur deux lignes grâce au trois
points.
Exemple: taper a=[1 2 3 4 5 6 7 8 9;...
11 22 33 44 55 66 77 88 99]
Cette dernière instruction est intéressante à utiliser pour la mise en page de vos programmes.
Pour voir de manière plus générale à quoi peuvent servir les signes de ponctuation, choisissez la rubrique
matlab\general et cliquez au bas de la page sur See also PUNCT.

3) Exercices

3-1) Calcul d’intégrales par la méthode des trapèzes


Créez une fonction que vous nommerez: integ dans laquelle vous placerez toutes les instructions
nécessaires pour réaliser l’intégrale par la méthode des trapèzes d’une fonction quelconque sur une durée
allant de t0 à tf par pas de te.
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
fonction sinus prise entre 0 et 2π avec un pas de 0.01.
Le calcul de l’intégrale d’une fonction f(t) par la méthode des trapèzes est obtenu par la formule
suivante :

9
t f − t0
tf
te ⎡ N −1

∫ f (t ) dt =
2 ⎢

f ( 0 ) + f ( N ) + 2 ∑
k =1
f (k )⎥ avec f(k) = f(kt e ) et N =
⎦ te
t0

Pour réaliser votre programme, vous devrez utiliser des instructions spécifiques au traitement de chaînes
de caractères comme par exemple eval et strcat. L'aide concernant l'ensemble des fonctions de
traitement des chaînes de caractères se trouve sous la rubrique matlab\strfun.
+∞
- A titre d'application estimez l'intégrale suivante ∫−∞
sin c(t )dt . Calculer la valeur théorique de cette

intégrale et vérifier que le résultat obtenu numériquement en prenant des bornes de –100 à +100 s'y
approche.

3-2) Calcul de transformée de Fourier discrète.


Créez un script tfd qui vous affichera quatre graphes correspondant à :
- la représentation temporelle du signal échantillonné
- la partie réelle de la représentation spectrale obtenue par calcul de la TFD
- la partie imaginaire de la représentation spectrale obtenue par calcul de la TFD
- le module de la représentation spectrale obtenue par calcul de la TFD
Le signal a étudier est donné par une fonction sinus de fréquence 1Hz et d’amplitude 1. Les paramètres
demandés par le programme seront la fréquence d’échantillonnage (fe) et le nombre de points de la T.F.D.
(N). Utiliser de préférence la fonction stem pour tracer des spectres de raies plutôt que plot.
La formule générale donnant la T.F.D. est la suivante:
N −1
⎛ mn ⎞ ⎛m⎞
X [n] = ∑ x(m) exp⎜ − i 2π ⎟ avec x(m) = x(mTe ) = x⎜⎜ ⎟⎟
m=0 ⎝ N ⎠ ⎝ fe ⎠
N valeurs de X[n] sont calculées pour n allant de 0 à N-1.
Attention aux indices car Matlab n’admet pas des indices (numéros de lignes ou colonnes de matrices)
inférieurs à 1. Pour éviter les boucles for, il est souhaitable de réaliser le calcul sous forme matriciel :
X=Wx (cf cours de TNS).
Commentez les graphes obtenus pour N=4 et fe=4Hz (cf TD de TNS).
A noter que la fonction fft de Matlab permet la calcul de la transformée de Fourier discrète par un
algorithme de transformée rapide.

3-3) Figures de Lissajou


Pour créer des figures de Lissajou, il faut tracer une fonction sinus de fréquence f1 en fonction d’une
autre fonction sinus de fréquence f2 (les deux fréquences f1 et f2 étant proportionnelles) dont le
déphasage avec la première sinusoïde peut varier. Vous pouvez ainsi créer des graphes animés en
réitérant plusieurs graphes avec un déphasage qui varie de façon linéaire. Utilisez une boucle while ainsi

10
que l’instruction pause(0.1) dans cette boucle pour avoir le temps de voir l’évolution des graphes. Pour ne
pas être trop original, vous nommerez votre script lissajou.m
- Observez par exemple ce qui se passe pour f1=f2=1Hz et un déphasage qui varie de 0 à 2π par pas
de 0.1radian ; fixer le vecteur temps ainsi : t=0 :0.01 :1 .
- Par la suite prenez par exemple f2=2, 3 ou 4 ; c’est plus joli.

4) Conclusion

Vous serez vite convaincus que ce logiciel a de nombreux avantages pour tout type de calcul. Parmi les
points forts de MATLAB:
- important nombre de fonctions prédéfinies, ce qui permet de réaliser des programmes de calculs
complexes en très peu de lignes de programmation.
- graphisme de très haute qualité.
- simplicité du langage de programmation.
- les paramètres n’ont pas à être déclarés; ceci est un avantage et un inconvénient car vous
pouvez commettre des erreurs en utilisant deux fois le même nom de variable dans un programme.

11
12
TP 2 : ANALYSE ET SYNTHÈSE DE SIGNAUX PÉRIODIQUES

1) INTRODUCTION

Le but de ce TP est d’établir la correspondance entre le spectre en amplitude d’un signal


périodique et son développement en série trigonométrique. Ceci doit permettre dans un second temps de
synthétiser différents signaux périodiques à partir du relevé de leurs spectres.
Nous allons à présent rappeler quelques généralités sur l’analyse de Fourier. La décomposition en
série de Fourier d’un signal périodique de période T0 (ou à durée limitée sur un intervalle T0) s’écrit :
+∞
⎛ t ⎞
x(t ) = ∑x n exp⎜⎜ i 2πn ⎟⎟ (1)
n = −∞ ⎝ T0 ⎠
x(t) : signal périodique de période T0.
xn : coefficients de Fourier de x(t).
Ces coefficients donnent une représentation en fréquence ou spectrale du signal. Pour passer de la
représentation temporelle à la représentation spectrale, on utilise la formule suivante :

1 ⎛ t ⎞
xn = ∫
T0 [T0 ]
x(t ) exp⎜⎜ − i 2πn ⎟⎟dt
⎝ T0 ⎠
(2)

1/T0 : représente une fréquence appelée fondamentale, et de manière plus générale on nomme nième
harmonique la fréquence correspondant à n/T0.
Prenons une fonction cosinus comme exemple pour calculer le spectre d’un signal périodique à partir des
séries de Fourier :

⎛ t ⎞
x(t ) = A cos⎜⎜ 2π ⎟⎟ (3)
⎝ T0 ⎠
T0 : période
A : amplitude
En utilisant l’équation (2) pour calculer les coefficients de Fourier, nous obtenons :
xn=A/2 pour n=±1 et xn=0 pour n différent de ± 1
Le spectre en amplitude est donné par la norme de xn et peut être tracé de la façon suivante :

13
On remarque que ce signal périodique n’est constitué que d’une fondamentale, il est monochromatique.
Le domaine des fréquences négatives n’a aucune signification physique, il est dû aux fonctions
exponentielles complexes introduites dans la définition des séries de Fourier. Pour les signaux réels,
le spectre en amplitude sera toujours une fonction paire. Les analyseurs de spectre délivrent plus
généralement le spectre en puissance qui est représenté ci-dessous dans le cas de la fonction cosinus

Cette représentation permet de faire un calcul très simple de la puissance moyenne totale par le
théorème de Parseval :
+∞
1

T0
P=
T0 ∫
0
x 2 (t )dt =
n = −∞
xn2 (4)

Le résultat P=A2/2 est alors immédiat à partir du spectre représenté précédemment.

14
Relations entre la série de Fourier et la décomposition en série trigonométrique.
Pour obtenir la relation entre les coefficients xn et les coefficients en cosinus (an) et les
coefficients en sinus (bn), on remplace la fonction exponentielle complexe dans la formule (1) par cosinus
+ i sinus. Ensuite, on identifie le résultat obtenu avec le développement en série trigonométrique donné
ci-dessous :
+∞
⎛ t ⎞ +∞ ⎛ t ⎞
x(t ) = a0 + ∑ a n cos⎜⎜ 2πn ⎟⎟ + ∑ bn sin⎜⎜ 2πn ⎟⎟ (5)
n =1 ⎝ T0 ⎠ n=1 ⎝ T0 ⎠
On obtient alors la relation suivante entre les coefficients xn et les valeurs de an et bn :

an − ibn
xn = pour n différent de 0. (6)
2
1
x0 = a0 =
T0 ∫[ T0 ]
x (t )dt

Les relations donnant les valeurs de an et bn sont obtenues à partir des équations (6) et (2) :

2 ⎛ t ⎞
T0 [ T∫0 ]
an = x ( t ) cos⎜ 2 πn ⎟⎟dt (7)

⎝ T 0 ⎠

2 ⎛ t ⎞
bn = ∫
T0 [ T0 ]
x ( t ) sin ⎜⎜ 2πn ⎟⎟dt
⎝ T0 ⎠
(8)

Les coefficients an et bn ne sont définis que pour des valeurs de n positives. Dans le cas des signaux réels
(à partie imaginaire nulle) une relation simple provenant de la propriété de symétrie hermitienne permet
de calculer les coefficients xn pour des indices n négatifs à partir des valeurs de xn pour n positif :

x − n = x n*
En appliquant ces relations à notre signal sinusoïdal, le seul coefficient différent de 0 est a1=A. Ce
résultat s’obtient également de façon très simple dans ce cas particulier en identifiant les équations (3) et
(5).

Relation entre la transformée de Fourier et les coefficients de Fourier pour les signaux périodiques.

Il est également possible de calculer la transformée de Fourier pour un signal périodique de période T0, le
résultat obtenu donne en réalité les mêmes informations que les coefficients de Fourier, ceci va être
démontré à présent :

15
+∞
X ( f ) = ∫ x(t ) exp(− i 2πft )dt
−∞

+∞ +∞ ⎛ n ⎞
=∫ ∑x exp⎜⎜ i 2π
n t ⎟⎟ exp(− i 2πft )dt
−∞
n = −∞ ⎝ T 0 ⎠

⎛ (9)
+∞ +∞ ⎛ n⎞ ⎞
= ∑ x n ∫ exp⎜⎜ − i 2π ⎜⎜ f − ⎟⎟t ⎟⎟dt
−∞
n = −∞ ⎝ ⎝ T0 ⎠ ⎠
+∞
⎛ n⎞
= ∑ x δ ⎜⎜ f − T
n
⎟⎟
n = −∞ ⎝ 0 ⎠

Propriétés de la série trigonométrique :

Il existe de nombreux cas où les coefficients an et bn se calculent très rapidement :


a) pour un signal réel et pair tous les coefficients bn sont nuls seuls les coefficients an sont différents de
zéro.
b) pour un signal réel et impair tous les coefficients an sont nuls seuls les coefficients bn sont non nuls.

Les valeurs de a0 ne suivent pas les conditions précédentes, a0 représente la valeur moyenne du signal.

Travail demandé

2.1) Calcul des coefficients en série trigonométrique


Calculer les coefficients en série trigonométrique des signaux suivants, prenez soins à bien
relever les périodes des signaux (attention l’axe des abscisses est donné en millisecondes):
a) Sinusoïde redressée

40 20
an = , a0 =
( )
Montrer que : et bn=0 pour tout n.
π 1 − (2n ) 2
π

16
b) Rampe

cos(πn )
Montrer que: bn = −10 et an=0 pour tout n.
πn
c) Signal modulé en amplitude

Ce dernier signal peut être modélisé par l'équation:

y (t ) = (1 + m cos( 2πf m t )) cos( 2πf p t )


avec fm=1 kHz: fréquence du signal modulant, fp=8kHz: fréquence de la porteuse, m indice de modulation
fixé arbitrairement à 0.5 dans le cas présent. Pour trouver la décomposition en série trigonométrique de

17
ce signal, il n'est pas nécessaire d'utiliser les formules 7 et 8 pour calculer les coefficients an et bn, il
suffit de développer le produit des fonctions cosinus apparaissant dans l'équation précédente. Le signal
y(t) peut alors s'exprimer comme la somme de fonctions cosinus, on réalise donc aussi la décomposition
de ce signal en somme de plusieurs sinusoïdes que l'on peut appeler série trigonométrique.
- Déterminer la période du signal modulé ainsi que les coefficients de Fourier.

d) Peigne de Dirac
Le peigne de Dirac a été étudié en cours et nous avons déterminé la transformée de Fourier de ce signal
et donc ses différents coefficients de Fourier.
- Calculer les coefficients de Fourier d’un peigne de Dirac de période égale à 1 seconde.
- En déduire les valeurs des coefficients a0, an et bn.

2-2) Synthèse de signaux périodiques à partir des valeurs de an et bn précédemment obtenues.

Réalisez des fonctions que vous nommerez sinred.m, rampe.m, modam.m et dirac.m pour réaliser la
synthèse par série trigonométrique des fonctions sinus redressée, rampe, cosinus modulé en amplitude
par un cosinus, et peigne de Dirac. Les arguments d’entrée de ces fonctions seront :
- N : le nombre de sinusoïdes à sommer
- T0 : la période de la fonction.
Il n’y a pas d’argument de sortie, il faut simplement tracer les représentations temporelles et
fréquentielles : x(t) et |X(f)|
Pour cela, les signaux seront donc générés à partir d’un vecteur temps t de 1000points répartis sur
l’intervalle [0, 2T0] grâce à la formule suivante :
N
⎛ t ⎞ N ⎛ t ⎞
x(t ) = a0 + ∑ an cos ⎜ 2π n ⎟ + ∑ bn sin ⎜ 2π n ⎟
n =1 ⎝ T0 ⎠ n =1 ⎝ T0 ⎠
Pour chaque fonction il faudra calculer les valeurs pour an, bn et a0. C'est ainsi que l'on pourra synthétiser
de façon exacte ou de manière approchée les signaux a),b),c),d) à partir de leurs décompositions en série
trigonométrique.

- Pour les signaux a) et b), relevez et commentez l'évolution des ondulations présentes sur les
signaux synthétisés x(t) au fur et à mesure que vous augmentez le nombre N de sinusoïdes. En déduire
l'origine de ces ondulations qui constituent ce qu'on appelle l'effet Gibbs. Comment expliquez vous que
ces ondulations soient plus importantes sur la rampe que sur le sinus redressé. Pour vos explications,
basez-vous sur les spectres des signaux générés.

18
- Pour le signal c), vérifiez que le signal que vous obtenez par synthèse de plusieurs sinusoïdes
correspond exactement à celui représenté dans l'énoncé.

- Pour bien visualiser l’effet Gibbs et son évolution avec le nombre N de sinusoïdes ajoutées,
créer dans la fonction Dirac une animation obtenue en ré initialisant dans une boucle while le graphe
obtenu pour le tracer de x(t) au fur et à mesure que N augmente. Expliquer en conclusion pour quelles
raisons il est impossible de générer un peigne de Dirac ou une impulsion de Dirac.

19
20
TP 3 : UTILISATION DE LA TFD
POUR L’ANALYSE SPECTRALE DE SIGNAUX

1) Introduction

Le but de ce TP est d’interpréter correctement les résultats obtenus par le calcul d’une transformée
de Fourier discrète dans le cas de signaux périodiques. Il faudra pouvoir lier ces résultats aux
coefficients de Fourier et à la transformée de Fourier du signal échantillonné. A titre d’illustration on
traitera des cas simples de signaux périodiques et on verra tout l’intérêt de l’analyse spectrale sur des
signaux périodiques bruités. Nous verrons comment le choix de la fréquence d’échantillonnage et du
nombre d’échantillons influe sur les spectres obtenus. Pour des rappels sur l’analyse de Fourier de
signaux périodiques, reportez vous à l’introduction du TP 2. On peut facilement exprimer la transformée
de Fourier X(f) à partir des coefficients de Fourier xn pour un signal périodique x(t) :
+∞
⎛ n⎞
X( f ) = ∑ x δ ⎜⎜ f − T
n
⎟⎟ (1)
n = −∞ ⎝ 0 ⎠

avec T0 : la période de x(t)


et δ : l’impulsion de Dirac ou impulsion unité
En théorie, échantillonner le signal x(t) revient à le multiplier par un peigne de Dirac δTe(t) de période
égale à la période d’échantillonnage Te. On notera xs(t) le signal échantillonné, il s’écrira en fonction de
x(t) sous la forme :
+∞
xs (t ) = x(t )δ Te (t ) = x(t ) ∑ δ (t − nTe ) (2)
n = −∞

La transformée de Fourier de xs(t) (Xs(f)) s’écrira alors comme le produit de convolution de X(f) avec la
transformée de Fourier du peigne de Dirac qui est également un peigne de Dirac :

X s ( f ) = X ( f ) ∗ f eδ fe ( f )
+∞ (3)
= fe ∑ X ( f − nf )
n = −∞
e

La simplification opérée pour passer de la première à la deuxième ligne de l’équation (3) est due à la
propriété d’élément neutre de l’impulsion de Dirac pour la convolution. La figure suivante illustre la
relation existant entre X(f) et Xs(f). Attention la fonction Xs(f) étant périodique de période fe, il est
impossible de la représenter dans son intégralité (de -∞ à +∞).

21
Cette figure montre bien qu’il est nécessaire d’échantillonner le signal à une fréquence fe supérieure ou
égale à 2 fois la bande limitée du signal B de manière à éviter un recouvrement de spectre (théorème de
Shannon). On comprend dès lors l’intérêt d’un filtre anti-repliement à placer avant l’échantillonneur pour
limiter le spectre du signal. On conçoit également qu’une simple opération de filtrage passe-bas puisse
permettre de reconstruire le signal initial à partir de ces échantillons. La figure précédente montre
également une propriété importante de Xs(f) : la périodicité.
La transformée de Fourier discrète (X[n]) de x(t) est directement liée à la transformée de Fourier du
signal échantillonné (Xs(f)) par la relation suivante :

⎛ n ⎞ N −1 ⎛ mn ⎞
X [n] = X s ⎜ f = ⎟⎟ = ∑ x(t m )exp⎜ − i 2π
⎜ ⎟ (4)
⎝ T0 ⎠ m=0 ⎝ N ⎠
Cette équation s’obtient en simplifiant l’expression de la transformée de Fourier de xs(t) calculée en
f=n/T0. T0 désigne ici le temps de mesure du signal, N représente le nombre de points échantillonnés sur
cette durée, et tm=mte où te est la période d’échantillonnage qui correspond à T0/N. La majeure partie des
problèmes d’analyse spectrale par calcul de transformée de Fourier discrète proviennent de cette
limitation de durée du signal qui est évidemment indispensable. En effet limiter la durée de x(t) revient à
multiplier x(t) par une fonction porte de largeur égale à T0. X(f) sera alors convolué par la transformée de
Fourier de cette fonction porte qui est un sinus cardinal. Au lieu d’avoir un spectre de raies pour un
signal périodique on aura des fonctions sinus cardinales présentant différents lobes (un lobe principal ou
central et des lobes secondaires) qui donnent lieu à l’effet Gibbs. Les problèmes de résolution spectrale
en analyse par transformée de Fourier discrète sont liés au recouvrement possible de ces lobes.
A titre d’exemple, prenons le cas d’une fonction cosinus de fréquence et d’amplitude unité :

x(t ) = cos ( 2π f1t ) avec f1 = 1Hz

X(f ) =
1
2
(δ ( f − f1 ) + δ ( f + f1 ) )

22
Le spectre en amplitude de ce signal périodique est donc formé d’une impulsion de Dirac dans les
fréquences positives située en f1=1Hz. Pour calculer une TFD sur ce signal, on est amené à limiter le
nombre d’échantillons du signal, donc la durée de celui-ci. On note alors x`(t) le signal x(t) limitée à un
intervalle de temps allant de 0 à T0:

⎛ T ⎞
x '(t ) = x(t )rT 0 ⎜ t − 0 ⎟ avec T0 = 1s
⎝ 2⎠

X '( f ) = 0 sin c ( ( f − f1 ) T0 ) exp ( −iπ ( f − f1 ) T0 ) + 0 sin c ( ( f + f1 ) T0 ) exp ( −iπ ( f + f1 ) T0 )


T T
2 2
Le spectre en amplitude du signal limité en durée laisse alors apparaître des pics ou lobes dont le plus
important est situé à f1=1Hz.

Après échantillonnage de ce signal limité à l’intervalle [0,T0[, le spectre du signal devient périodique de
période fe. Ce spectre est déterminé à partir de la transformée de Fourier du signal échantillonné donné
par :
+∞
X s ( f ) = fe ∑ X ' ( f − kf )
k = −∞
e

La TFD correspond à une ensemble d’échantillons prélevés sur la transformée de Fourier du signal
échantillonné calculés par :

⎛ n ⎞ N −1 ⎛ mn ⎞
X [n] = X s ⎜⎜ f = ⎟⎟ = ∑ x(t m )exp⎜ − i 2π ⎟
⎝ T0 ⎠ m=0 ⎝ N ⎠

23
N correspond aux nombres d’échantillons prélevés sur x(t) sur [0, T0[ avec une période d’échantillonnage

T0
te = . N correspond aussi au nombre d’échantillons prélevés sur Xs(f) sur [0, fe[ avec un pas appelé
N
1
résolution spectrale qui vaut : ∆f = . Ce dernier résultat découle directement de l’expression de X[n]
T0
donnée précédemment, on vérifie bien qu’en prenant N échantillons distants de 1/T0, on couvre bien une

N
gamme de fréquence égale à fe : f e = .
T0
Dans notre exemple, nous avons choisi N=8 et fe=8Hz. Voici ce que nous obtenons dans ce cas au niveau
des spectres.

Dans l’exemple que nous venons de traiter, nous avons particulièrement bien choisi la fréquence
d’échantillonnage fe et la durée de mesure T0.
En effet, fe respecte le théorème de Shannon fe>2f1 et T0 est un multiple de la période du signal ce qui
nous permet d’avoir la fréquence du signal f1 multiple entier de la résolution spectrale ∆f. Lorsque ces
deux conditions sur fe et T0 sont satisfaites, il est possible d’établir la relation suivante entre les
coefficients de Fourier du signal périodique et la transformée de Fourier discrète :

X [ n]
xn = sur l'intervalle [0, f e / 2[ . En toute rigueur xn désigne ici les coefficients de Fourier de la
N
répétition périodique de x`(t), il faut donc nécessairement que T0 soit égale à la période de x(t) ou alors
un multiple entier de celle-ci. Dans le cas contraire, il est impossible d’établir un lien entre les résultats
de la TFD et les coefficients de Fourier ou la transformée de Fourier du signal périodique. C’est ce que

24
nous pouvons observer au travers de l'exemple suivant dans lequel pour le même signal périodique, nous
avons choisi une durée de mesure T0 différente d’un multiple entier de la période.

Pour ces spectres, la durée de mesure a été choisie égale à T0=1.3s. La fréquence de la fonction cosinus
est toujours de 1Hz et 8 échantillons sont prélevés sur la durée T0.
Dans ce cas, on voit bien que la troncature du signal et le repliement dû à l’échantillonnage modifie
fortement les résultats obtenus par TFD et on n’a plus de relation directe entre les coefficients de
Fourier et la TFD.

25
2) Travail demandé

2-1) Analyse d’une fonction cosinus

Créer une fonction similaire au script tfd que vous avez fait au TP1 qui aura pour but de tracer la
représentation temporelle x(t) ainsi que le spectre sous 3 représentations complémentaires :
1) partie réelle du spectre obtenu par calcul de la transformée de Fourier discrète en fonction
des fréquences
2) partie imaginaire
3) module
Pour tracer ces 4 graphes, il faut bien sur définir la fonction à étudier et les conditions d’échantillonnage.
On choisit d’analyser une fonction cosinus, il faudra fournir son amplitude et sa fréquence ainsi que la
fréquence d’échantillonnage fe et la durée de mesure T0 comme paramètres d’entrées de votre
programme. Si vous voulez par exemple étudier un signal de fréquence 3kHz et d’amplitude 0.2 avec une
fréquence d’échantillonnage 30kHz et une durée de mesure 1ms, il faudra taper tfd(3000,0.2,30000,0.001)
pour obtenir les 4 graphes donnant les représentations temporelles et spectrales du signal.
NB : - pour calculer la transformée de Fourier discrète vous pouvez utiliser l’instruction fft.
- utiliser toujours de préférence l’instruction stem plutôt que plot.

- Expliquer comment vous allez calculer le vecteur temps nécessaire à la représentation temporelle du
signal.
- Expliquer comment vous allez calculer le vecteur des fréquences nécessaire pour pouvoir représenter
le spectre.
- En reprenant l’exemple donné précédemment expliquez comment vous pouvez exploiter le spectre
pour retrouver l’amplitude et la fréquence du signal.
- Déterminer les valeurs minimales de fe et T0 qui permettent d’obtenir un spectre ‘exploitable‘ pour

l’étude d’un signal défini par x(t ) = 5 cos(100πt ) , j’entends par spectre exploitable un spectre à partir
duquel il est possible de déterminer l’amplitude et la fréquence du signal sans aucune ambiguïté. Il est
bien sûr souhaitable de donner les graphes obtenus pour les valeurs de fe et T0 choisies.
- Expliquer pourquoi lorsque vous tapez tfd(1000,1,1050,0.04) vous observez une représentation
temporelle du signal qui laisse à penser que le signal a une période de 0.02s. Commenter et
interpréter également le spectre obtenu.

26
2.2) Analyse d’une fonction cosinus bruitée

Reprenez la fonction tfd précédente en rajoutant cette fois à la fonction cosinus du bruit obtenu grâce à
l’instruction randn qui permet de générer des nombres aléatoires qui suivent une loi gaussienne. Pour
réaliser cette addition, il faudra par exemple sommer à la fonction cosinus un vecteur
ab*randn(1,length(t)) où ab désigne l’amplitude du bruit et length(t) la longueur du vecteur temps noté t.
La variable ab devra être fournie comme paramètre d’entrée de la fonction tfd. Au niveau des graphes à
tracer, contentez vous à présent de représenter le signal en fonction du temps et le spectre en amplitude
(reporter uniquement le module et pas les parties réelles et imaginaires).
Si vous voulez par exemple étudier un signal sinusoïdal de fréquence 3kHz et d’amplitude 0.1 bruité par la
fonction randn d’amplitude 0.1 et échantillonné à une fréquence d’échantillonnage 100kHz sur une durée
de mesure 1ms, il faudra taper tfd(3000,0.1,0.1,100000,0.001) pour obtenir les 2 graphes donnant les
représentations temporelles et spectrales du signal.
- Observer et commenter les graphes obtenus pour le signal pris comme exemple auparavant en
choisissant pour ab différentes valeurs : 0.01, 0.05 et 0.1. Essayer dans chaque cas d’exploiter les
deux représentations (temporelles et fréquentielles) pour en extraire l’amplitude et la fréquence de la
sinusoïde, quelles conclusions peut-on en tirer quant à l’intérêt de l’étude fréquentielle d’un signal.

2.3) Analyse d’une somme de sinusoïdes

Reprenez la fonction tfd précédente en remplaçant cette fois le bruit par une deuxième fonction cosinus.
Pour réaliser cette addition, il faudra par exemple sommer à la fonction cosinus de départ un vecteur
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
a2 et f2 devront être fournis comme paramètres d’entrée de la fonction tfd.
Si vous voulez par exemple étudier une somme d’un signal sinusoïdal de fréquence 3kHz et d’amplitude
0.1 et d’une fonction cosinus de fréquence 3.3kHz et d’amplitude 0.05 échantillonnée à une fréquence
d’échantillonnage 100kHz sur une durée de mesure 1ms, il faudra taper
tfd(3000,0.1,3300,0.05,100000,0.001) pour obtenir les 2 graphes donnant les représentations temporelles
et spectrales du signal.
- Observer et commenter les graphes obtenus dans l’exemple précédent. Essayer d’extraire de ces
graphes les amplitudes et fréquences des deux sinusoïdes.
- Quel est le paramètre d’échantillonnage à modifier pour pouvoir extraire correctement les
amplitudes et fréquences des deux sinusoïdes. Représenter et exploiter les graphes alors obtenus.
- En guise de conclusion générale à ce TP donner les points forts de l’analyse fréquentielle de signaux
périodiques par transformée de Fourier discrète.

27
28
TP 4 : UTILISATION DE LA TFD
POUR L’ESTIMATION D’UNE FONCTION DE CORRÉLATION

1) Introduction

Un signal aléatoire X(t,ω) est défini à chaque instant t1,t2,t3,… par sa loi de probabilité temporelle:
p(x1,x2,x3,…,t1,t2,t3,…). Il existe un grand nombre de lois de probabilité dont la loi gaussienne et la loi
uniforme:

1 ⎛ ( x − mx ) 2 ⎞
loi gaussienne : p ( x) = exp ⎜ − ⎟
σ 2π ⎜ 2σ 2

⎝ ⎠
⎧ 1
⎪x − x sur un intervalle ⎡⎣ xinf , xsup ⎤⎦
loi uniforme : p( x) = ⎨ sup inf
⎪ 0
⎩ ailleurs
Il est possible de générer les signaux aléatoires à partir de variables aléatoires qui suivent ces lois de
probabilité. On peut ainsi générer des bruits en prenant comme modèle:

Y (t ,ω ) = Y (t , X ) = aX + b
avec X une variable aléatoire gaussienne ou uniforme, et a et b des constantes qui permettent de
paramétrer la puissance moyenne totale, la variance ou encore la valeur moyenne du signal Y.
Un signal aléatoire est dit stationnaire au sens strict si ses propriétés statistiques sont indépendantes de
l'origine des temps. Il est stationnaire au second ordre si son moment d'ordre 1 (valeur moyenne
statistique) ne dépend pas de l'instant choisi et si le moment mixte d'ordre 2 (l'autocorrélation statistique)
ne dépend que de τ: l'écart entre les instants t1 et t2 choisis pour relever les ensembles statistiques.
Ces moments sont calculés à partir d'ensembles statistiques formés par des observations du signal en
différents instants (t1, t2, …). Pour obtenir des résultats significatifs, il est donc nécessaire de constituer
des ensembles importants, et pour cela un grand nombre de relevés doit être entrepris. Il est souvent
plus facile de travailler sur un seul relevé du signal en fonction du temps et de calculer alors des
moments temporels. C'est ce qui est fait habituellement pour des signaux déterministes, pour les signaux
aléatoires, ces moments temporels ne donnent des résultats significatifs que si on fait l'hypothèse
d'ergodicité, c'est à dire que les moments ou moyennes temporelles correspondent aux moments
statistiques. Nous allons présenter les deux principales manières d'estimer numériquement la fonction
d'autocorrélation.

29
• Estimation numérique de l'autocorrélation
La fonction d'autocorrélation Rx(τ) est calculée en prenant la valeur moyenne de X(t,ω) multiplié par X(t-
τ,ω). Pour simplifier les écritures, les signaux numérisés sont le plus souvent exprimés en fonction
d'indices prenant des valeurs entières. Par exemple, au lieu d'écrire x(tm) avec tm=mte (te: période
d'échantillonnage), on préfère écrire x(m). Ainsi, pour estimer numériquement la fonction
d'autocorrélation, on pose simplement le calcul d'une valeur moyenne sur l’ensemble de N échantillons
qui constituent x(m):

1

N −1
r1 ( p ) = m= p
x(m)x* ( m − p ) pour 0 ≤ p ≤ N − 1 (4.1)
N
Lorsque p tend vers N-1, peu de termes interviennent dans le calcul de la moyenne alors que le terme de
normalisation reste constant à 1/N. Cela a pour conséquence d'introduire un biais dans l'estimation:
l'autocorrélation est pondérée par une fenêtre triangulaire.

Pour éliminer le biais, un second estimateur peut être défini de la façon suivante:

1

N −1
r2 ( p) = x(m)x * (m − p) pour 0 ≤ p ≤ N − 1 (4.2)
N−p m= p

L'avantage de cet estimateur est son absence de biais, mais sa variance devient importante lorsque p
tend vers N-1. Les fonctions de corrélation qui vont être calculées par la suite permettront de saisir les
notions de biais et de variance d’un estimateur.

• Utilisation de la TFD pour calculer ces estimées.


Pour calculer une fonction de corrélation numérique, il est plus intéressant de passer dans le domaine
fréquentiel au moyen de la TFD pour des signaux présentant plus de 80 échantillons car les opérations sont
moins nombreuses donc plus rapides à exécuter. L’utilisation de la TFD est basée sur le théorème de
Plancherel qui dit que la transformée de Fourier d’un produit de convolution de deux signaux donne le
produit simple de la transformée de Fourier des deux signaux : TF ( x(t ) * y(t ) ) = X ( f )Y ( f )
Il est possible d’utiliser ce théorème pour estimer la fonction d’autocorrélation car cette dernière

renferme une convolution : R x (τ ) = x (τ ) * x ( −τ )


*

Si on applique cette dernière relation au cas d’un signal numérique sur lequel on essaie de calculer
l’estimateur biaisé de l’autocorrélation, on obtient :

r1 ( p ) =
1
N

N −1
m= p
x (m)x* (m − p ) =
1
N
( x ( p ) * x* ( − p ) )

ou * désigne la convolution linéaire définie par: x( p) * y ( p) = ∑ m =0 x(m) y ( p − m)


N −1

avec y ( p - m) = 0 pour ( p - m) est en dehors de l'intervalle [0, N -1]


La difficulté pour les signaux numériques est qu’il existe deux définitions de la convolution : la
convolution cyclique et la convolution linéaire. La convolution cyclique est définie par la relation :

30
N −1
x( p ) * y ( p ) = ∑ x( m) y ( p − m) en imposant une périodicité N pour les signaux x et y
m=0 La
de manière à pouvoir calculer les valeurs de y (m - p ) lorsque m - p < 0 ( y (m - p ) = y (m - p + N )
convolution cyclique présente la propriété suivante :

TFD ( x ( p ) * y ( p )) = TFD ( x ( p )).TFD ( y ( p )) , ce qui permet de réaliser cette opération de la manière


suivante :

x( p) * y ( p) = TFD −1 (TFD( x( p)).TFD( y ( p)) ) où TFD -1 désigne la TFD inverse.


Cette dernière égalité n’étant pas applicable à la convolution linéaire, une manière de contourner le
problème pour pouvoir utiliser la TFD afin de calculer une convolution linéaire est de rajouter N zéros
aux signaux x et y. La convolution linéaire de deux signaux x et y de N échantillons chacun peut donc
être calculée de la manière suivante :

x( p) * y ( p) = TFD −1 (X 'Y ' ) avec X' et Y' correspondant à : X ' = TFD( x + N 0) Y ' = TFD( y + N 0) Les deux
estimées de l’autocorrélation peuvent donc être calculées de la manière suivante :

r1 ( p) =
1
N
((
TFD −1 X ' X '* ( p) ) )
(4.3)
r2 ( p) =
1
N−p
((
TFD −1 X ' X '* ( p) ) )
Ces deux estimées sont obtenus directement sous Matlab grâce à la fonction xcorr :

[r1, p ] = xcorr ( x, x, ' biased ' ) pour l' estimateur biaisé


(4.4)
[ r 2, p ] = xcorr ( x, x, ' unbiased ' ) pour l' estimateur non biaisé
r1 et r2 sont les deux vecteurs renfermant les deux estimées ; p représente un vecteur qui contiendra les
valeurs entières allant de –(N-1) à (N-1) et va servir pour calculer l’axe des abscisses nécessaire à
représenter les autocorrélations. Les valeurs de r(p) pour des valeurs de p négatives sont obtenues grâce
à la propriété de périodicité des autocorrélations estimées avec la TFD.

2) Travail demandé

a) Autocorrélation d'une sinusoïde


Ecrivez un fonction que vous nommerez autocor.m et dans laquelle vous générez par exemple un signal
sinusoïdal d'amplitude 1 de fréquence 0.1Hz échantillonné à une fréquence de 1Hz en 50 points en partant
de 0s. Les paramètres d’entrée seront : l’amplitude et la fréquence de la sinusoïde, la fréquence
d’échantillonnage et le nombre d’échantillons. On considérera que le vecteur temps part de 0. Pour traiter
l’exemple précédent, il faudra taper : autocor(1,0.1,1,50).
- La fonction devra effectuer les calculs et tracés des estimations biasées et non biaisées de ce
signal par les différentes formules données auparavant : 4.1, 4.2, 4.3 et 4.4. Vérifier que vous

31
obtenez les mêmes résultats par ces trois méthodes pour les deux estimations. Ne passer pas plus
d’une heure sur cette partie car l’essentiel du TP n’est pas là. Par la suite, on se contentera de
calculer et tracer uniquement les deux estimées obtenues avec l’instruction xcorr.
- Tracer et comparer les estimations biaisées et non biaisée de l’autocorrélation du signal pris
comme exemple auparavant.
- Exploiter ces tracés pour retrouver les caractéristiques du signal, à savoir la puissance moyenne
totale et la fréquence.
- Sachant que la puissance moyenne totale est donnée par la fonction d'autocorrélation en zéro,
donnez l'expression de l'estimée numérique de la puissance moyenne totale à partir des
estimateurs biaisé et non biaisé de l'autocorrélation. Calculer l'estimée la puissance moyenne
totale du signal et confronter votre résultat à la théorie.

b) Autocorrélation d'un bruit blanc


Sous Matlab comme dans la plupart des langages de programmation, il existe un générateur de nombres
aléatoires qui permet de modéliser un bruit échantillonné. Matlab propose deux types de générateur: rand
et randn.
- En comparant les histogrammes obtenus pour ces deux bruits en tapant hist(rand(1,1000)) et
hist(randn(1,1000)) donnez les différences essentielles des deux générateurs.
- Calculer l'estimée de la puissance moyenne totale du signal obtenu à partir de l'instruction
randn(1,1000).
- Calculer également l'estimée de la valeur moyenne du même signal.
- Comment à partir d’un ensemble de variables aléatoires qui suivent une loi de distribution
gaussienne de moyenne nulle et de variance 1 est-il possible de générer un signal aléatoire de
moyenne a et de variance b ?
- Remplacer dans la fonction autocor le signal sinusoïdal par un bruit blanc gaussien. Les
paramètres à fournir seront la valeur moyenne, la variance du bruit ainsi que le nombre
d’échantillons. Par exemple, pour générer 100 échantillons d'un bruit blanc gaussien de valeur
moyenne 2 et de variance 3, il faudra taper : autocor(2,3,100). La fréquence d’échantillonnage
sera prise égale à 1Hz dans tous les cas.
- Tracer et comparer les estimations biaisées et non biaisée de son autocorrélation pour l’exemple
choisi auparavant.
- Expliquer comment utiliser ces tracés pour extraire la valeur moyenne, la puissance moyenne
totale et la valeur efficace du signal.
- Recommencer avec 1000 échantillons, commenter l’évolution des résultats.

32
c) Autocorrélation d'un sinus bruité
Rajoutez à présent dans la fonction autocor.m des instructions pour générer et tracer un sinus bruité par
un bruit blanc gaussien centré. On prendra comme exemple un sinus d’amplitude 1 et de fréquence 0.1Hz
constitué de 500 échantillons relevés à une fréquence de 1Hz.
- Sachant que l'on désire un rapport signal sur bruit de 0dB, en déduire la variance du bruit blanc.
- Commenter le tracé du signal bruité, peut-on déterminer l’amplitude et la fréquence de la fonction
sinus ?
- Tracer et commenter les estimations biaisées et non biaisées de son autocorrélation
- Exploiter ces tracés afin de retrouver la puissance moyenne totale du bruit, du sinus et la
fréquence du sinus.

33
34
TP 5 : FILTRAGE ANALOGIQUE

But du TP : Il s'agit de voir comment utiliser Matlab pour concevoir et simuler un filtre analogique, ceci
se fera au travers d'une application particulière concernant la modulation à bande latérale unique (BLU).

1) Généralités sur la modulation à bande latérale unique

La modulation BLU est utilisée par les cibistes, certain radio amateurs, en communication militaire
ainsi qu’en téléphonie pour concentrer plusieurs voies de manières analogique. Les principaux avantages
de ce mode de transmission sont le faible encombrement spectral et par voie de conséquence la faible
puissance nécessaire à l'émission.
Rappelons ci-dessous le spectre d'un signal modulé en amplitude sans porteuse dans le cas d'un
message sinusoïdal m ( t ) de fréquence f m . Il est possible de montrer que ce signal peut être obtenu par
(
le produit simple de la porteuse Ap cos 2π f p t ) par le signal modulant A
m cos ( 2π f mt ) .

Les informations qui caractérisent le message modulant que l'on veut transmettre sont sa fréquence f m
et son amplitude Am . Après modulation ces informations sont contenues dans les raies situées en f p + f m
et f p − f m . En réalité, les raies f p + f m et f p − f m contiennent les mêmes informations. Ceci veut donc
dire qu'il est inutile de transmettre simultanément les deux raies situées en f p + f m et f p − f m ; ces deux
raies constituent dans ce cas particulier ce qu'on appelle plus généralement les bandes latérales
supérieure et inférieure.
La modulation BLU consiste à filtrer le signal modulé en amplitude de manière à ne transmettre qu'une
seule bande latérale (BLI ou BLS suivant la bande sélectionnée: Inférieure ou Supérieure respectivement).
Un avantage essentiel est que la bande à transmettre est réduite de moitié par rapport aux modulations
AM (avec ou sans porteuse) pour un message donné. On gagne donc un demi bande qui peut servir à
transmettre un autre signal. Par contre le signal est plus difficile à démoduler en raison de l'absence de
porteuse.

35
Le schéma de principe qui peut s'appliquer à la modulation BLU est donc le suivant:

Le travail qui vous est demandé est de simuler les signaux modulés, et de concevoir et vérifier le bon
fonctionnement du filtre passe-bande. Nous vous donnerons donc dans un premier temps les principaux
types de filtres analogiques qu'il est possible de concevoir avec Matlab.

2) Caractéristiques des filtres analogiques

Nous donnerons dans un premier temps les caractéristiques des fonctions de transfert des
différents types de filtre pour des passe-bas.

2.1) Filtres de Butterworth

Un filtre de Butterworth d'ordre n de type passe-bas sera défini par une fonction de transfert H(ω) qui
vérifie l'équation suivante:
1
H (ω ) =
2
2n
ω0
⎛ω ⎞
1 + ⎜⎜ ⎟⎟
⎝ω0 ⎠
ω0 représentant la pulsation de coupure à –3dB.
Ces filtres ne présentent pas d'ondulations en bande passante ni en bande atténuée.

2.2) Filtres de Tchebycheff

Il existe deux types de filtres de Tchebycheff, noté type 1 et type 2.


Pour le type 1, la fonction de transfert est donnée par l’équation :

1
H( f ) =
2

(
1 + ε Tn2 ( f )
2
)
⎧⎪cos(n arccos( x)) pour x < 1
avec Tn( x) = ⎨
⎪⎩cosh(n arg cosh( x)) pour x > 1
Pour le type deux, la fonction de transfert est donnée par :

1
H( f ) =
2

(
1 + ε T ( f a ) / Tn2 ( f )
2
n
2
)
où f a représente la fréquence de début de bande atténuée.

36
Les filtres de Tchebycheff présentent :
- soit une ondulation en bande passante mais pas en bande atténuée (filtre de type 1)
- soit une ondulation en bande atténuée mais pas en bande passante (filtre de type 2)

L’ondulation en bande passante vaut 1 / 1 + ε . Les caractéristiques des filtres de Tchebycheff sont
2

meilleures en atténuation que celles des filtres de Butterworth.

2.3) Filtres de Cauer ou filtres elliptiques

Ils sont optimaux en terme de bande de transition et ont pour gain :

1
H( f ) =
2

(
1 + ε R n2 ( f , L)
2
)
où Rn est une fonction rationnelle de Tchebycheff et où L caractérise l’atténuation. Les filtres de Cauer
présentent des ondulations en bande passante et en bande atténuée. La valeur de l’ondulation en bande
atténuée vaut 1/ 1 + ε 2 .

3) Travail demandé

3.1) Simulation et analyse du signal modulé en amplitude sans porteuse YAM ( t )

Créez un script que vous nommerez filtanal.m dans lequel vous allez générer le signal YAM ( t )
correspondant au produit du signal modulant m(t ) = cos(2πf m t ) avec la porteuse p (t ) = cos(2πf p t ). On
choisit les fréquences suivantes: fm=1kHz et fp=100kHz, et le calcul du signal YAM ( t ) se fera sur un
vecteur temps défini par:
t=0:te:(N-1)te avec te=4/fm/N et N=5000.

Ce script devra permettre le tracé de 2 graphes sur une même figure :

- le premier correspondant à YAM en fonction de t.


- le second pour le spectre calculé avec l'instruction fft: YAM en fonction de la fréquence.
- Expliquez comment vous générez le vecteur des fréquences
- Interpréter le spectre obtenu en le confrontant à ce que prédit la théorie (utilisez le zoom pour bien
visualiser toutes les raies).

3.2) Synthèse d'un filtre passe-bande

On fixe le gabarit suivant pour le filtre passe-bande devant sélectionner la bande latérale inférieure et
éliminer la bande latérale supérieure.

37
Rp=3dB

Rs=30dB

fP1=95kHz fP2=100kHz

fS2=100.6kHz
fS1=94.4kHz

Utilisez les instructions cheb1ord et cheby1 pour trouver la fonction de transfert du filtre correspondant
au gabarit précédent. Attention les anglophones appellent frequency ce que nous appelons pulsation et qui
correspond à ω = 2πf .
Ne créez pas une nouvelle fonction *.m, rajoutez les instructions nécessaires à l'obtention de la fonction
de transfert du filtre dans le fichier filtanal.m. Vérifiez que ce que vous avez obtenu pour le filtre passe
bande répond bien au gabarit demandé en traçant le module du gain du filtre (en dB) en fonction de la
fréquence en utilisant les instructions freqs et tf.

3.3) Simulation et vérification du fonctionnement du filtre passe-bande.

Pour vérifier à présent le bon fonctionnement du filtre passe-bande, nous allons rajouter certaines
instructions dans le fichier filtanal.m pour tracer dans la même figure sur 4 axes différents les
représentations temporelles et fréquentielles des signaux YAM et YBLI .(nous garderons le signal YAM ( t )
simulé précédemment.
Pour générer le signal YBLI , utilisez l'instruction lsim.

- Observez et commentez les représentations temporelles et fréquentielles du signal modulé.

- Même question lorsque vous remplacez le signal modulant m ( t ) par la somme de 2 fonctions
cosinus de fréquences 1 et 2 kHz.
- Interprétez l'évolution des résultats lorsque vous diminuez progressivement le nombre N de valeurs
utilisées pour la simulation. Prenez successivement les valeurs N=2000, N=1000 et N=500.

38
39
40
41
42
43
TP 6 : FILTRAGE NUMÉRIQUE

1) Introduction

La transformée en z est utilisée pour modéliser les opérations effectuées dans le domaine des signaux
échantillonnés. Le filtrage numérique peut ainsi se formuler par :
Y ( z) = H ( z) X ( z) (1)
avec H(z) la fonction de transfert en z du filtre numérique qui peut s’écrire sous la forme :
N −1

∑b
k =0
k z −k
H ( z) = M
(2)
1 + ∑ al z −l

l =1
La formule (1) peut ainsi se ramener à une équation aux différences :
N −1 M
y ( n) = ∑ bk x ( n − k ) − ∑ a l y ( n − l ) (3)
k =0 l =1

On différencie principalement deux types de filtre numérique :

- les filtres à réponse impulsionnelle finie (RIF)


- les filtres à réponse impulsionnelle infinie (RII)

1.1) Filtres RIF

Ces filtres n’ont aucun pôle, ce qui signifie que tous les coefficients al pour l supérieur à 1 sont nuls. Le
calcul du signal en sortie du filtre y se ramène à l’expression :
N −1
y (n) = ∑ bk x(n − k ) (4)
k =0
y correspond donc au produit de convolution de b par x . x correspond alors à la réponse
impulsionnelle du filtre notée plus généralement h . Le nombre de coefficients étant limité, on dit que la
réponse impulsionnelle est finie, d’où le nom de ce type de filtre.
Les avantages de ces filtres sont :
- la stabilité toujours assurée car il n’y a pas de pôles.
- la phase qui varie linéairement avec la fréquence, ce qui introduit un retard constant entre le
signal de sortie et le signal d’entrée du filtre.
Nous allons présenter deux manières de calculer les coefficients d’un filtre RIF.

a) Synthèse d’un filtre RIF par série de Fourier.

On désire réaliser un filtre passe-bas idéal de fréquence de coupure fc. Etant donné que l’on travaille sur
des signaux échantillonnés (y(n),h(n),x(n)), les spectres obtenus par transformée de Fourier de ces
signaux seront périodiques de période égale à la fréquence d’échantillonnage f e . Ce qui explique la forme
donnée à H(f ) :

44
Etant donné que H ( f ) est périodique, on peut calculer son développement en série de Fourier par :
1 fe / 2 ⎛ n ⎞
h( n ) =
fe ∫
− fe / 2
H ( f ) exp⎜⎜ i 2πf

⎟df
f e ⎟⎠
(5)

N.B. : on notera la présence d’un signe + à la place d’un – dans la fonction exponentielle car on passe du
domaine spectral au domaine temporel.
On se limitera au calcul de N coefficients h ( n ) (ou b ( n ) ) pris symétriquement autour de 0, et pour
rendre le filtre causal, il faut décaler les indices n de h ( n ) de manière à démarrer en 0. Ceci introduit
donc un déphasage de ( N − 1) π fTe et un retard de ( N − 1) Te 2 avec Te la période d’échantillonnage (pour
N impair). Pour atténuer l’effet GIBBS lié à la troncature de la réponse impulsionnelle, on utilise
généralement des fenêtres de pondération comme celle de Hamming.

b) Echantillonnage en fréquence

La méthode précédente devient difficile à appliquer lorsque la forme de H ( f ) devient plus compliquée.
Cette nouvelle méthode permet de fixer n’importe quelle forme pour H ( f ) . H ( f ) est échantillonnée en
N points de − f e 2 à f e 2 . Les N coefficients h ( n ) sont obtenus par TFD inverse de H ( f ) :
( N −1) / 2
1 ⎛ n⎞
h( k ) =
N

n =− ( N −1) / 2
H (n) exp ⎜ 2π ik ⎟,
⎝ N⎠
k ∈ ⎡⎣ − ( N − 1) 2, ( N − 1) 2⎤⎦ (6)

Le décalage des indices de h ( n ) pour raison de causalité va également entraîner une phase linéaire.
Nous allons à présent définir les filtres RII.

1.2) Filtres RII

Les filtres RII sont définis par l’équation générale :


N −1

∑b z k
−k

H ( z) = k =0
M
(7)
1 + ∑ al z −l

l =1
Ce type de filtre peut être instable si les pôles sont situés en dehors du cercle unité. D’autre part la phase
ne varie pas linéairement avec la fréquence. Par contre, le nombre de coefficients à calculer est
relativement faible en comparaison des filtres RIF, ce qui permet de limiter les temps de calcul. Pour
synthétiser un filtre RIF, la méthode la plus simple consiste à partir de la fonction de transfert d’un filtre

45
analogique (Butterworth, Tchebycheff, Cauer, etc.) et de passer du plan des variables p (ou s ) à celui
des z . La transformation la plus couramment utilisée est la transformation bilinéaire :
1 − z −1
p est remplacé par : k
1 + z −1
avec k = 2 f e en règle générale.

2) Travail demandé

2.1) Filtres RIF

a) Synthèse par série de Fourier

- Calculer les valeurs des coefficients de la réponse impulsionnelle d’un filtre RIF passe-bas idéal de
fréquence de coupure 1kHz sachant que fe=8kHz. On limite la réponse impulsionnelle à 9 éléments.
- Grâce au programme RIFFOUR, il est possible de vérifier vos calculs.
- Commenter les tracés des réponses en fréquence. Les deux courbes dans chaque graphe
correspondent à l’usage de 2 fenêtres de pondération : la fenêtre rectangle (ou box-car) et la fenêtre
de Hamming.
- Expliquer en particulier l’évolution de la phase avec la fréquence
- Commenter l’évolution de la réponse en fréquence du filtre lorsqu’on augmente le nombre de points
N (prendre successivement 17 et 33).
N.B. : Avant de cliquer sur ‘Réponse en fréquence’, il faut cliquer sur ‘Réponse impulsionnelle’ pour
réactualiser celle-ci à chaque fois que vous changez un paramètre : fe, fc ou N.
- Commenter les tracés de la réponse à un sinus réalisés pour diverses fréquences de la fonction sinus
(prendre N=33).
- Expliquer en particulier la raison pour laquelle les premières valeurs en sortie du filtre sont quasi
nulles.
- Noter le temps de retard entre les 2 sinusoïdes et son évolution avec la fréquence du sinus.
N.B. : il y a possibilité de zoomer certaines parties des graphes.

b) Echantillonnage en fréquence

On propose de réaliser un filtre RIF basé sur le gabarit suivant pour H(f ) :
Sur l’intervalle de fréquence allant de –fe/2 à fe/2 : (f) = 1 pour –f1<f<f1, H(f) = 0 pour f>f2 et f<-f2.

H(f)

-fe/2 0 f1 f2 fe/2 f

46
- Calculer les valeurs de la réponse impulsionnelle d’un filtre RIF basée sur un tel gabarit avec :
f1=1kHz, f2=1.5kHz, fe=8kHz et N=9.
- Grâce au programme RIFECH, il est possible de vérifier vos calculs.
- Commenter l’évolution de la réponse impulsionnelle du filtre lorsque :
- on augmente N (prendre N=17 puis 33).
- à N fixé (17 par exemple) on décale la position de f2 (1.1kHz puis 2kHz)
- Sachant que les cercles représentés dans le module de la réponse en fréquence sont les points

échantillonnés sur H ( f ) (gabarit donné au départ), quels commentaires cela vous inspire-t-il ?

2.2) Filtres RII

Dans le but de limiter au maximum la difficulté des calculs que vous devez réaliser, nous choisissons
comme filtre analogique de départ un passe-bas de type RC :

R
x(t) C y(t)

R=330Ω, C=470nF

- Exprimer la fonction de transfert du filtre sous la forme :

A
H ( p) = (7)
p
1+
2πf c
En donnant les valeurs du gain nominal A et de la fréquence de coupure fc .
- Donner l’expression obtenue pour H ( z ) après transformation bilinéaire (on choisit fe=8kHz). Mettez

H ( z ) sous la forme suivante :


N −1

∑b z k
−k

H ( z) = k =0
M
avec a0=1 (8)
∑a z
l =0
l
−l

- Relevez les coefficients al et bk et comparez vos résultats à ceux fournis par le programme RII (les
valeurs sont données pour les valeurs de l et k croissantes en partant de 0).
- Observez et commentez la réponse en fréquence en identifiant les 2 courbes apparaissant dans

chaque graphe et qui correspondent au filtre analogique H ( p ) et au filtre numérique H ( z ) .


- Commentez en particulier l’évolution observée lorsqu’on modifie la fréquence d’échantillonnage.

47
48
TP 7 : OUTILS POUR LA SYNTHÈSE DE FILTRES

Introduction :
L’option ‘Signal Processing Toolbox’ de MATLAB permet de comparer un grand nombre de méthodes de
synthèse de filtres numériques. Nous séparerons une fois encore les filtres RII des RIF.

1) Synthèse de filtres RIF

Nous avons vu dans le TP précédent deux méthodes élémentaires de synthèse de filtres RIF : la synthèse
par série de Fourier et la méthode d’échantillonnage. Ces deux méthodes sont implémentées sous
MATLAB avec les noms fir1 et fir2. En plus de ces méthodes, il existe une méthode d’optimisation en
moyenne quadratique firls dont l’objectif est la synthèse d’un filtre RIF dont la réponse en fréquence
H ( f ) approche une fonction donnée D ( f ) suivant un critère des moindres carrés. Cette méthode
consiste donc à trouver les coefficients du filtre qui minimisent la fonction suivante :
eqm = ∑ P ( f )[H ( f ) − D ( f )]
2

où P ( f ) est une fonction de pondération éventuelle.


Le problème lié aux différentes méthodes présentées jusqu’à maintenant est le manque de maîtrise des
oscillations du filtre. Or dans de nombreuses applications, il se révèle intéressant d’utiliser des filtres
présentant des ondulations d’amplitude constante. La méthode de Remez (remez) permet de tenir compte
de cette contrainte supplémentaire sur le gabarit du filtre.

2) Synthèse des filtres RII

Pour la conception de filtres RII, nous nous baserons essentiellement sur les filtres analogiques décrits
dans le TP6, sachez néanmoins qu’il est possible de faire la synthèse de filtre RII sans utiliser les
modèles analogiques. Il existe en effet des techniques discrètes itératives qui permettent de calculer
directement les coefficients d’un filtre RII à partir d’un gabarit donné par des méthodes d’optimisation
(voir les instructions prony et yulewalk par exemple).

3) Travail demandé sous SPTOOL

Lorsque vous tapez sptool sous Matlab, une fenêtre que l’on peut décomposer en trois parties apparaît. La
première partie Signals sur la gauche de la fenêtre permet de visualiser avec View des signaux tracés en
fonction du temps généralement. Il est possible ainsi d’importer des signaux définis dans la fenêtre de
travail Matlab (workspace) en cliquant sur File puis Import. Ensuite ces signaux en plus d’être visualisés
peuvent être filtrés dans la partie Filters. Il est aussi possible de faire l’analyse spectrale de ces signaux
dans la partie Spectra.
La zone centrale notée Filters permet de visualiser les caractéristiques d’un filtre par View, de lancer une
synthèse de filtre par New Design, de modifier les caractéristiques d’un filtre par Edit Design et enfin
d’appliquer un filtre à un signal présent dans la partie Signals par Apply. Dans un premier temps, nous
utiliserons la fonction New Design pour comparer les caractéristiques de différents types de filtres
numériques synthétisés à partir d’un gabarit et d’un algorithme donné.

49
Exercice1 : comparaison des résultats obtenus par les méthodes firls et remez.
On fixe la fréquence d’échantillonnage à 1Hz et on désire synthétiser un passe-bas :

d’ordre 15 avec fp=0.275 et fs=0.325Hz.

Exercice2 : comparaison des RII.


On donne les spécifications suivantes pour un filtre numérique passe-bas :

Fe=1Hz, fp=0.25Hz, fs=0.26Hz

Ondulation dans la bande passante Rp=3dB, atténuation dans la bande coupée Rs=20.

50
6
SPTool: A Signal
Processing GUI Suite

The following chapter describes the Signal Processing Tool (SPTool) and provides a detailed example
showing how to use this Graphical User Interface.

SPTool: An Interactive Signal Processing Overview of the tool


Environment (p. 6-3)
Opening SPTool (p. 6-5) How to start the tool
Getting Context-Sensitive Help (p. 6-7) How to get help
Signal Browser (p. 6-8) Viewing signals
Filter Designer (p. 6-11) Designing filters
Filter Visualization Tool (p. 6-14) Viewing and analyzing filters
Spectrum Viewer (p. 6-18) Viewing spectra
Filtering and Analysis of Noise (p. 6-21) Full example using the tool
Exporting Signals, Filters, and Spectra (p. 6-33) Sending data out of the tool
Accessing Filter Parameters (p. 6-35) Using MATLAB to access saved filter parameters
Importing Filters and Spectra into SPTool Bringing data into the tool
(p. 6-40)
Loading Variables from the Disk (p. 6-44) Bringing data from a disk into the tool
Selecting Signals, Filters, and Spectra in Selecting data
SPTool (p. 6-45)
Editing Signals, Filters, or Spectra in SPTool Editing data
(p. 6-46)
Designing a Filter with the Pole/Zero Editor Using the Pole/Zero Editor
(p. 6-47)
6 SPTool: A Signal Processing GUI Suite

Redesigning a Filter Using the Magnitude Plot Changing the filter design using Magnitude plot
(p. 6-50)
Setting Preferences (p. 6-51) Customizing the tool
Making Signal Measurements with Markers Measuring signals
(p. 6-53)

6-2
SPTool: An Interactive Signal Processing Environment

SPTool: An Interactive Signal Processing Environment


SPTool is an interactive GUI for digital signal processing that can be used to

• Analyze signals
• Design filters
• Analyze (view) filters
• Filter signals
• Analyze signal spectra

You can accomplish these tasks using four GUIs that you access from within
SPTool:

• The Signal Browser is for analyzing signals. You can also play portions of
signals using your computer’s audio hardware.
• The Filter Designer is for designing or editing FIR and IIR digital filters.
Most of the Signal Processing Toolbox filter design methods available at the
command line are also available in the Filter Designer. Additionally, you can
design a filter by using the Pole/Zero Editor to graphically place poles and
zeros on the z-plane.
• The Filter Visualization Tool is for analyzing filter characteristics. See
“Filter Visualization Tool” on page 6-14.
• The Spectrum Viewer is for spectral analysis. You can use the Signal
Processing Toolbox spectral estimation methods to estimate the power
spectral density of a signal. See “Spectrum Viewer” on page 6-18.

SPTool Data Structures


You can use SPTool to analyze signals, filters, or spectra that you create at the
MATLAB command line.
You can bring signals, filters, or spectra from the MATLAB workspace into the
SPTool workspace using the Import item under the File menu. Signals, filters,
or spectra that you create in (or import into) the SPTool workspace exist as
MATLAB structures. See the MATLAB documentation for more information on
MATLAB structures.

6-3
6 SPTool: A Signal Processing GUI Suite

When you use the Export item under the File menu to save signals, filters, and
spectra that you create or modify in SPTool, these are also saved as MATLAB
structures.

6-4
Opening SPTool

Opening SPTool
To open SPTool, type
sptool

When you first open SPTool, it contains a collection of default signals, filters,
and spectra. You can specify your own preferences for what signals, filters, and
spectra you want to see when SPTool opens. See “Designing a Filter with the
Pole/Zero Editor” on page 6-47 for more details.
You can access these three GUIs from SPTool by selecting a signal, filter, or
spectrum and pressing the appropriate View button:

• Signal Browser
• Filter Visualization Tool
• Spectrum Viewer

6-5
6 SPTool: A Signal Processing GUI Suite

You can access the Filter Designer GUI by pressing the New button to create
a new filter or the Edit button to edit a selected filter. The Apply button applies
a selected filter to a selected signal.
The Create button opens the Spectrum Viewer and creates the power spectral
density of the selected signal. The Update button opens the Spectrum Viewer
for the selected spectrum.

6-6
Getting Context-Sensitive Help

Getting Context-Sensitive Help


To find information on a particular region of the Signal Browser, Filter
Designer, or Spectrum Viewer:

1 Press the What’s this? button, .

2 Click on the region of the GUI you want information on.

You can also use the What’s this? menu item in the Help menu to launch
context-sensitive help.

6-7
6 SPTool: A Signal Processing GUI Suite

Signal Browser
You can use the Signal Browser to display and analyze signals listed in the
Signals list box in SPTool.
Using the Signal Browser you can:

• Analyze and compare vector or array (matrix) signals.


• Zoom in on portions of signal data.
• Measure a variety of characteristics of signal data.
• Compare multiple signals.
• Play portions of signal data on audio hardware.
• Print signal plots.

Opening the Signal Browser


To open the Signal Browser from SPTool:

1 Select one or more signals in the Signals list in SPTool

2 Press the View button under the Signals list

6-8
Signal Browser

The Signal Browser has the following components:

• A display region for analyzing signals, including markers for measuring,


comparing, or playing signals
• A “panner” that displays the entire signal length, highlighting the portion
currently active in the display region
• A marker measurements area
• A toolbar with buttons for convenient access to frequently used functions

Icon Description

Print and print preview

Play an audio signal

Display array and complex signals

6-9
6 SPTool: A Signal Processing GUI Suite

Icon Description

Zoom the signal in and out

Select one of several loaded signals

Set the display color and line style of a signal

Toggle the markers on and off

Set marker types


(See “Making Signal Measurements with
Markers” on page 6-53)

Turn on the What’s This help

6-10
Filter Designer

Filter Designer
The Filter Designer provides an interactive graphical environment for the
design of digital IIR and FIR filters based on specifications that you enter on a
magnitude or pole-zero plot.

Note You can also use the Filter Design and Analysis Tool (FDATool)
described in Chapter 5, “FDATool: A Filter Design and Analysis GUI” for filter
design and analysis.

Filter Types
You can design filters of the following types using the Filter Designer:

• Bandpass
• Lowpass
• Bandstop
• Highpass

FIR Filter Methods


You can use the following filter methods to design FIR filters:

• Equiripple
• Least squares
• Window

IIR Filter Methods


You can use the following filter methods to design IIR filters:

• Butterworth
• Chebyshev Type I
• Chebyshev Type II
• Elliptic

6-11
6 SPTool: A Signal Processing GUI Suite

Pole/Zero Editor
You can use the Pole/Zero Editor to design arbitrary FIR and IIR filters by
placing and moving poles and zeros on the complex z-plane.

Spectral Overlay Feature


You can also superimpose spectra on a filter’s magnitude response to see if the
filtering requirements are met.

Opening the Filter Designer


Open the Filter Designer from SPTool by either:

• Pressing the New button in the Filters list in SPTool


• Selecting a filter you want to edit from the Filters list in SPTool, and then
pressing the Edit button

The Filter Designer has the following components:

6-12
Filter Designer

• A pull-down Filter menu for selecting a filter from the list in SPTool
• A Sampling Frequency text box
• A pull-down Algorithm menu for selecting a filter design method or a
pole-zero plot display
• A Specifications area for viewing or modifying a filter’s design parameters
or pole-zero locations
• A plot display region for graphically adjusting filter magnitude responses or
the pole-zero locations
• A Measurements area for viewing the response characteristics and stability
of the current filter

• A toolbar with the following buttons

Icon Description

Print and print preview

Zoom in and out

Passband view

Overlay spectrum

Turn on the What’s This help

6-13
6 SPTool: A Signal Processing GUI Suite

Filter Visualization Tool


You can use the Filter Visualization Tool (fvtool) to analyze the following
response characteristics of selected filters:

• Magnitude response
• Phase response
• Impulse response
• Step response
• Group delay
• Phase delay
• Pole and zero locations
• Detailed filter information

FVTool also provides features for

• Overlaying filter responses


• Zooming
• Measuring filter responses
• Modifying display parameters such as frequency ranges or magnitude units

If you start FVTool by clicking the SPTool Filter View button, that FVTool is
linked to SPTool. Any changes made in SPTool to the filter are immediately
reflected in FVTool. The FVTool title bar includes “SPTool” to indicate the link.
If you start an FVTool by clicking the New button or by selecting File-->New
from within FVTool, that FVTool is a stand-alone version and is not linked to
SPTool.

Note Every time you click the Filter View button a new, linked FVTool
starts. This allows you to view multiple analyses simultaneously.

Opening the Filter Visualization Tool


You open FVTool from SPTool as follows.

6-14
Filter Visualization Tool

1 Select one or more filters in the Filters list in SPTool.

2 Click the View button under the Filters list.

When you first open FVTool, it displays the selected filter’s magnitude plot.

Filter Visualization Tool Components


FVTool has the following components:

6-15
6 SPTool: A Signal Processing GUI Suite

• Figure toolbar with the following icons.

Icon Description

Start a new unlinked FVTool

Print file and print preview

Toggle plot editing, add text, add arrow, and add line

Zoom in, zoom in x only, zoom in y only, and return to


full view

Toggle legend

Toggle grid

• Analysis toolbar with the following icons

Icon Description

Display Magnitude plot

Display Phase plot

Display Magnitude and Phase plot

Display Group Delay plot

Display Phase Delay plot

Display Impulse Response

Display Step Response

Display Pole-Zero plot

Display filter coefficients

Display filter information

• A display area for analyzing one or more frequency response plots for the
selected filter(s)

6-16
Filter Visualization Tool

Using Data Markers


In FVTool, you can use data markers to display information on particular
points in the response plot(s). See “Data Markers” in the FDATool online help
more information.

Analysis Parameters
In the plot area of any filter response plot, right-click and select Analysis
Parameters to display details about the displayed plot. See “Analysis
Parameters” in the FDATool online help for more information.
You can change any parameter in a linked FVTool, except the sampling
frequency. You can only change the sampling frequency using Sampling
Frequency in the SPTool Edit menu or the SPTool Filters Edit button.

6-17
6 SPTool: A Signal Processing GUI Suite

Spectrum Viewer
You can use the Spectrum Viewer for estimating and analyzing a signal’s
power spectral density (PSD). You can use the PSD estimates to understand a
signal’s frequency content.
The Spectrum Viewer provides the following functionality.

• Analyze and compare spectral density plots.


• Use different spectral estimation methods to create spectra:
- Burg (pburg)
- Covariance (pcov)
- FFT (fft)
- Modified covariance (pmcov)
- MTM (multitaper method) (pmtm)
- MUSIC (pmusic)
- Welch (pwelch)
- Yule-Walker AR (pyulear)
• Modify power spectral density parameters such as FFT length, window type,
and sample frequency.
• Print spectral plots.

Opening the Spectrum Viewer


To open the Spectrum Viewer and create a PSD estimate from SPTool:

1 Select a signal from the Signal list box in SPTool.

2 Press the Create button in the Spectra list.

3 Press the Apply button in the Spectrum Viewer.

To open the Spectrum Viewer with a PSD estimate already listed in SPTool:

1 Select a PSD estimate from the Spectra list box in SPTool.

2 Press the View button in the Spectra list.

6-18
Spectrum Viewer

For example:

1 Select mtlb in the default Signals list in SPTool.

2 Press the Create button in SPTool to open the Spectrum Viewer.

3 Press the Apply button in the Spectrum Viewer to plot the spectrum.

The Spectrum Viewer has the following components:

• A signal identification region that provides information about the signal


whose power spectral density estimate is displayed
• A Parameters region for modifying the PSD parameters
• A display region for analyzing spectra and an Options menu for modifying
display characteristics
• Spectrum management controls
- Inherit from menu to inherit PSD specifications from another PSD object
listed in the menu
- Revert button to revert to the named PSD’s original specifications

6-19
6 SPTool: A Signal Processing GUI Suite

- Apply button for creating or updating PSD estimates


• A toolbar with buttons for convenient access to frequently used functions

Icon Description

Print and print preview

Zoom the signal in and out

Select one of several loaded signals

Set the display color and line style of a signal

Toggle the markers on and off

Set marker types

Turn on the What’s This help

6-20
Filtering and Analysis of Noise

Filtering and Analysis of Noise


The following sections provide an example of using the GUI-based interactive
tools to:

• Design and implement an FIR bandpass digital filter


• Apply the filter to a noisy signal
• Analyze signals and their spectra

The steps include:

1 Creating a noisy signal in the MATLAB workspace and importing it into


SPTool

2 Designing a bandpass filter using the Filter Designer

3 Applying the filter to the original noise signal to create a bandlimited noise
signal

4 Comparing the time domain information of the original and filtered signals
using the Signal Browser

5 Comparing the spectra of both signals using the Spectrum Viewer

Step 1: Importing a Signal into SPTool


To import a signal into SPTool from the workspace or disk, the signal must be
either:

• A special MATLAB signal structure, such as that saved from a previous


SPTool session
• A signal created as a variable (vector or matrix) in the MATLAB workspace

For this example, create a new signal at the command line and then import it
as a structure into SPTool:

1 Create a random signal in the MATLAB workspace by typing


randn('state',0);
x = randn(5000,1);

2 If SPTool is not already open, open SPTool by typing

6-21
6 SPTool: A Signal Processing GUI Suite

sptool

The SPTool window is displayed.

3 Select Import from the File menu in SPTool. The Import to SPTool dialog
opens.

The variable x is displayed in the Workspace Contents list. (If it is not,


select the From Workspace radio button to display the contents of the
workspace.)

4 Select the signal and import it into the Data field:

a Make sure that Signal is selected in the Import As pull-down menu.

b Select the signal variable x in the Workspace Contents list.

c Click on the arrow to the left of the Data field or type x in the Data field.
d Type 5000 in the Sampling Frequency field.

e Name the signal by typing noise in the Name field.


f Press OK.

At this point, the signal noise[vector] is selected in SPTool’s Signals list.

6-22
Filtering and Analysis of Noise

Note You can import filters and spectra into SPTool in much the same way as
you import signals. See “Importing Filters and Spectra into SPTool” on
page 6-40 for specific details.
You can also import signals from MAT-files on your disk, rather than from the
workspace. See “Loading Variables from the Disk” on page 6-44 for more
information.

Type help sptool for information about importing from the command line.

Step 2: Designing a Filter


You can import an existing filter into SPTool, or you can design and edit a new
filter using the Filter Designer.
In this example:

1 Open a default filter in the Filter Designer.

2 Specify an equiripple bandpass FIR filter.

Opening the Filter Designer


To open the Filter Designer, press the New button in SPTool. This opens the
Filter Designer with a default filter named filt1.

Specifying the Bandpass Filter


Design an equiripple bandpass FIR filter with the following characteristics:

• Sampling frequency of 5000 Hz


• Stopband frequency ranges of [0 500] Hz and [1500 2500] Hz
• Passband frequency range of [750 1250] Hz
• Ripple in the passband of 0.01 dB
• Stopband attenuation of 75 dB

To modify your filter in the Filter Designer to meet these specifications:

6-23
6 SPTool: A Signal Processing GUI Suite

1 Change the filter sampling frequency to 5000 by entering this value in the
Sampling Frequency text box.

2 Select Equiripple FIR from the Algorithm list.

3 Select bandpass from the Type list.

4 Set the passband edge frequencies by entering 750 for Fp1 and 1250 for Fp2.

5 Set the stopband edge frequencies by entering 500 for Fs1 and 1500 for Fs2.

6 Type 0.01 into the Rp field and 75 into the Rs field.

Rp sets the maximum passband ripple and Rs sets the stopband attenuation
for the filter.

7 Press the Apply button to design the new filter.When the new filter is
designed, the magnitude response of the filter is displayed with a solid line
in the display region.

6-24
Filtering and Analysis of Noise

The resulting filter is an order-78 bandpass equiripple filter.

Note You can use the solid line in the plot to modify your filter design. See
“Redesigning a Filter Using the Magnitude Plot” on page 6-50 for more
information.

Step 3: Applying a Filter to a Signal


When you apply a filter to a signal, you create a new signal in SPTool
representing the filtered signal.
To apply the filter filt1 you just created to the signal noise:

1 Select SPTool from the Window menu in the Filter Designer.

6-25
6 SPTool: A Signal Processing GUI Suite

2 Select the signal noise[vector] from the Signals list and select the filter
(named filt1[design]) from the Filters list.

Press Apply to apply the filter filt1 to the signal noise. The Apply Filter
dialog box is displayed
.

3 Keep the default filter structure selected in the Algorithm list.

4 Name the new signal by typing blnoise in the Output Signal field in this
dialog box.

6-26
Filtering and Analysis of Noise

5 Press OK to close the Apply Filter dialog box.

The filter is applied to the selected signal and the filtered signal
blnoise[vector] is listed in the Signals list in SPTool.

Step 4: Analyzing a Signal


You can analyze and print signals using the Signal Browser. You can also play
the signals if your computer has audio output capabilities.
For example, compare the signal noise to the filtered signal blnoise:

1 Shift+click on the noise and blnoise signals in the Signals list of SPTool to
select both signals.

2 Press the View button under the Signals list.

The Signal Browser is activated and both signals are displayed in the
display region. (The names of both signals are shown above the display
region.) Initially, the original noise signal covers up the bandlimited
blnoise signal.

3 Push the selection button on the toolbar, , to select the blnoise signal.

The display area is updated. Now you can see the blnoise signal
superimposed on top of the noise signal. The signals are displayed in
different colors in both the display region and the panner. You can change
the color of the selected signal using the Line Properties button on the
toolbar, .

6-27
6 SPTool: A Signal Processing GUI Suite

Playing a Signal
When you press the Play button in the Signal Browser toolbar, , the active
signal is played on the computer’s audio hardware:

1 To hear a portion of the active (selected) signal

a Use the vertical markers to select a portion of the signal you want to play.
Vertical markers are enabled by the and buttons.
b Press the Play button.

2 To hear the other signal

a Select the signal as in step 3 above. You can also select the signal directly
in the display region.
b Press the Play button again.

Printing a Signal
You can print from the Signal Browser using the Print button, .

6-28
Filtering and Analysis of Noise

You can use the line display buttons to maximize the visual contrast between
the signals by setting the line color for noise to gray and the line color for
blnoise to white. Do this before printing two signals together.

Note You can follow the same rules to print spectra, but you can’t print filter
responses directly from SPTool.

Use the Signal Browser region in the Preferences dialog box in SPTool to
suppress printing of both the panner and the marker settings.
To print both signals, press the Print button in the Signal Browser toolbar.

Step 5: Spectral Analysis in the Spectrum Viewer


You can analyze the frequency content of a signal using the Spectrum Viewer,
which estimates and displays a signal’s power spectral density.
For example, to analyze and compare the spectra of noise and blnoise:

1 Create a power spectral density (PSD) object, spect1, that is associated with
the signal noise, and a second PSD object, spect2, that is associated with
the signal blnoise.

6-29
6 SPTool: A Signal Processing GUI Suite

2 Open the Spectrum Viewer to analyze both of these spectra.

3 Print both spectra.

Creating a PSD Object From a Signal

1 Click on SPTool, or select SPTool from the Window menu of any active open
GUI. SPTool is now the active window.

2 Select the noise[vector] signal in the Signals list of SPTool.

3 Press Create in the Spectra list.

The Spectrum Viewer is activated, and a PSD object (spect1) corresponding


to the noise signal is created in the Spectra list. The PSD is not computed
or displayed yet.

4 Press Apply in the Spectrum Viewer to compute and display the PSD
estimate spect1 using the default parameters.

The PSD of the noise signal is displayed in the display region. The
identifying information for the PSD’s associated signal (noise) is displayed
above the Parameters region.

The PSD estimate spect1 is within 2 or 3 dB of 0, so the noise has a fairly


“flat” power spectral density.

5 Follow steps 1 through 4 for the bandlimited noise signal blnoise to create
a second PSD estimate spect2.

The PSD estimate spect2 is flat between 750 and 1250 Hz and has 75 dB
less power in the stopband regions of filt1.

Opening the Spectrum Viewer with Two Spectra

1 Reactivate SPTool again, as in step 1 above.

2 Shift+click on spect1 and spect2 in the Spectra list to select them both.

3 Press View in the Spectra list to reactivate the Spectrum Viewer and
display both spectra together.

6-30
Filtering and Analysis of Noise

Printing the Spectra


Before printing the two spectra together, use the color and line style selection
button, , to differentiate the two plots by line style, rather than by color.
To print both spectra:

1 Press the Print Preview button, , in the toolbar on the Spectrum


Viewer.

2 From the Spectrum Viewer Print Preview window, drag the legend out of
the display region so that it doesn’t obscure part of the plot.

3 Press the Print button in the Spectrum Viewer Print Preview window.

6-31
6 SPTool: A Signal Processing GUI Suite

6-32
Exporting Signals, Filters, and Spectra

Exporting Signals, Filters, and Spectra


You can export SPTool signals, filters, and spectra as structures to the
MATLAB workspace or to your disk.
In each case you:

1 Select the items in SPTool you want to export.

2 Select Export from the File menu.

Opening the Export Dialog Box


To save the filter filt1 you just created in this example, open the Export
dialog box with filt1 preselected:

1 Select filt1 in the SPTool Filters list.

2 Select Export from the File menu.

The Export dialog box opens with filt1 preselected.

6-33
6 SPTool: A Signal Processing GUI Suite

Exporting a Filter to the MATLAB Workspace


To export the filter filt1 to the MATLAB workspace:

1 Select filt1 from the Export List and deselect all other items using
Ctrl+click.

2 Press the Export to Workspace button.

6-34
Accessing Filter Parameters

Accessing Filter Parameters


You can access filter parameters in the following two ways.

• “Accessing Filter Parameters in a Saved Filter”


• “Accessing Parameters in a Saved Spectrum”

Accessing Filter Parameters in a Saved Filter


The MATLAB structures created by SPTool have several associated fields,
many of which are also MATLAB structures. See the MATLAB documentation
for general information about MATLAB structures.
For example, after exporting a filter filt1 to the MATLAB workspace, type
filt1

to display the fields of the MATLAB filter structure. The tf, Fs, and specs
fields of the structure contain the information that describes the filter.

The tf Field: Accessing Filter Coefficients


The tf field is a structure containing the transfer function representation of
the filter. Use this field to obtain the filter coefficients;

• filt1.tf.num contains the numerator coefficients.


• filt1.tf.den contains the denominator coefficients.

The vectors contained in these structures represent polynomials in descending


powers of z. The numerator and denominator polynomials are used to specify
the transfer function

B(z) b(1) + b(2)z –1 + L + b(nb + 1)z –m


H(z) = ----------- = -----------------------------------------------------------------------------------------
A(z) a(1) + a(2)z – 1 + L + a(na + 1)z – n
where:

• b is a vector containing the coefficients from the tf.num field.


• a is a vector containing the coefficients from the tf.den field.
• m is the numerator order.
• n is the denominator order.

6-35
6 SPTool: A Signal Processing GUI Suite

You can change the filter representation from the default transfer function to
another form by using the tf2ss or tf2zp functions.

The Fs Field: Accessing Filter Sample Frequency


The Fs field contains the sampling frequency of the filter in hertz.

The specs Field: Accessing other Filter Parameters


The specs field is a structure containing parameters that you specified for the
filter design. The first field, specs.currentModule, contains a string
representing the most recent design method selected from the Filter Designer’s
Algorithm list before you exported the filter. The possible contents of the
currentModule field and the corresponding design methods are shown below.

Contents of the currentModule field Design Method

fdbutter Butterworth IIR


fdcheby1 Chebyshev Type I IIR
fdcheby2 Chebyshev Type II IIR
fdellip Elliptic IIR
fdfirls Least Squares FIR
fdkaiser Kaiser Window FIR
fdremez Equiripple FIR

Following the specs.currentModule field, there may be up to seven additional


fields, with labels such as specs.fdremez, specs.fdfirls, etc. The design
specifications for the most recently exported filter are contained in the field
whose label matches the currentModule string. For example, if the specs
structure is
filt1.specs

ans
currentModule: 'fdremez'
fdremez: [1x1 struct]

6-36
Accessing Filter Parameters

the filter specifications are contained in the fdremez field, which is itself a data
structure.
The specifications include the parameter values from the Specifications
region of the Filter Designer, such as band edges and filter order. For example,
the filter above has the following specifications stored in
filt1.specs.fdremez:
filt1.specs.fdremez

ans =
setOrderFlag: 0
type: 3
f: [0 0.2000 0.3000 0.5000 0.6000 1]
m: [6x1 double]
Rp: 0.0100
Rs: 75
wt: [3.2371 1 3.2371]
order: 78

Because certain filter parameters are unique to a particular design, this


structure has a different set of fields for each filter design.
The table below describes the possible fields associated with the filter design
specification field (the specs field) that can appear in the exported structure.

Parameter Description

Beta Kaiser window β parameter.


f Contains a vector of band-edge frequencies, normalized so
that 1 Hz corresponds to half the sample frequency.
Fpass Passband cutoff frequencies. Scalar for lowpass and
highpass designs, two-element vector for bandpass and
bandstop designs.
Fstop Stopband cutoff frequencies. Scalar for lowpass and
highpass designs, two-element vector for bandpass and
bandstop designs.

6-37
6 SPTool: A Signal Processing GUI Suite

Parameter Description

m The response magnitudes corresponding to the band-edge


frequencies in f.
order Filter order.
Rp Passband ripple (dB)
Rs Stopband attenuation (dB)
setOrderFlag Contains 1 if the filter order was specified manually (i.e.,
the Minimum Order box in the Specifications region
was not selected). Contains 0 if the filter order was
computed automatically.
type Contains 1 for lowpass, 2 for highpass, 3 for bandpass, or
4 for bandstop.

w3db -3 dB frequency for Butterworth IIR designs.


wind Vector of Kaiser window coefficients.
Wn Cutoff frequency for the Kaiser window FIR filter when
setOrderFlag = 1.

wt Vector of weights, one weight per frequency band.

Accessing Parameters in a Saved Spectrum


The following structure fields describe the spectra saved by SPTool.

Field Description

P The spectral power vector.


f The spectral frequency vector.

6-38
Accessing Filter Parameters

Field Description

confid A structure containing the confidence intervals data

• The confid.level field contains the chosen


confidence level.
• The confid.Pc field contains the spectral power
data for the confidence intervals.
• The confid.enable field contains a 1 if confidence
levels are enabled for the power spectral density.
signalLabel The name of the signal from which the power spectral
density was generated.
Fs The associated signal’s sample rate.

You can access the information in these fields as you do with every MATLAB
structure.
For example, if you export an SPTool PSD estimate spect1 to the workspace,
type
spect1.P

to obtain the vector of associated power values.

6-39
6 SPTool: A Signal Processing GUI Suite

Importing Filters and Spectra into SPTool


In addition to importing signals into SPTool, you can import filters or spectra
into SPTool from either the workspace or from a file.
The procedures are very similar to those explained in:

• “Step 1: Importing a Signal into SPTool” on page 6-21 for loading variables
from the workspace
• “Loading Variables from the Disk” on page 6-44 for loading variables from
your disk

Importing Filters
When you import filters, first select the appropriate filter form from the Form
list.

For every filter you specify a variable name or a value for the filter’s sampling
frequency in the Sampling Frequency field. Each filter form requires different
variables.

Transfer Function
For Transfer Function, you specify the filter by its transfer function
representation:

6-40
Importing Filters and Spectra into SPTool

B(z-) b(1) + b(2)z –1 + L + b(m + 1)z – m


H(z) = ---------- = ---------------------------------------------------------------------------------------
A(z) a(1) + a(2)z – 1 + L + a(n + 1)z – n

• The Numerator field specifies a variable name or value for the numerator
coefficient vector b, which contains m+1 coefficients in descending powers of
z.
• The Denominator field specifies a variable name or value for the
denominator coefficient vector a, which contains n+1 coefficients in
descending powers of z.

State Space
For State Space, you specify the filter by its state-space representation:

x· = Ax + Bu
y = Cx + Du

The A-Matrix, B-Matrix, C-Matrix, and D-Matrix fields specify a variable


name or a value for each matrix in this system.

Zeros, Poles, Gain


For Zeros, Poles, Gain, you specify the filter by its zero-pole-gain
representation:

( z – z ( 1 ) ) ( z – z ( 2 ) )L ( z – z ( m ) )
H(z) = Z
(z)- = k -----------------------------------------------------------------------------------
-
---------
P ( z) ( z – p ( 1 ) ) ( z – p ( 2 ) )L ( z – p ( n ) )

• The Zeros field specifies a variable name or value for the zeros vector z,
which contains the locations of m zeros.
• The Poles field specifies a variable name or value for the zeros vector p,
which contains the locations of n poles.
• The Gain field specifies a variable name or value for the gain k.

Second Order Sections


For 2nd Order Sections you specify the filter by its second-order section
representation:

6-41
6 SPTool: A Signal Processing GUI Suite

L L
b 0k + b 1k z – 1 + b 2k z –2
H(z) = ∏ H k(z) = ∏ ----------------------------------------------------------
1 + a 1k z –1 + a 2k z – 2
k=1 k=1

The SOS Matrix field specifies a variable name or a value for the L-by-6 SOS
matrix

b 01 b 11 b 21 1 a 11 a 21
b 02 b 12 b 22 1 a 12 a 22
sos =
M M M M M M
b 0L b 1L b 2L 1 a 1L a 2L

whose rows contain the numerator and denominator coefficients bik and aik of
the second-order sections of H(z).

Note If you import a filter that was not created in SPTool, you can only edit
that filter using the Pole/Zero Editor.

Importing Spectra
When you import a power spectral density (PSD), you specify:

• A variable name or a value for the PSD vector in the PSD field
• A variable name or a value for the frequency vector in the Freq. Vector field

The PSD values in the PSD vector correspond to the frequencies contained in
the Freq. Vector vector; the two vectors must have the same length.

6-42
Importing Filters and Spectra into SPTool

6-43
6 SPTool: A Signal Processing GUI Suite

Loading Variables from the Disk


To import variables representing signals, filters, or spectra from a MAT-file on
your disk;

1 Select the From Disk radio button and do either of the following:

- Type the name of the file you want to import into the MAT-file Name field
and press either the Tab or the Enter key on your keyboard.
- Select Browse, and then find and select the file you want to import using
the Select File to Open dialog. Press OK to close that dialog.

In either case, all variables in the MAT-file you selected are displayed in the
File Contents list.

2 Select the variables to be imported into SPTool.

You can now import one or more variables from the File Contents list into
SPTool, as long as these variables are scalars, vectors, or matrices.

6-44
Selecting Signals, Filters, and Spectra in SPTool

Selecting Signals, Filters, and Spectra in SPTool


All signals, filters, or spectra listed in SPTool exist as special MATLAB
structures. You can bring data representing signals, filters, or spectra into
SPTool from the MATLAB workspace. In general, you can select one or several
items in a given list box. An item is selected when it is highlighted.
The Signals list shows all vector and array signals in the current SPTool
session.
The Filters list shows all designed and imported filters in the current SPTool
session.
The Spectra list shows all spectra in the current SPTool session.
You can select a single data object in a list, a range of data objects in a list, or
multiple separate data objects in a list. You can also have data objects
simultaneously selected in different lists:

• To select a single item, click on it. All other items in that list box become
deselected.
• To add or remove a range of items, Shift+click on the items at the top and
bottom of the section of the list that you want to add. You can also drag your
mouse pointer to select these items.
• To add a single data object to a selection or remove a single data object from
a multiple selection, Ctrl+click on the object.

6-45
6 SPTool: A Signal Processing GUI Suite

Editing Signals, Filters, or Spectra in SPTool


You can edit selected items in SPTool by:

1 Selecting the names of the signals, filters, or spectra you want to edit.

2 Selecting the appropriate Edit menu item:

- Duplicate to copy an item in an SPTool list


- Clear to delete an item in an SPTool list
- Name to rename an item in an SPTool list
- Sampling Frequency to modify the sampling frequency associated with
either a signal (and its associated spectra) or filter in an SPTool list

The pull-down menu next to each menu item shows the names of all selected
items.
You can also edit the following signal characteristics by right-clicking in the
display region of the Signal Browser, the Filter Visualization Tool, or the
Spectrum Viewer:

• The signal name


• The sampling frequency
• The line style properties

Note If you modify the sampling frequency associated with a signal’s


spectrum using the right-click menu on the Spectrum Viewer display region,
the sampling frequency of the associated signal is automatically updated.

6-46
Designing a Filter with the Pole/Zero Editor

Designing a Filter with the Pole/Zero Editor


To design a filter transfer function using the Filter Designer Pole/Zero Editor:

1 Select the Pole/Zero Editor option from the Algorithm list to open the
Pole/Zero Editor in the Filter Designer display.

2 Enter the desired filter gain in the Gain edit box.

3 Select a pole or zero (or conjugate pair) by selecting one of the (pole) or
(zero) symbols on the plot.

4 Choose the coordinates to work in by specifying Polar or Rectangular from


the Coordinates list.

5 Specify the new location(s) of the selected pole, zero, or conjugate pair by
typing values into the Mag and Angle fields (for angular coordinates) or X
and Y (for rectangular coordinates) fields. Alternatively, position the poles
and zeros by dragging the and symbols.

6 Use the Conjugate pair check box to create a conjugate pair from a lone pole
or zero, or to break a conjugate pair into two individual poles or zeros.

Design a new filter or edit an existing filter in the same way.

Note Keep the Filter Visualization Tool (FVTool) open while designing a
filter with the Pole/Zero Editor. Any changes that you make to the filter
transfer function in the Pole/Zero Editor are then simultaneously reflected in
the response plots of FVTool.

6-47
6 SPTool: A Signal Processing GUI Suite

Positioning Poles and Zeros


You can use your mouse to move poles and zeros around the pole/zero plot and
modify your filter design.

Icon Description

Enable moving poles or zeros by dragging on the plot

Add pole

Add zero

Erase poles or zeros

You can move both members of a conjugate pair simultaneously by


manipulating just one of the poles or zeros.
To ungroup conjugates, select the desired pair and clear Conjugate pair in the
Specifications region on the Filter Designer.

When you place two or more poles (or two or more zeros) directly on top of each
other, a number is displayed next to the symbols (on the left for poles, and on
the right for zeros) indicating the number of poles or zeros at that location (e.g.,
for three zeros). This number makes it easy to keep track of all the poles
and zeros in the plot area, even when several are superimposed on each other

6-48
Designing a Filter with the Pole/Zero Editor

and are not visually differentiable. Note, however, that this number does not
indicate the multiplicity of the poles or zeros to which it is attached.
To detect whether or not a set of poles or zeros are truly multiples, use the zoom
tools to magnify the region around the poles or zeros in question. Because
numerical limitations usually prevent any set of poles or zeros from sharing
exactly the same value, at a high enough zoom level even truly multiple poles
or zeros appear distinct from each other.
A common way to assess whether a particular group of poles or zeros contains
multiples is by comparing the mutual proximity of the group members against
a selected threshold value. As an example, the residuez function defines a pole
or zero as being a multiple of another pole or zero if the absolute distance
separating them is less than 0.1% of the larger pole or zero’s magnitude.

6-49
6 SPTool: A Signal Processing GUI Suite

Redesigning a Filter Using the Magnitude Plot


After designing a filter in the Filter Designer, you can redesign it by dragging
the specification lines on the magnitude plot. Use the specification lines to
change passband ripple, stopband attenuation, and edge frequencies.
In the following example, create a Chebyshev filter and modify it by dragging
the specification lines:

1 Select Chebyshev Type I IIR from the Algorithm menu.

2 Select highpass from the Type menu.

3 Type 2000 in the Sampling Frequency field.

4 Set the following parameters:

- Fp = 800
- Fs = 700
- Rp = 2.5
- Rs = 35

5 Select Minimum Order so the Filter Designer can calculate the lowest filter
order that produces the desired characteristics.

6 Press Apply to compute the filter and update the response plot.

7 Position the cursor over the horizontal filter specification line for the
stopband. This is the first (leftmost) horizontal specification line you see.

The cursor changes to the up/down drag indicator.

8 Drag the line until the Rs (stopband attenuation) field reads 100.

Note The Order value in the Measurements region changes because a


higher filter order is needed to meet the new specifications.

6-50
Setting Preferences

Setting Preferences
Use Preferences from the SPTool File menu to customize displays and certain
parameters for SPTool and its four component GUIs. The new settings are
saved on disk and are used when you restart SPTool from MATLAB.
In the Preferences regions, you can:

• Select colors and markers for all displays.


• Select colors and line styles for displayed signals.
• Configure labels, and enable/disable markers, panner, and zoom in the
Signal Browser.
• Configure display parameters, and enable/disable markers and zoom in the
Spectrum Viewer.
• Specify FFT length, and enable/disable mouse zoom and grid in the Filter
Designer.
• Enable/disable use of a default session file.
• Export filters for use with the Control System Toolbox.
• Enable/disable search for plug-ins at start-up.

Note You can set MATLAB preferences that affect the Filter Visualization
Tool only from within FVTool by selecting Preferences from the File menu.
You can set FVTool-specific preferences using the Analysis Parameters on
the Analysis menu.

When you first select Preferences, the Preferences dialog box opens with
Markers selected by default.

6-51
6 SPTool: A Signal Processing GUI Suite

You can:

• Change the settings for markers from this panel of the Preferences dialog.
• Choose any of the other categories listed to customize its settings.

Click once on any listed category in the left pane of the Preferences dialog to
select it.

6-52
Making Signal Measurements with Markers

Making Signal Measurements with Markers


You can use the markers on the Signal Browser or the Spectrum Viewer to
make measurements on either of the following:

• A signal in the Signal Browser


• A power spectral density plotted in the Spectrum Viewer

The following marker buttons are included

Icon Description

Toggle markers on/off

Vertical markers

Horizontal markers

Vertical markers with tracking

Vertical markers with tracking and slope

Display peaks (local maxima)

Display valleys (local minima)

To make a measurement:

1 Select a line to measure (or play, if you are in the Signal Browser).

2 Select one of the marker buttons to apply a marker to the displayed signal.

3 Position a marker in the main display area by grabbing it with your mouse
and dragging:

6-53
6 SPTool: A Signal Processing GUI Suite

a Select a marker setting. If you choose the Vertical, Track, or Slope


buttons, you can drag a marker to the right or left. If you choose the
Horizontal button, you can drag a marker up or down.

b Move the mouse over the marker (1 or 2) that you want to drag.

The hand cursor with the marker number inside it is displayed when
your mouse passes over a marker.
c Drag the marker to where you want it on the signal.

As you drag a marker, the bottom of the Signal Browser shows the current
position of both markers. Depending on which marker setting you select,
some or all of the following fields are displayed—x1, y1, x2, y2, dx, dy, m.
These fields are also displayed when you print from the Signal Browser,
unless you suppress them.
You can also position a marker by typing its x1 and x2 or y1 and y2 values in
the region at the bottom.

6-54