Fixpontos és lebegőpontos DSP Számrendszerek Ha megnézünk egy DSP kinálatot, akkor észrevehetjük, hogy két nagy család van az ajánlatban, az ismert adattipus függvényében. Van fixpontos és lebegőpontos DSP. Ahhoz, hogy megértsük mi a külömbség a kettő között nézzük át a használt adattipusokat egy mikrórendszerben. A legismertebb adattipusok a decimális, a bináris és a hexadecimális számok.a mikrórendszerekben csak bitszinten lehet tárolni az adatokat, ezért a bináris és a hexadecimális szám a legismertebb. A fenti táblázatban összefoglalva a három számrendszer látható, a hexadecimális számrendszernek az előnye a kompakt ábrázolása a nagy számoknak. Amint a fenti példán látható a 26-ot binárisan minimum 5 digiten ábrázolhatjuk míg hexában két digiten. Az átalakítás hexa és bináris számrendszerek között nagyon egyszerű, mert minden hexa digitnek pontosan négy bit felel meg. Mikrórendszereknél a hexa számot 0x-előtaggal, vagy a h-utótaggal jelőljük(0x1a vagy 1Ah)
Előjeles számok ábrázolása Az előjel ábrázolására a legkézenfekvőbb eljárás az előjelnek megfeleltetni egy bitet, például az MSB bitet. Ha az MSB bit 1 akkor negatív számunk van, ha az MSB bit zéró akkor pozitív számunk van. Ez nem előnyös egy mikróprocesszornak, mert az előjelbitet kell figyelje és ennek függvényében vagy összeadást vagy kivonást kell végezzen. Egy sokkal jobb ábrázolás a kettes komplemens. A kettes komplemens számrendszerben az MSB-bit a neki megfelelő decimális számnak az előjeles ábrázolása (például 8 bites 2-es komplemens számnál a 7. bit ha 1-es akkor az 128-at jelent.), a többi száma a biteknek megfelelő pozitív decimális szám. Amint a fenti táblázatból is látszik nagyon könnyű kiszámítani a 2-es komplemensét egy számnak, éspedig minden bitjét megfordítjuk és hozzáadunk 1- et a számhoz. Ezt hardware úton könnyű elvégezni. Legnagyobb pozitív +1 * 2 7-1 = +127 >> 0111 1111b >> 0 +64+32+16+8+4+2+1 Legkisebb negatív 1 * 2 7 = 128 >> 1000 0000b >> 128 +0 A 16 bites processzornál: Legnagyobb pozitív +1 * 2 15-1 = +32767 Legkisebb negatív 1 * 2 15 = 32768 32 bites processzornál, mint a TMS320C31 Legnagyobb pozitív +1 * 2 31 1 = +2147483647 Legkisebb negatív 1 * 2 31 = 2147483648
Fixpontos számábrázolás A tizedes pontok ábrázolására szükség van mikróprocesszoros rendszerekben, mert nem csak egész számokkal dolgozunk. Sokan megszokták az egészszámos műveleteket, de nagyon nagy odafigyelést igényel, hogy helyesen használjuk, ne legyen tulcsordulás. Például egy 16 bites egész számnak a dinamikus tartománya 32767 és 32768. Ebben a tartományban elvégzett műveletek hamar tulcsordulnak, főleg a szórzás. Ezért a fixpontos számábrázolás csak törtrészekkel dolgozik, ezzek megakadályozva a szorzás tulcsordulást. Tulajdonságok: A számok 1 és 1 között vannak A tízedes pont fix helyen van(0.25, 0.135, stb.) Nincs túlcsordulás szorzás esetén Lehet túlcsordulás összeadás esetén Miért hasznos a fixpontos számábrázolás? A digitális jelfeldolgozás sok szorzást igényel Megakadályozza a szorzás túlcsordulást Olcsó A legismertebb fixpontos számábrázolás a Q15 vagy a Q31. A Q a quantity szóból jön és a tízedesszámok ábrázolásához használt bitek számát jelöli. Tehát a Q15 a 16 bites processzoroknál használt 1 és 1 közötti számok ábrázolására, a Q31 pedig a 32 bits processzoroknál. A Q ábrázolás is kettes komplemens ábrázolás. Amint a meghatározásból látszik egy skalálással egyszerűen átalakítható egy egészszám Q15-ös formába, ez a szám 32767. A fixpontos Q műveletek: Összeadás a két törtszámot átalakítjuk decimálissá, összeadjuk majd az eredményt visszaskaláljuk törtszámmá Kivonás hasonlóan Szorzás ugyancsak a tízedesszámokkal végezzük, mindig arra kell vigyázni, hogy visszaskaláljuk az eredményt. Tehát a fixpontos Q15 formátum megvéd a túlcsordulástól szorzás esetén, összeadás esetén nem, ezét a programozó kell figyeljen az adatokra.
Q15 műveletek: Lebegőpontos ábrázolás A lebegőpontos ábrázolás nagyon leegyszerüsíti a programozó feladatát, nagy dinamikát biztosít a szémoknak, ezáltal nem kell figyelni olyan nagyon a túlcsordulásokra. A legelterjedtebb lebegőpontos ábrázolás az IEEE-754: Mantissa a tízedestész Exponent az egészrész kitevője, kető az adott hatványon Sign előjelbit Létezik más lebegőpontos ábrázolás is, mint például a TI lebegőpontos számrendszere, a különbség csak az előjelbit helyénél van.
Texas Instruments lebegőpontos 32 bites számrendszer: A fenti egyenletekből látszik, hogy az átalakítás hogyan történik. Érdekes megfigyelni, hogy a bináris zéró lebegőpontos ábrázolásban 1.0, de akkor hogyan ábrázoljuk a 0-t?
A zéró minden olyan szám, aminek a kitevője 128, tehát: 0x80000000 0x80123456 0x80876345 mind zérónak értelmezzük. Negatív lebegőpontos számok, műveletek: Tehát az eddig ismertetett számrendszerek tulajdonságai: Amint látjuk a táblázatból a lebegőpontos ábrázolás biztosítja legnagyobb dinamikus tartományt a számnak. Azon DSP-k amelyek kezelik a lebegőpontos számokat lebegőpontos DSP-k, amelyek a fixpontos számokat azok fixpontos DSP-k. Ma már nem olyan nagy az árkülömbség a két DSP tipus között, ezért a lebegőpontos DSP-k elterjedése a tendencia.