28.4 Virgulă fixă versus mobilă

Procesarea semnalelor digitale poate fi împărțită în două categorii, virgulă fixă și virgulă mobilă. Acestea se referă la formatul utilizat pentru stocarea și manipularea numerelor în cadrul dispozitivelor. DSP-urile cu virgulă fixă reprezintă, de obicei, fiecare număr cu cel puțin 16 biți, deși poate fi utilizată o altă lungime. De exemplu, Motorola produce o familie de DSP cu virgulă fixă care utilizează 24 de biți. Există patru moduri comune în care aceste 216 = 65536 modele posibile de biți pot reprezenta un număr. În întreg fără semn, numărul stocat poate lua orice valoare întreagă de la 0 la 65 535. În mod similar, întregul cu semn utlizează complementul lui doi pentru a face ca gama să includă numere negative, de la -32.768 la 32.767. Cu notația fracțiune fără semn, cele 65.536 nivele sunt distribuite uniform între 0 și 1. În sfârșit, formatul fracțiunii cu semn permite numere negative, distanțate egal între -1 și 1.

În comparație, DSP-urile în virgulă mobilă folosesc de obicei minimum 32 de biți pentru a stoca fiecare valoare. Aceasta are ca rezultat mult mai multe modele de biți decât pentru virgula fixă, 232 = 4.294.967.296 pentru exactitate. O caracteristică-cheie a notării cu virgulă mobilă este că numerele reprezentate nu sunt distanțate uniform. În cel mai comun format (ANSI / IEEE Std 754-1985), numerele cele mai mari și mai mici sunt de ±3,4×1038 și ±1,2 x10-38, respectiv. Valorile reprezentate sunt distanțate inegal între aceste două extreme, astfel încât decalajul dintre oricare două numere este de aproximativ zece milioane de ori mai mic decât valoarea numerelor. Acest lucru este important deoarece pune mari decalaje între numere mari, dar diferențe mici între numerele mici. Notația în virgulă mobilă este discutată mai detaliat în capitolul 4.

Toate DSP-urile în virgulă mobilă pot să gestioneze și numere în virgulă fixă, o necesitate de a implementa contoare, bucle și semnale care vin de la ADC și merg la DAC. Dar, acest lucru nu înseamnă că matematica punctului fix va fi efectuată cât mai repede decât operațiile punctului de flotare; depinde de arhitectura internă. De exemplu, DSP-urile SHARC sunt optimizate pentru ambele operațiuni cu virgulă fixă și virgulă mobilă și le execută cu o eficiență egală. Din acest motiv, dispozitivele SHARC sunt denumite adesea "DSP-uri pe 32 de biți", mai degrabă decât doar "Virgulă mobilă".

Figura 28-6 ilustrează compromisul primar între DSP-urile cu virgulă fixă și cele cu virgulă mobilă. În capitolul 3 am subliniat faptul că aritmetica virgulei fixe este mult mai rapidă decât virgula mobilă în computerele de uz general. Dar, cu DSP viteza este aproximativ aceeași, rezultatul fiind hardware optimizat pentru operații matematice. Arhitectura internă a unui DSP cu virgulă mobilă este mai complicată decât pentru un dispozitiv cu virgulă fixă. Toate registrele și magistralele de date trebuie să aibă o lățime de 32 de biți în loc de numai 16; multiplicatorul și ALU trebuie să poată efectua rapid o aritmetică în virgulă mobilă, setul de instrucțiuni trebuie să fie mai mare (astfel încât să se poată ocupa atât de numere în virgulă mobilă, cât și de cele în virgulă fixă) și așa mai departe. Virgula mobilă (32 biți) are o precizie mai bună și o gamă dinamică mai mare decât virgula fixă (16 biți). În plus, programele în virgulă mobilă au adesea un ciclu de dezvoltare mai scurt, deoarece, în general, programatorul nu trebuie să-și facă griji în privința unor probleme cum ar fi depășirea în plus sau în minus, și eroarea de rotunjire.

Figura 28-6 Virgula fixă versus mobilă.

DSP-urile cu virgulă fixă sunt în general ieftine, în timp ce dispozitivele cu virgulă mobilă au precizie mai bună, gama dinamică mai mare și un ciclu de dezvoltare mai scurt.

Pe de altă parte, DSP-urile cu virgulă fixă au fost în mod tradițional mai ieftine decât dispozitivele cu virgulă mobilă. Nimic nu se schimbă mai repede decât prețul electronicelor; tot ce găsiți într-o carte va fi depășit înainte de imprimare. Dar, costul este un factor cheie în înțelegerea modului în care DSP-urile evoluează și trebuie să vă oferim o idee generală. Când această carte a fost finalizată în 1999, DSP-urile cu virgulă fixă s-au vândut între 5 și 100 de dolari, în timp ce dispozitivele cu virgulă mobilă erau în intervalul de la 10 până la 300 USD. Această diferență de cost poate fi privită ca o măsură a complexității relative între dispozitive. Dacă doriți să aflați ce prețuri sunt astăzi, trebuie să vă uitați azi.

Acum, să ne îndreptăm atenția spre performanță; ce poate un sistem în virgulă mobilă de 32 de biți să facă și o virgulă fixă pe 16 biți nu poate? Răspunsul la această întrebare este raportul semnal-zgomot. Să presupunem că stocăm un număr într-un format virgulă mobilă de 32 de biți. După cum s-a menționat anterior, distanța dintre acest număr și vecinul său adiacent este de aproximativ a zecea milionime din valoarea numărului. Pentru a stoca numărul, acesta trebuie să fie rotunjit în sus sau în jos cu o mărime maximă de jumătate din dimensiunea decalajului. Cu alte cuvinte, de fiecare dată când stocăm un număr în notația cu virgulă mobilă, adăugăm zgomot semnalului.

Același lucru se întâmplă atunci când un număr este stocat ca o valoare în virgulă fixă pe 16 biți, cu excepția că zgomotul adăugat este mult mai rău. Acest lucru se datorează faptului că distanțele dintre numerele adiacente sunt mult mai mari. De exemplu, să presupunem că stocăm numărul 10.000 ca număr întreg cu semn (între -32.768 și 32.767). Diferența dintre numere este de zece miimi din valoarea numărului pe care îl stocăm. Dacă dorim să stocăm numărul 1000, diferența dintre numere este de numai o miime din valoare.

Zgomotul în semnale este de obicei reprezentat de deviația standard. Acest lucru a fost discutat în detaliu în capitolul 2. De aici, important este faptul că deviația standard a acestui zgomot de cuantificare este de aproximativ o treime din dimensiunea distanței Aceasta înseamnă că raportul semnal-zgomot pentru stocarea unui număr în virgulă mobilă este de aproximativ 30 de milioane la unu, în timp ce pentru un număr în virgulă fixă este de numai aproximativ zece mii la unu. Cu alte cuvinte, virgula mobilă are aproximativ 30.000 de ori mai puțin zgomot de cuantificare decât virgula fixă.

Acest lucru aduce un mod important în care DSP-urile diferă de microprocesoarele tradiționale. Să presupunem că implementăm un filtru FIR în virgulă fixă. Pentru a face acest lucru, vom bucla prin fiecare coeficient, înmulțim cu eșantionul corespunzător din semnalul de intrare și adunăm produsul la un acumulator. Aici este problema. În microprocesoare tradiționale, acest acumulator este doar o altă variabilă în virgulă fixă cu 16 biți. Pentru a evita supraîncărcarea, trebuie să scalăm valorile adăugate și, în mod corespunzător, vom adăuga zgomot de cuantificare pe fiecare pas. În cel mai rău caz, acest zgomot de cuantificare se va adăuga pur și simplu, reducând foarte mult raportul semnal-zgomot al sistemului. De exemplu, într-un filtru FIR de 500 coeficienți, zgomotul pe fiecare eșantion de ieșire poate fi de 500 ori mai mare decât zgomotul pe fiecare eșantion de intrare. Raportul semnal-zgomot de zece mii la unu a coborât la un groaznic douăzeci la unu.Deși acesta este un caz extrem, el ilustrează ideea principală: când se efectuează multe operații pe fiecare eșantion, este rău, foarte rău. Consultați Capitolul 3 pentru mai multe detalii.

DSP-urile gestionează această problemă utilizând un acumulator de precizie extins. Acesta este un registru special care are de 2-3 ori mai mulți biți decât celelalte locații de memorie. De exemplu, într-un DSP de 16 biți poate avea 32 până la 40 de biți, în timp ce în DSP-urile SHARC conține 80 de biți pentru utilizarea în virgulă fixă. Această gamă extinsă practic elimină zgomotul de rotunjire, în timp ce acumularea este în desfășurare. Singura eroare de rotunjire suferită este atunci când acumulatorul este scalat și stocat în memoria de 16 biți. Această strategie funcționează foarte bine, deși limitează modul în care trebuie efectuați anumiți algoritmi. În comparație, virgula mobilă are un zgomot atât de scăzut de cuantificare, încât aceste tehnici nu sunt de obicei necesare.

Pe lângă faptul că au un zgomot de cuantizare mai mic, sunt și mai ușor de dezvoltat algoritmi pentru sistemele cu virgulă mobilă. Majoritatea tehnicilor DSP se bazează pe multiplicări și adunări repetate. În virgula fixă, este necesar să se ia în considerare posibilitatea unei depășiri în plus sau minus după fiecare operație. Programatorul trebuie să înțeleagă continuu amplitudinea numerelor, cum se acumulează erorile de cuantizare și ce scalare trebuie să aibă loc. În comparație, aceste aspecte nu apar în virgula mobilă; numerele se ocupă de ele însele (cu excepția cazurilor rare).

Pentru a vă oferi o mai bună înțelegere a acestei probleme, Fig. 28-7 prezintă un tabel din manualul de utilizare SHARC. Aceasta descrie modalitățile în care multiplicarea poate fi efectuată atât pentru formatele cu virgulă fixă, cât și pentru cele în virgulă mobilă. Mai întâi, uitați-vă cum se pot multiplica numerele în virgulă mobilă; există o singură cale! Adică, Fn = Fx * Fy, unde Fn, Fx și Fy sunt oricare dintre cele 16 registre de date. Nu ar putea fi mai simplu. În comparație, uitați-vă la toate comenzile posibile pentru multiplicarea virgulei fixe. Acestea sunt numeroasele opțiuni necesare pentru a gestiona eficient problemele de rotunjire, scalare și format.

Figura 28-7 Instrucțiuni în virgulă fixă versus mobilă.

Aceste sunt instrucțiuni de multiplicare utilizate în SHARC DSP. În timp ce pentru virgulă mobilă este necesară o singură comandă, pentru virgula fixă sunt necesare multe opțiuni. Vezi textul pentru o explicare a acestor opțiuni.

În figura 28-7, Rn, Rx și Ry se referă la oricare dintre cele 16 registre de date, iar MRF și MRB sunt acumulatoare de 80 biți. Liniile verticale indică opțiuni. De exemplu, intrarea din stânga sus din acest tabel înseamnă că toate următoarele sunt comenzi valide: Rn = Rx * Ry, MRF = Rx * Ry și MRB = Rx * Ry. Cu alte cuvinte, valoarea oricăror două registre poate fi multiplicată și plasată într-un alt registru sau într-unul dintre acumulatorii de precizie extinsă. Acest tabel arată, de asemenea, că numerele pot fi cu semn sau fără semn (S sau U) și pot fi fracționare sau întreg (F sau I). Opțiunile RND și SAT sunt modalități de a controla rotunjirea și depășirea în registru.

Există și alte detalii și opțiuni în tabel, dar ele nu sunt importante pentru discuția noastră prezentă. Ideea importantă este că programatorul în virgulă fixă trebuie să înțeleagă zeci de moduri de a îndeplini sarcina de bază a multiplicării. În schimb, programatorul în virgulă mobilă își poate petrece timpul concentrându-se pe algoritm.

Având în vedere aceste compromisuri între virgula fixă și cea mobilă, cum alegeți ce să utilizați? Iată câteva lucruri de luat în considerare. În primul rând, uitați-vă la câte biți sunt utilizați în ADC și DAC. În multe aplicații, 12-14 biți pe eșantion este intersecția pentru utilizarea virgulei fixe versus virgulă mobilă. De exemplu, televiziunea și alte semnale video utilizează uzual ADC și DAC pe 8 biți, iar precizia virgulei fixe este acceptabilă. În comparație, aplicațiile audio profesionale pot eșantiona până la 20 sau 24 de biți, și aproape sigur au nevoie de virgulă mobilă pentru a capta gama dinamică largă.

Următorul lucru de analizat este complexitatea algoritmului care va fi rulat. Dacă este relativ simplu, gândiți-vă la virgula fixă; dacă este mai complicat, gândiți-vă la virgula mobilă. De exemplu, filtrarea FIR și alte operații în domeniul timp necesită doar câteva duzini de linii de cod, făcându-le potrivite pentru virgula fixă. În contrast, algoritmii din domeniu frecvență, cum ar fi analiza spectrală și convoluția FFT, sunt foarte detaliate și pot fi mult mai dificil de programat. În timp ce pot fi scrise în virgulă fixă, timpul de dezvoltare va fi redus foarte mult dacă se folosește virgula mobilă.

În sfârșit, gândiți-vă la bani: cât de important este costul produsului și cât de important este costul dezvoltării? Atunci când se alege virgula fixă, costul produsului va fi redus, însă costul de dezvoltare va fi probabil mai mare datorită algoritmilor mai dificili. În mod invers, virgula mobilă va avea în general un ciclu de dezvoltare mai rapid și mai ieftin, dar un produs finit mai scump.

Figura 28-8 prezintă unele dintre tendințele majore ale DSP-urilor. Figura (a) ilustrează impactul pe care procesoarele de semnal digital le-au avut asupra pieței încorporate. Acestea sunt aplicații care utilizează un microprocesor pentru a opera și a controla direct un sistem mai mare, cum ar fi un telefon celular, un cuptor cu microunde sau un panou de afișaj pentru aparate auto. Numele "microcontroler" este adesea utilizat în referirea la aceste dispozitive, pentru a le distinge de microprocesoarele utilizate în computerele personale. Așa cum se arată în (a), aproximativ 38% dintre proiectanții încorporați au început deja să utilizeze DSP, iar alți 49% au în vedere schimbarea. Capacitatea ridicată și puterea computațională a DSP-urilor le face adesea o alegere ideală pentru modelele încorporate.

Figura 28-8 Trenduri majore în DSR-uri.

După cum este ilustrat în (a), în jur de 38% din proiectanții încorporați au mutat deja de la microprocesoare convenționale la DSP-uri, și alți 49% iau în considerare schimbarea. În (b), aproape de două ori mai mulți ingineri utilizează DSP cu virgula fixă decât utilizează virgula mobilă. Aceasta este în principal comandată de producția de consum care trebuie să aibă electronice de cost redus, precum telefoanele celulare. Totuși, cum se arată în (c), virgula mobilă este segmentul cel mai rapid crescător; peste jumătate din ingineri utilizează curent dispozitive pe 16 biți plănuind să migreze la DSP cu virgulă mobilă.

Așa cum este ilustrat în (b), aproximativ două ori mai mulți ingineri folosesc în prezent DSP în virgulă fixă decât în virgulă mobilă. Dar, depinde foarte mult de aplicație. Virgula fixă este mai populară în produsele de consum competitive, unde costul electronicii trebuie să fie foarte scăzut. Un bun exemplu este telefonul celular. Când sunteți în competiție pentru a vinde milioane de produse, o diferență de cost de doar câțiva dolari poate fi diferența dintre succes și eșec. În comparație, virgula mobilă este mai frecventă atunci când este nevoie de o performanță mai mare și costul nu este important. Pentru exemplu, presupuneți că proiectați un sistem medical de imagistică, un fel de scaner tomografic computerizat. Numai câteva sute de modele vor fi vândute vreodată, la un preț de câteva sute de mii de dolari fiecare. Pentru această aplicație, costul DSP este nesemnificativ, dar performanța este critică. În ciuda numărului mai mare de DSP-uri cu virgulă fixă utilizate, piața virgulei mobile este segmentul cu cea mai rapidă creștere. Așa cum se arată în (c), peste jumătate din inginerii care utilizează dispozitive pe 16 biți intenționează să migreze la virgulă mobilă la un moment dat în viitorul apropiat.

Înainte de a părăsi acest subiect, ar trebui să reamintim că virgula mobilă și virgula fixă folosesc uzual 32 biți și 16 biți, respectiv, dar nu întotdeauna. De exemplu, familia SHARC poate reprezenta numere în virgulă fixă pe 32 de biți, un mod care este comun în aplicațiile audio digitale. Acest lucru face ca cele 232 nivele de cuantizare distanțate uniform într-o gamă relativ mică, să zicem, între -1 și 1. Prin comparație, notația în virgulă mobilă plasează 232 nivele de cuantizare logaritmic pe o gamă foarte mare, tipic ± 3,4 x 1038. Acest lucru oferă o precizie mai bună virgulei fixe pe 32 biți , adică eroarea de cuantizare a oricărui eșantion va fi mai mică. Dar, virgula mobilă pe 32 de biți are o gamă dinamică mai mare, ceea ce înseamnă că există o diferență mai mare între numărul cel mai mare și cel mai mic număr care poate fi reprezentat.

Secțiunea următoare: C versus Asamblare