Procesory sygnałowe 2

background image

Procesory sygnałowe

Wykład 2

Liczby stało- i zmienno-

przecinkowe

Dr inż. Robert
Wielgat

background image

Reprezentacja liczb w formacie znak-

moduł oraz w kodzie U2

a

0

a

1

a

2

a

3

a

4

a

5

a

6

a

7

0

0

1

1

0

1

0

1

1) Format znak-moduł.

x = -1

a7 .

(a

6

.

2

6

+ a

5

.

2

5

+ a

4

.

2

4

+ a

3

.

2

3

+ a

2

.

2

2

+

a

1

.

2

1

+ a

0

.

2

0

)

x = -1

1 .

(32 + 8 + 4) = -44

a

0

a

1

a

2

a

3

a

4

a

5

a

6

a

7

0

0

1

1

0

1

0

1

1) Kod uzupełnień do dwóch (kod U2).

x = - a

7

.

2

7

+ a

6

.

2

6

+ a

5

.

2

5

+ a

4

.

2

4

+ a

3

.

2

3

+ a

2

.

2

2

+

a

1

.

2

1

+ a

0

.

2

0

x = -1

.

128 + 32 + 8 + 4 = -128 + 44 = -84

background image

Procesory stało i

zmiennoprzecinkowe

Procesory sygnałowe dzielą się na stało- i
zmiennoprzecinkowe. Za pomocą liczb
stało i zmiennoprzecinkowych są
reprezentowane liczby rzeczywiste.

Procesory zmiennoprzecinkowe

operują

na liczbach zmiennoprzecinkowych,
dopuszczają większy zakres dynamiki
sygnału - nie wymagają skalowania
wyników obliczeń, zmniejszają ryzyko
przepełnienia.

Procesory stałoprzecinkowe

operują na

liczbach stałoprzecinkowych, są szybsze
w działaniu i tańsze.

background image

Liczby stałoprzecinkowe

Liczba stałoprzecinkowa 16-bitowa w
kodzie U2

a

7

a

6

a

5

a

4

a

3

a

2

a

1

a

0

a

-1

a

-2

a

-3

a

-4

a

-5

a

-6

a

-7

a

-8

7 bitów części
całkowitej

8 bitów części
ułamkowej

Bit znaku:

0 „+”

lub

1

„-”

1

0

0

1

1

1

0

0

1

0

0

1

1

0

0

1

6

8

7

7

2

2

i

i

i

a

a

x

x = -1*2

7

+1*2

4

+1*2

3

+1*2

2

+1*2

-1

+1*2

-4

+1*2

-

5

+1*2

-8

x = -128 +16

+8

+4

+0,5

+0,06
25

+ 2

-5

+ 2

-8

x = - 99 ,
40234375

background image

Zakres liczb stałoprzecinkowych

w kodzie U2

N bitów części
całkowitej

M bitów części
ułamkowej

Bit znaku:

0 „+”

lub

1

„-”

1

2

2

N

M

i

i

i

N

N

a

a

x

2

N

-

1

Przykładowo, jeżeli N = 7, a M = 8, wówczas zakres
wartości liczb stałopozycyjnych w kodzie U2 będzie
następujący:
(

-128

;

127,99609375

)

-2

N

,

+ 1 - 2

-M

)

Zakres liczb:
(

(

-2

N

,

2

N

- 2

-M

)

background image

Zamiana liczby dziesiętnej na liczbę

stałoprzecinkową w kodzie U2

1) Sprawdzamy czy zamieniana liczba mieści się w

zakresie liczb stałoprzecinkowych.

-2

N

< L <

2

N

– 2

- M

?

-128

< -103,279 <

127,99609375

- prawda

Przykład:

Zamiana liczby L = –103,279 na liczbę stałoprzecinkową z N
= 7 bitami części całkowitej i M = 8 bitami części
ułamkowej

2) Do liczby dziesiętnej dodajemy wartość a

N

.

2

N

L’ = L + a

N

.

2

N

=

-103,279 +128 = 24,721

3) Zamieniamy część całkowitą i część ułamkową liczby L’

na postać binarną

background image

Zamiana liczby dziesiętnej na liczbę

stałoprzecinkową w kodzie U2 (c.d.)

3.a) Zamiana części

całkowitej na postać
binarną

a

7

a

6

a

5

a

4

a

3

a

2

a

1

a

0

a

-1

a

-2

a

-3

a

-4

a

-5

a

-6

a

-7

a

-8

24 : 2 = 12

reszty 0

12 : 2 = 6

reszty 0

6 : 2 = 3 reszty

0

3 : 2 = 1

reszty

1

1 : 2 = 0 reszty

1

0

1

1

0

0

3.b) Zamiana części

ułamkowej na postać
binarną

0,288 x 2 = 0,576

-> 0

0

0,768 x 2 = 1,536

-> 1

1

0,536 x 2 = 1,072

-> 1

1

0,072 x 2 = 0,144

-> 0

0

0,442 x 2 = 0,884

-> 0

0

0,884 x 2 = 1,768

-> 1

1

0,144 x 2 = 0,288

-> 0

0

0,721 x 2 = 1,442
-> 1

1

4) Dopisanie bitu znaku a

7

co jest równoważne dodaniu -

a

7

.

2

7

= -128

1

0

0

dopisanie

zer

24,72

1

background image

Sprawdzenie zamiany liczby

a

7

a

6

a

5

a

4

a

3

a

2

a

1

a

0

a

-1

a

-2

a

-3

a

-4

a

-5

a

-6

a

-7

a

-8

Zamieniana liczba dziesiętna:

-103,279

Otrzymana liczba

stałoprzecinkowa

0

1

1

0

0

0

1

1

0

0

1

0

1

1

0

0

x = -1*2

7

+1*2

4

+1*2

3

+1*2

-

1

+1*2

-3

+1*2

-4

+1*2

-

5

x = -128 +16 +8 +0,5

+0,12
5

+0,062
5

+0,0312
5

Otrzymana wartość dziesiętna liczby stałoprzecinkowej :

-103,28125

-103,28125 JEST RÓŻNE OD

103,279

background image

Liczby zmiennoprzecinkowe

Za pomocą liczb stałoprzecinkowych można reprezentować

liczby z precyzją

2

–M

, Gdzie M – liczba bitów części

ułamkowej liczby.

Precyzja liczby stałoprzecinkowej jest równocześnie

wartością bezwzględną maksymalnego błędu
bezwzględnego jaki można popełnić reprezentując
liczby dziesiętne. Wartość maksymalnego błędu
względnego rośnie w miarę zmniejszania się wartości
dziesiętnej reprezentowanej liczby.

Przykład:

Przy zamianie liczby

-103,279

na liczbę

stałoprzecinkową o 8 bitach części ułamkowej
popełniono błąd względny o wartości

-0,0000218 %

. Natomiast chcąc zaprezentować liczbę:

0,00000000000000000000000000091095

za pomocą

liczby stałoprzecinkowej o tym samym formacie
popełnionoby błąd względny o wartości

-100 %

!

Zakres wartości liczb stałoprzecinkowych jest bardzo

ograniczony. Zachodzi zatem potrzeba wprowadzenia
bardziej doskonałej reprezentacji liczb. Taką
reprezentacją jest zapis zmiennoprzecinkowy.

background image

Zapis zmiennoprzecinkowy

Liczba zapisana w systemie zmiennoprzecinkowym
składa się z dwóch części: liczby stałoprzecinkowej

m

,

której wartość bezwzględna jest mniejsza od wartości
podstawy systemu pozycyjnego

p

oraz z podstawy

podniesionej do pewnej potęgi zwanej wykładnikiem
lub cechą

e

. Wartość liczby jest równa iloczynowi

części stałoprzecinkowej i wykładniczej.

w = m

x

p

e

,  m -

mantysa

, p -

podstawa systemu (np.

10)

, e -

wykładnik potęgowy (exponenta)

Przykłady zapisu zmiennoprzecinkowego:

158900000 = 0,1589 x 10

9

0,000034 = 0,34 x 10

-4

background image

Zamiana zapisu stałoprzecinkowego

na zmiennoprzecinkowy

1) Liczba stałoprzecinkowa ma moduł większy lub
równy 1 oraz posiada

n

cyfr części całkowitej. Wtedy

przecinek w zapisie zmiennoprzecinkowym należy
przesunąć o

n

pozycji w lewo. Wykładnik potęgowy jest

równy

n

196,44 = 0,19644 x 10

3

, n = 3

2) Liczba stałoprzecinkowa ma moduł mniejszy od
jedności. Jeżeli

n

oznacza liczbę zer po przecinku do

pierwszej cyfry znaczącej, wówczas należy przesunąć
przecinek o

n

pozycji w prawo. Wykładnik potęgowy

jest równy

-n

:

0,0000302 = 0,302 x 10

-4

, n = 4

background image

Reprezentacje liczb

stałoprzecinkowych na

procesorze ADSP-21065L

Liczby stałoprzecinkowe ze znakiem są
reprezentowane na procesorze ADSP-21065L w kodzie
uzupełnień do dwóch.

31

30

29

1

0

-

2

31

2

3

0

2

2

9

. . .

2

1

2

0

.

Liczba naturalna ze
znakiem

Zna
k

Punkt

binarn

y

31

30

29

1

0

-
2

0

.

2

-

1

2

-

2

. . .

2

-

30

2

-

31

Liczba ułamkowa ze
znakiem

Zna
k

Punkt

binarny

background image

Reprezentacje liczb

stałoprzecinkowych na procesorze

ADSP-21065L

Liczby stałoprzecinkowe bez znaku są

reprezentowane na procesorze ADSP-21065L w

naturalnym kodzie binarnym.

31

30

29

1

0

2

3

1

2

3

0

2

2

9

. . .

2

1

2

0

.

Liczba naturalna bez
znaku

Punkt

binarny

31

30

29

1

0

.2

-

1

2

-

2

2

-

3

. . .

2

-

31

2

-

32

Liczba ułamkowa bez znaku

Punkt

binarny

background image

Reprezentacje liczb

zmiennoprzecinkowych na procesorze

ADSP-21065L

Liczby zmiennoprzecinkowe są reprezentowane na
procesorze ADSP-21065L w formacie znak-moduł.

background image

Reprezentacje liczb

zmiennoprzecinkowych na procesorze

ADSP-21065L

Liczby zmiennoprzecinkowe są reprezentowane na
procesorze ADSP-21065L w formacie znak-moduł.

background image

Wartości liczb zmiennoprzecinkowych

pojedynczej precyzji

1) +

,

f

22

f

0

= 0,

e=255,

s=0,

2) -

,

f

22

f

0

= 0,

e=255,

s=1,

3) NaN (Not a Number), f

22

f

0

0,

e=255,

s={0,1},

4) (-1)

S

(1.f

22-0

)2

e-127

,

f

22

f

0

- dowolne,

1

e

254,

s={0,1},

5) Zero,

f

22

f

0

= 0,

e=0,

s ={0,1},

Uwagi:

Za pomocą wartości NaN są reprezentowane: flagi
sterujące przepływem danych, nie zainicjalizowane
wartości zmiennych, wyniki niedozwolonych operacji (np.
0 *

),

Zero może mieć wartość ujemną –2

-127

lub dodatnią 2

-127

,

wartość zero równa dokładnie 0 nie istnieje na procesorze
ADSP-21065L,

„Normalne” liczby zmiennoprzecinkowe zawierają się w
zakresie

[

-(2 - 2

-23

)2

127

;

(2 - 2

-23

)2

127

]

(w przybliżeniu [

-3,4

.

10

38

;

3,4

.

10

38

] )

background image

Tryby zaokrąglania liczb

W procesorze ADSP-21065L zaimplementowano dwa

tryby zaokrąglania liczb:

1) Zaokrąglanie w kierunku zera (ang. Toward-Zero).

Jeżeli procesor nie może przedstawić wyniku operacji
w docelowym formacie, wówczas zaokrągla liczbę do
liczby najbliższej zeru.
Przykładowo, jeżeli mamy format liczb 1.3 tzn. jedna
cyfra całkowita oraz trzy ułamkowe, to procesor
zaokrągli liczbę

1.3456

do wartości

1.345

, a liczbę

1,6671

do wartości

–1,667

.

2) Zaokrąglanie w kierunku najbliższego (ang. Toward-

Nearest). Jeżeli procesor nie może przedstawić
wyniku operacji w docelowym formacie, wówczas
zaokrągla liczbę do liczby najbliższej.
Przykładowo, jeżeli mamy format liczb 1.3 tzn. jedna
cyfra całkowita oraz trzy ułamkowe, to procesor
zaokrągli liczbę

1.3456

do wartości

1.346

, a liczbę

1,6671

do wartości

–1,667

.

background image

Niedokładności numeryczne

1. Dodawanie liczb różnej skali

1.00E0 + 3.00E-3 + 3.00E-3 + 4.00E-3

= ?

1.00E0 + 3.00E-3 = 1.00E0 + 0.003E0 = 1.003E0 po

zaokrągleniu

1.00E0

1.00E0 + 3.00E-3 = 1.00E0 + 0.003E0 = 1.003E0 po

zaokrągleniu

1.00E0

1.00E0 + 4.00E-3 = 1.00E0 + 0.004E0 = 1.004E0 po

zaokrągleniu

1.00E0

3.00E-3 + 3.00E-3 =

6.00E-3

6.00E-3 + 4.00E-3 = 10.00E-3 po

normalizacji

1.00E-2

1.00E0 + 1.00E-2 = 1.00E0 + 0.01E0

=

1.01E0

Wniosek: kolejność obliczeń może wpływać na

dokładność wyniku

background image

Niedokładności numeryczne

2. Kolejność obliczeń

Mnożenie i dzielenie powoduje mniejsze niedokładności

niż dodawanie i odejmowanie, dlatego w pierwszej
kolejności powinno wykonywać się dzielenie i
mnożenie, a w dalszej dodawanie i odejmowanie

3. Fałszywa precyzja

1.02E0 - 1.01E0 =

0.01E0

Dokładność względna otrzymanego wyniku może być

mniejsza niż wynika to z liczby cyfr znaczących (bitów)

4. Porównywanie liczb

Porównywanie liczb odbywa się zawsze z założoną precyzją

np. równą EPS=10E-4, dlatego niekiedy może się
okazać, że liczby, które z matematycznego punktu
widzenia są różne, zostaną uznane przez procesor
sygnałowy jako identyczne.

background image

Operacje zmiennoprzecinkowe

dotyczące formatu liczb na ADSP

21065L

Fn=RND Fx

Operacja zaokrągla zmiennoprzecinkowy operand w rejestrze Fx
do zakresu 32 bitów.

Fn = SCALB Fx BY Ry

Skaluje wykładnik operandu w rejestrze Fx poprzez dodanie do
niego stałoprzecinkowej liczby w kodzie uzupełnień do dwóch z
rejestru Ry.

Rn = MANT Fx

Operacja zwraca mantysę (część ułamkową z jawnym bitem
ukrytym z pominięciem bitu znaku zmiennoprzecinkowego
operandu w Fx. Mantysa jest zapisywana w formacie 1.31 w
stałoprzecinkowym polu w rejestrze Rn

Rn = LOGB Fx

Przekształca wykładnik zmiennoprzecinkowego operandu w Fx
w stałoprzecinkową liczbę bez znaku w kodzie uzupełnień do
dwóch.

background image

Konwersja typów liczb

Rn = FIX Fx

Rn = TRUNC Fx

Operacja przekształca zmiennoprzecinkowy operand z rejestru Fx
na 32-bitową liczbę całkowitą w kodzie uzupełnień do dwóch.

Rn = FIX Fx BY Ry

Rn = TRUNC Fx BY Ry

W powyższych operacjach przed konwersją do wykładnika potęgi
operandu w rejestrze Fx jest dodawany całkowity stałoprzecinkowy
czynnik skalujący w kodzie uzupełnień do dwóch zapisany w Ry.
Wynik operacji jest zapisywany w stałoprzecinkowym polu rejestru
Rn w formacie 32.0

Fn = FLOAT Rx

Operacja przekształca stałoprzecinkowy operand z rejestru Rx na
liczbę zmiennoprzecinkową.

background image

Konwersja typów liczb

W powyższej operacji przed konwersją do wykładnika potęgi
operandu w rejestrze Rx jest dodawany całkowity
stałoprzecinkowy czynnik skalujący w kodzie uzupełnień do
dwóch zapisany w Ry.

Fn = FLOAT Rx BY Ry

Kopiowanie znaku liczby

Fn = Fx COPYSIGN Fy

Operacja kopiuje znak zmiennoprzecinkowego operandu z Fy do
operandu Fx nie zmieniając jego mantysy i wykładnika. Rezultat
jest zapisywany do rejestru Fn.

background image

operacje dotyczące

stałoprzecinkowego formatu liczb

Rn = EXP Rx (EX)

Rozkaz oblicza exponentę (wykładnik) stałoprzecinkowego
operandu zawartego w rejestrze Rx.

Rn = LEFTZ Rx

Rozkaz oblicza liczbę wiodących zer stałoprzecinkowego
argumentu zawartego w rejestrze Rx.

Rn = LEFTO Rx

Rozkaz oblicza liczbę wiodących jedynek stałoprzecinkowego
argumentu zawartego w rejestrze Rx. Wynik jest umieszczany w
polu bit6 w rejestrze Rn (bity od 8 do 13).

background image

Konwersja formatów danych

Rn = FPACK Fx

Rozkaz konwertuje wartość w rejestrze Fx z 32-bitowego formatu
zmiennoprzecinkowe-go IEEE 754 do formatu zmiennoprzecinkowego o
precyzji 16-bitowej. Wynik jest umieszczany na szesnastu młodszych bitach
rejestru Rn. Format krótki posiada 11-bitową mantysę, 4-bitową eksponentę
oraz bit znaku. Gdy konwertowana wartość powoduje niedomiar, eksponenta
jest ustawiana na zero (0), a mantysa (zawierająca ukryty bit) jest
przesuwana w prawo o odpowiednią liczbę pozycji. Spakowana liczba 16-
bitowa jest w tym przypadku zdenormalizowana. Bit znaku nie zmienia się.

Warunek

Opis

exp > 135

Wartość maksymalna

120 < exp ≤

135

Eksponenta docelowa składa się z najstarszego bitu

eksponenty źródłowej połączonego z trzema

najmłodszymi bitami eksponenty źródłowej. Spakowana

mantysa jest zaokrąglana do 11 bitów mantysy

źródłowej.

109 < exp ≤

120

Eksponenta docelowa jest równa zero. Mantysa (wraz z

ukrytym bitem) jest przesuwana w prawo o odpowiednią

liczbę pozycji i zaokrąglana do 11-bitów

exp ≤ 109

Format spakowany zawiera same zera.

Exp – spolaryzowana eksponenta argumentu źródłowego.

background image

Konwersja formatów danych

Fn = FUNPACK Rx

Rozkaz konwertuje wartość w rejestrze Rn z 16-bitowego spakowanego
formatu zmiennoprzecinkowego do formatu 32-bitowego IEEE 754. Wynik
jest zapisywany do rejestru Fn.

Warunek

Opis

0 < exp ≤ 15

Rozpakowana eksponenta składa się z trzech

najmłodszych bitów eksponenty źródłowej rozszerzonej o

jej najstarszy bit. Rozpakowana mantysa jest mantysą

źródłową uzupełnioną zerami z prawej strony.

exp = 0

Wartość rozpakowanej eksponenty wynosi (120-N), gdzie

N jest liczbą wiodących zer w źródłowej mantysie.
Rozpakowana mantysa jest przesuniętą w lewo

(unormowaną) mantysą źródłową, uzupełnioną

odpowiednią liczbą zer z prawej strony. Ukryty bit jest

usuwany.

Exp – spolaryzowana eksponenta argumentu
źródłowego.

Bit znaku pozostaje niezmieniony we wszystkich
przypadkach.

background image

Literatura

1. Analog Devices, ADSP-21065L SHARC

®

DSP. User’s

Manual, USA, 2003. str. 54 - 58

Dokumentację można pobrać ze strony

http://

www.analog.com

2. Jacek Augustyn, „Asemblery μC51, ADSP-21065L

SHARC”, Wydawnictwa Naukowo-Dydaktyczne PWSZ
w Tarnowie, Wyd. IGSMiE PAN, Kraków 2006, str. 13
- 36


Document Outline


Wyszukiwarka

Podobne podstrony:
Lab4 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
lab9 procesory sygnalowe, LABORATORIUM
6 Procesy i sygnaly
16 procesory sygnalowe ADSP21
Procesory sygnałowe 1
Procesory sygnałowe 2
Procesory sygnałowe 6
Procesory sygnałowe 4
Lab1 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Lab5 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Procesory sygnałowe 3
Sitek-wykłady, Komunikacja między procesami, Komunikacja między procesami: sygnały
ele4 z2, 7 semestr, Procesory Sygnałowe, Laboratoria
Instrukcja PS1, 7 semestr, Procesory Sygnałowe, Laboratoria
Procesory sygnałowe 3
Ćwiczenie 18 & 19 Procesory Sygnalowe
Procesory sygnałowe 7
Lab2 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania
Lab3 Procesory sygnałowe sprawozdanie PWR, PWr, sprawozdania

więcej podobnych podstron