Processeurs de Traitement Numérique du Signal (DSP)
Processeurs de Traitement Numérique du Signal (DSP)
I. II. III. IV.
Olivier Sentieys IRISA Université de Rennes I ENSSAT Lannion
[email protected] http://www.irisa.fr/R2D2
Introduction Architectures MAC/Harvard Evolutions des DSP Flot de développement
Merci à Daniel Ménard pour son support
Exemples d’applications I. Introduction
1. 2. 3. 4.
Contexte applicatif Caractéristiques algorithmiques Solutions architecturales Marché des DSP
Téléphonie cellulaire Communications sans-fil Contrôle de moteur Modems Photo et caméra numériques Voix sur IP, réseau Audio grand public Navigation Vidéoconférence Jouets, consoles vidéo Synthèse musicale, effets
ARCHI’07 - 4
• Performances • Faible coût • Faible énergie
Communications satellite Analyse sismique Sécurité Médical Reconnaissance vocale Sonar, radar Débruitage, écho Anticollision … et pleins d’autres à venir
Tâches élémentaires
Algorithmes de TdSI1
Compression de signal (parole, audio, vidéo) Filtrage Modulation et démodulation Détection et correction d’erreurs Contrôle Traitements audio (e.g. réduction bruit, égalisation, annulation d’écho, conversion de fréquence) Reconnaissance vocale Synthèse de signaux
ARCHI’07 - 5
1Traitement
du signal et de l’image
Signaux numériques o Temps et amplitude discrets o Flot de données o Scalaires, vectorielles, matricielles, …
Traitement temps réel o Temps d'exécution Tex guidé par flots de données o Période d'échantillonnage Te période des sorties Tf > Tex e(t) Te
s(t)
ARCHI’07 - 6
Algorithme
ex. s(n) = max(moy(e), s(n-1))
Tf
Diversités
Fonctions typiques de TdSI
Complexité des algorithmes de TdSI
Convolution, filtrage (RIF, RII), corrélation, DCT
< 5 MOPS
10-30 MOPS
Faible mesure/contrôle
> 100-1000 MOPS Elevé
Compression Compression ADSL UMTS parole modemsaudio GSM Compression Imagerie vidéo médicale
Format des données Application
Taille des données
PWM, mesures, contrôle
1 à 4 - 18 à 22 bits
o y = y + x.h : MAC (multiplication-accumulation)
Adaptation (LMS) o yn = yn-1 + x.h : MAD (multiplication-addition)
FFT, multiplication complexe o xr=xr.wr-xi.wi; xi=xr.wi+xi.wr
Viterbi o a1 = x1 + x2; a2 = y1 + y2; o y = (a1>a2) ? a1 : a2 : ACS (addition-comparaison-sélection)
convertisseurs sigma -delta
ARCHI’07 - 7
radio HF/VHF, radar
6 - 14 bits
sonar
10 - 12 bits
parole
8 - 14 bits
audio
16 - 20 bits
imagerie / vidéo
8 - 36 bits (par pixel)
analyseurs de s ang
16 - 18 bits
Estimation de mouvement o sad += |xi,j - yi+u,j+v| : SAD (sum-of-absolute-difference) ARCHI’07 - 8
Exemple Fil Rouge
Fonctions typiques de TdSI
Filtre Numérique RIF sur N points
Filtre Numérique RIF symétrique sur N points
D
D
D
D
x(n)
h(0)
x
h(1)
x
h(2)
x
h(3)
x
h(4)
+
+
+
+
+
x y(n)
0
+
+
h(0)
+
x
h(1)
h(2)
x y(n)
TAP ARCHI’07 - 9
x +
ARCHI’07 - 10
+
Fonctions typiques de TdSI
Fonctions typiques de TdSI
FFT Fast Fourier Transform
Filtrage adaptatif LMS
• Butterfly (DIF) X
X’ = X + W.Y
Y
x x x x ARCHI’07 - 11
Y’ = X - W.Y
W
+
+ -
DLMS xn(i-1)
+ -
x en
ARCHI’07 - 12
+ hn(i)
hn-1(i) xn(i)
x
+ y
y
Fonctions typiques de TdSI
Caractéristiques algorithmiques
Estimation de mouvement
Charge de calcul importante o Nids de boucles o Multiplications-accumulations (convolution) o Multiplications-additions (FFT, DCT, adaptation, distances, ...)
• Codage vidéo MPEGx, H26x N+2p
Matched Block Motion Vector NxN (u,v)
p Reference Block NxN
Search Window
ARCHI’07 - 13
sadmin = MAXINT; mvx=0; mvy=0; for (u=-p; u0; i--) { acc = acc + x[i]*h[i]; /* Calcul d'une cellule du filtre */ x[i] = x[i-1]; /* Vieillissement du signal */ } y[j] = acc; }
z max1 = max n (x(n) ). h(m) m =
Norme Chebychev z max 2 = max n , (x(n) )max(H ( ) )
+
y (n)
Méthode garantissant l’absence de débordements
Méthode garantissant l’absence de débordements pour un signal d’entrée à bande étroite e.g. x(n)=cos(wt)
Arithmétique d’intervalle (non récursifs)
} ARCHI’07 - 129
ARCHI’07 - 128
Fil rouge : filtre FIR
for(i=0; i> 1
m'MULT ' = 1
ARCHI’07 - 132
Graphe flot de données d’une cellule du FIR
Sources de bruit dans un FIR Bruit de quantification associé à l’entrée Bruit lié au recadrage externe
Recadrage des coefficients
[ xm , xm ] x (n)
b0
z-1
>>
>>
>>
b1
z-1
>>
bN-2
>>
>>
bN-1
x (n)
>>
Renvoi en mémoire du résultat
>>
b0
Filtre FIR
+
+ Recadrage interne
+
b
m
k = log 2 ( K )
b1
+
b1
+
z-1
bN-2 +
b N-2
bgm1 +
bN-1 +
b N-1
bgm N-2+
bgm N-1+
+
+
+
+
Filtre FIR Biais lié au codage des coefficients
m =
ARCHI’07 - 133
z-1
bg mem
[ K .xm , K .xm ] K=
+
bgm0 +
>>
z-1
+
b0
y (n)
+
Bruit lié au renvoi en mémoire du résultat
bx
z-1
>>
ACC
+
m ADD = max(mMULT , m ACC , m ACC ) = 1
Recadrage des données dans un FIR Recadrage externe
ACC
m ACC = 1
max n (y (n) )= max n (x(n) ). h(m) = ai = 1.65 ARCHI’07 - 131
mMULT = mb + mx + 1 = 0 mMULT = 0
y (n)
DACC = 1,65
ARCHI’07 - 134
Bruit lié au recadrage interne
y (n)
Filtre FIR
Filtre FIR : code C virgule fixe
Architecture du processeur cible
x[i] h[i]
• Données en mémoire sur 16 bits • Multiplication 16 bits 16 bits 32 bits • Addition 32 bits + 32 bits 32 bits
MULT
bmult +
ADD
int x[M] = {-809, -6180, -1570, ...} int h[N] = {-1933, 2386, 3631,};
/* Signal x, codage (16,0,15)*/ /* Coefficients (16,-1,16)
*/
Le signal d’entrée et les coefficients sont spécifiés au niveau du code C en entiers sur 16 bits (absence de type virgule fixe en C) : • l’entier représentant x (16,0,15) est obtenu en multipliant x par 215 • l’entier représentant h (16,-1,16) est obtenu en multipliant h par 216
int main() { int x[N]; y[M]; long acc; int i,j;
ACC
(16,0,15) x (n)
z-1
a0 (16,-1,16)
z-1
a1 (32,0,31)
>> 1
aN-2
z-1
>> 1
>> 1
+
+
+
(32,1,30)
y (n)
Filtre récursif (IIR)
z-1
b1
/* Calcul d'une cellule du filtre */ /* Vieillissement des variables internes */
Réduction de la largeur de la variable 32 bits 16 bits Récupération des 16 bits les plus significatifs de la donnée (l ’opération de cast sur acc permet de récupérer les bits de poids faible uniquement)
ADD0
+ b0
…
yn
yi-1(n) sortie cellule précédente
+
+ a2,i
a1,i
wi(n-2)
wi(n-1)
wi(n)
a1
z-1
b2,i
b1
b2
z-1
a2
wn
+yn
b0
z-1
+
} }
(entrée) x(n)
ADD 1
wn
a1
for(i=N-1; i>0; i--) { acc = acc + ((long)(x[i]*h[i])>>1); x[i] = x[i-1]; } y[j] = (int)(acc>>16);
Recadrage de la sortie de la multiplication : changement de format : (32,0,31) (32,1,30)
Filtre IIR d’ordre 2 (cellule i)
Cascade de cellules d’ordre 2
/* Filtrage du vecteur d'entree input */
ARCHI’07 - 136
Renvoi de la donnée en mémoire
+
for(j=0; j>1;
(16,1,14)
ARCHI’07 - 135
ADD 0
/* Initialisation des variables internes du filtre */
aN-1
>> 1
(32,1,30)
xn
for(i=0; i