Sunday 3 December 2017

Opcje reprezentacji stałej punkt binarne


3.7.Binary Fixed Point Binarny system punktów stałych stanowi kolejny przykład arabskiego systemu liczbowego. Jedyne rozróżnienie od dziesiętnych to radix. Binarny używa promienia 2 zamiast 10. Określamy podstawę (podstawę) przy użyciu indeksu dolnego na tej liczbie. Od teraz nie zakładamy podstawy 10. 1001.101 2 1 2 3 0 2 2 2 2 1 1 2 0 1 2 -1 0 2 -2 1 2 -3 Łatwy sposób odczytywania binarnego jest działaniem lewym bezpośrednio z punktu binarnego, podwajając lub zmniejszając o połowę wartość cyfr na każdym kroku: Cyfry stosowane w dowolnym arabskim systemie zawsze wahają się od 0 do radix-1. Użycie większych cyfr umożliwiłoby przedstawienie wartości w więcej niż jednym kierunku. Na przykład jeśli binarny punkt stały umożliwił użycie cyfry 2, to numer drugi mógłby być reprezentowany jako 2 lub 10. 3.7.1.Limitations of Binary Convert 110 to binary. Nie można zrobić: jak próbować przedstawić 13 w formacie dziesiętnym. Wymaga nieskończonej liczby cyfr. Jest to problem dla obliczeń monetarnych. Rozwiązania (BCD, centy) Numery punktów zmiennoprzecinkowych Numery punktów stałych są prostym i łatwym sposobem wyrażania liczb ułamkowych, przy użyciu stałej liczby bitów. Systemy bez obsługują sprzętowe punkty zmiennoprzecinkowe często używają liczb punktów stałych do reprezentowania liczb ułamkowych. (Systemy bez obsługi urządzeń typu floating-point obejmują szeroki zakres sprzętu - od wysokiej klasy stałych punktów DSP, FPGA i kosztownych, niestandardowych ASIC, które przetwarzają strumieniowe media szybciej niż jakakolwiek jednostka pływająca, jaką kiedykolwiek zbudowano na bardzo niskich mikrokontrolerach ). Termin "Punkt stały" odnosi się do pozycji punktu binarnego. Punkt binarny jest analogiczny do dziesiętnego dziesiętnego numeru dziesiętnego, ale ponieważ jest to binarny, a nie dziesiętny, używany jest inny termin. W binarnych bitach może być 0 lub 1, a nie ma oddzielnego symbolu, który ma określać miejsce, w którym leży punkt binarny. Wyobrażamy sobie jednak, czy założymy, że punkt binarny znajduje się w stałej lokalizacji pomiędzy wskazanymi bitami w liczbie. Na przykład w numerze 32-bitowym możemy założyć, że punkt binarny istnieje bezpośrednio między bitami 15 (15, ponieważ pierwszy bit jest numerowany 0, a nie 1) i 16, dając 16 bitów dla całej części liczbowej i 16 bitów dla część ułamkową. Zauważ, że najbardziej znaczący bit w polu liczb całkowitych jest ogólnie oznaczony jako znak bitowy pozostawiający 15 bitów dla całej wielkości liczb. Szerokość i dokładna edycja Szerokość numeru punktu stałego to całkowita liczba bitów przeznaczonych do przechowywania numeru punktu stałego. Jeśli przechowujemy całą część i część ułamkową w różnych miejscach przechowywania, szerokość to całkowita ilość miejsca na liczbę. Zakres liczby punktów stałych jest różnicą między minimalną liczbą możliwą a możliwą do uzyskania maksymalną liczbą. Dokładność numeru punktu stałego stanowi całkowitą liczbę bitów dla ułamkowej części liczby. Ponieważ możemy określić miejsce, w którym chcemy mieć ustalony punkt binarny, dokładność może wynosić dowolną liczbę do i włączając szerokość numeru. Zauważmy jednak, że im dokładniej mamy, tym mniejszy zakres mamy. Istnieje szereg standardów, ale w tej książce będziemy używać n dla szerokości liczby punktów stałych, p dla dokładności i R dla całego zakresu. Nie wszystkie liczby mogą być reprezentowane dokładnie za pomocą numeru stałej, a więc najbliższa przybliżona. Formuła obliczania reprezentacji całkowitej (X) w formacie Qm. n liczby zmiennoprzecinkowej (x) to: Aby ją konwertować, używana jest następująca formuła: Niektóre przykłady w formacie Q3.4: Losowo wybrane pływaki: niektóre przykłady (bardzo często) format 1 Q7.8: Ponieważ pozycja punktu binarnego jest całkowicie koncepcyjna, logika dodawania i odejmowania stałych punktów jest identyczna z logiką wymaganą do dodawania i odejmowania liczb całkowitych. Tak więc, dodając jedną połowę plus jedną czwartą w formacie Q3.4, spodziewamy się zobaczyć: Która jest taka sama, jak się spodziewamy. Dotyczy to również odejmowania. Innymi słowy, gdy dodamy lub odejmujemy numery punktów stałych, punkt binarny w sumie (lub różnicy) będzie znajdował się dokładnie w tym samym miejscu, co w dwóch numerach, na których działamy. W przypadku pomnożenia dwóch 8-bitowych liczb stałych punktów będziemy potrzebować 16 bitów, aby trzymać produkt. Oczywiście, ponieważ w wyniku jest inna liczba bitów w porównaniu do wejść, należy oczekiwać, że punkt binarny będzie się poruszał. Działa jednak dokładnie tak samo w binarnie, jak w dziesiętnym. Gdy pomnożymy dwie liczby w liczbie dziesiętnej, położenie punktu dziesiętnego to N cyfr po lewej stronie cyfry prawej z prawej strony, gdzie N jest sumą liczby cyfr umieszczonych po prawej stronie kropki dziesiętnej w mnożniku i wielokrotności . Zatem dziesiętny po pomnożeniu 0,2 razy 0,02 otrzymamy: Mnożnik posiada jedną cyfrę po prawej stronie punktu dziesiętnego, a multiplikand ma dwie cyfry po prawej stronie punktu dziesiętnego. W ten sposób produkt ma trzy cyfry po prawej stronie przecinka dziesiętnego (co oznacza, że ​​przecinek dziesiętny znajduje się trzy cyfry po lewej). Działa to samo w binarnie. Z powyższego przykładu dodania wiemy, że liczba o połowę w formacie Q3.4 jest równa 0x8 w szesnastkowych. Ponieważ 0x8 razy 0x8 w heksie jest równe 0x0040 (również w heksie), wynik z punktu stacjonarnego może wynosić 0x0040 - tak długo, jak wiemy, gdzie znajduje się punkt binarny. Pozwala zapisać produkt w formacie binarnym: ponieważ zarówno mnożnik, jak i multiplikand mają cztery bity na prawo od punktu binarnego, położenie punktu binarnego w produkcie jest o osiem bitów w lewo. Tak więc nasza odpowiedź wynosi 00000000.01000000, czyli, jak się spodziewamy, równą jednej czwartej. Jeśli chcemy, aby format wyjściowy był taki sam jak format wejścia, musimy ograniczyć zakres wejść, aby zapobiec przepełnieniu. Konwersja z Q7.8 z powrotem do Q3.4 to prosta kwestia przesunięcia produktu o 4 bity. Numery stacjonarne są często używane wewnętrznie do filtrów cyfrowych, w tym filtrów FIR i IIR. Istnieje kilka praktycznych rozważań dotyczących implementacji algorytmów FIR i IIR przy użyciu stałych punktów. 2 3 Wiele systemów wbudowanych, które wytwarzają fale sinusoidalne, takie jak generatory DTMF, przechowują tabelę sinusową w pamięci programu. (Używany do przybliżania funkcji matematycznych sinusoidy () i cosinus (). Ponieważ takie systemy często mają bardzo ograniczone ilości pamięci programowej, często w przypadku takich tabel są używane dwa różne sposoby: wartości zapisane w tabelach i tabele służące do indeksowania w tych tabelach. Wartości zapisane w tabeli sinusoidy Edytuj Zwykle jeden kwadrat funkcji sinus i cosinus jest przechowywany w tej tabeli. Zazwyczaj jest to ćwiartka, w której funkcje te generują wartości wyjściowe w zakresie od 0 do 1. Wartości w takich tabelach są zazwyczaj zapisywane jako numery stacjonarne - często 16-bitowe liczby w formacie unsigned Q0.16 lub 8-bitowe liczby w niepodpisane wartości Q0.8. Wydaje się, że istnieją dwa popularne sposoby obsługi faktu, że Q0.16 nie potrafi dokładnie obsługiwać 1.0, obsługuje tylko numery od 0 do (1.0-2-16): (a) Skala dokładnie o dwa (w tym przypadku 216 ), podobnie jak większość innych systemów punktów stałych, i zastępuje (klipy) wartości zbyt duże, aby zachować tę największą wartość, którą można zapisać: tak 0 jest reprezentowane jako 0, 0.5 reprezentowane jako 0x8000, (1,0-2-16) reprezentowane jako 0xFFFF i 1.0 obcięto, a także jako 0xFFFF. 4 (b) Skaluj według największej możliwej wartości (w tym przypadku 0xFFFF), więc zarówno maksymalne, jak i minimalne wartości mogą być reprezentowane dokładnie: tak 0 jest reprezentowane jako 0, (1.0-2-16) reprezentowane jako 0xFFFE, a 1.0 jest reprezentowane dokładnie jako 0xFFFF. 5 Nieliczne osoby rysują dość dokładne koła i obliczają dość dokładny sinus i cosinus z liną Bezier. Stół staje się 8 wartości reprezentujących pojedynczą krzywą Beziera przybliżoną do 18 kół z dokładnością około 4 części na milion lub 14 z okręgu z dokładnością około 1 części na tysiąc. 6 7 Wielu ludzi wolę reprezentować rotację (np. Kąt) w kie - runku obrotu. Całkowita część zakrętów informuje, ile razy nastąpiły całe rewolucje. Ułamkowa część obrotów, pomnożona przez 360 (lub 1 2 8) za pomocą standardowej arytmetyki o stałej wartości, daje prawidłowy kąt w zakresie -180 stopni (- radianów) do 180 stopni (radianów). W niektórych przypadkach dogodne jest użycie mnożenia niepodpisanego (zamiast podpisanego mnożenia) pod kątem binarnym, co daje prawidłowy kąt w zakresie od 0 do 360 stopni (2 radianów). Główną zaletą przechowywania kątów jako frakcji stałej punktu obrotu jest szybkość. Połączenie pewnego kąta pozycjonowania z dodatnim lub ujemnym kątem narastającym, aby uzyskać nową pozycję jest bardzo szybkie, nawet na wolnych 8-bitowych mikrokontrolerach: zajmuje pojedynczą liczbę całkowitą, ignorując przepełnienie. Inne formaty przechowywania kątów wymagają tego samego dodatku, a także specjalnych przypadków, aby obsłużyć krawędzie krawędzi przepełnionego 360 stopni lub poniżej 0 stopni. W porównaniu z kątami przechowywania w formacie kąta binarnego, przechowywanie kąta w dowolnym innym formacie - np. 360 stopni w celu uzyskania pełnej rewolucji lub 2 radianów w celu uzyskania pełnej rewolucji - nieuchronnie powoduje pewne wzory bitów pod kątem poza tym zakresem, wymagające dodatkowych kroków do zakresu - zmniejszyć wartość do żądanego zakresu lub powodować pewne wzorce bitów, które nie są prawidłowe w kącie (NaN) lub obydwa. Używanie formatu kąta binarnego w jednostkach obrotu pozwala nam szybko (używając shift-and-mask, unikając pomnożenia) oddzielenie bitów na: bity, które reprezentują liczby całkowite (ignorowane podczas wyszukiwania sinus kąta, niektóre systemy nigdy nie martwić się o przechowywanie tych bitów w pierwszej kolejności) 2 bity, które reprezentują kwadrantowe bity, które są bezpośrednio wykorzystywane do indeksowania w tabeli wyszukiwania nisko-rzędowych bitów mniej niż jeden krok do tabeli indeksu (bity akumulatorów fazowych, ignorowane podczas wyszukiwania sinusoidy kąta bez interpolacja) Bity w fazie niskiego rzędu zapewniają lepszą rozdzielczość częstotliwości, nawet bez interpolacji. Niektóre systemy używają bitów o niskim rzędzie, aby liniowo interpolować między wartościami w tabeli. 12 Pozwala to uzyskać większą dokładność przy użyciu mniejszego stołu (oszczędność miejsca na program), poświęcając kilka cykli tego dodatkowego interpolacji. Kilka systemów uzyskuje jeszcze większą dokładność przy użyciu jeszcze mniejszego stołu, poświęcając kilka kolejnych cykli, aby używać tych małych bitów do obliczania interpolacji sześciennych. 4 Być może najbardziej popularnym formatem w formacie binarnym jest sztywność. Brads Edit Wiele systemów wbudowanych przechowuje kąt, ułamkową część obrotów, w formacie pojedynczego bitu bajtowego. 13 Istnieje kilka sposobów na interpretację wartości w tym bajcie, z których każdy oznacza (mniej więcej taki sam kąt): kąt w jednostkach brads (binarnych radianów) przechowywany jako 8-bitowa niezerowa liczba całkowita, od 0 do 255 brads a kąt w jednostkach brads przechowywanych jako 8-bitowa liczba całkowita, od -128 do 127 brads kąt w jednostkach obrotów, zapisany jako ułamkowy skręt w formacie bez znaku Q0.8, od 0 do tuż poniżej 1 pełny kąt kąt w jednostkach zwojów, zapisanych w ułamkowym zakręcie w podpisanym formacie Q0.7 (), od -12 do prawie pełnego pełnego obrotu Jedna pełnia 14 to 256 brads 15 to 360 stopni. Jeśli pojedynczy bajt nie daje wystarczającej dokładności, system brad może być łatwo rozszerzony o bardziej ułamkowe bity - 65,536 zliczeń na obrót może być reprezentowanych w 16 bitach. 16 W celu dalszego czytania Edytuj Wprowadzenie do reprezentacji liczby punktów stałych W prawdziwym życiu mamy do czynienia z liczbami rzeczywistymi - liczb z ułamkową częścią. Najbardziej nowoczesny komputer ma natywne (sprzętowe) wsparcie liczb zmiennoprzecinkowych. Jednakże użycie zmiennoprzecinkowego niekoniecznie jest jedynym sposobem reprezentowania liczb ułamkowych. W tym artykule opisano stałą reprezentację liczb rzeczywistych. Używanie typu danych o stałym punkcie jest powszechnie stosowane w przetwarzaniu sygnałów cyfrowych (DSP) i aplikacjach do gier, gdzie wydajność jest czasem ważniejsza niż precyzja. Jak zobaczymy później, arytmetyka punktów stałych jest znacznie szybsza niż arytmetyka zmiennoprzecinkowa. Przypomnijmy, że liczba binarna: oznacza wartość: 1 2 5 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 Jeśli podzielimy liczbę 53 na 2, wiemy, że wynik powinien wynosić 26,5. Jak jednak to reprezentujemy, jeśli mamy tylko reprezentacje całkowite Kluczem do reprezentowania liczb ułamkowych, jak na przykład 26.5, jest pojęcie punktu binarnego. Punkt binarny jest jak punkt dziesiętny w systemie dziesiętnym. Działa jako dzielnik pomiędzy liczbą całkowitą a ułamkową częścią liczby. W systemie dziesiętnym punkt dziesiętny oznacza pozycję w liczniku, że współczynnik powinien zostać pomnożony przez 10 0 1. Na przykład w liczbie 26,5 współczynnik 6 ma ciężar 10 0 1. Ale co się stało z liczbą 5 prawo do przecinka dziesiętnego Z naszych doświadczeń wynika, że ​​ma ona 10-1. Wiemy, że liczba ta wynosiła 5,5 punktu procenta, co odpowiada kwotom szóstym i półokresowi, ponieważ 2 10 1 6 10 0 5 10 -1 26,5 Ta sama koncepcja punktu dziesiętnego może być zastosowana do naszej reprezentacji binarnej, tworząc kwotę binarną. Podobnie jak w systemie dziesiętnym, punkt binarny reprezentuje współczynnik terminu 2 0 1. Wszystkie cyfry (lub bity) po lewej stronie punktu binarnego mają ciężar 2 0 2 1. 2 2. itd. Cyfry (lub bity) po prawej stronie punktu binarnego mają ciężar 2-1. 2 -2. 2 -3. i tak dalej. Na przykład liczba: reprezentuje wartość: teraz, odwołanie w klasie, omawiamy przesunięcie liczby całkowitej w prawo o 1 bitową pozycję jest równoznaczne z dzieleniem liczby przez 2. W przypadku liczby całkowitej, ponieważ nie mamy ułamkowej części , po prostu nie możemy reprezentować cyfry po prawej stronie punktu binarnego, co sprawia, że ​​ten przesunięcie jest częścią całkowitą. Jest to jednak ograniczenie liczby całkowitej reprezentacji liczby binarnej. Ogólnie matematycznie, biorąc pod uwagę stałą pozycję binarną, przesunięcie wzoru bitowego liczby na prawo o 1 bit zawsze dzieli liczbę na 2. Podobnie przesunięcie liczby w lewo o 1 bit zwiększa liczbę o 2. powyższy proces przesuwania jest kluczem do zrozumienia reprezentacji liczby punktów stałych. Aby reprezentować liczbę rzeczywistą na komputerach (lub dowolnym sprzęcie w ogóle), możemy zdefiniować typ liczby punktów stałych, po prostu domyślnie ustalając punkt binarny w pewnej pozycji cyfry. Po prostu będziemy stosować się do tej ukrytej konwencji, gdy reprezentujemy liczby. Aby zdefiniować stały punkt typu koncepcyjnego, potrzebujemy tylko dwóch parametrów: szerokości reprezentacji liczby i pozycji punktu binarnego w liczbie Używamy notacji fixedltw, bgt przez resztę tego artykułu, gdzie w oznacza liczbę bitów jako szerokość (szerokość numeru), a b oznacza pozycję binarnego punktu liczącego od najmniej znaczącego bitu (licząc od 0). Na przykład fixedlt8,3gt oznacza 8-bitową liczbę punktów stałych, z których 3 prawy bity są ułamkowe. Zatem wzorzec bitów: Patrząc na ten stół, możemy łatwo zrozumieć, że możemy przedstawić liczbę -2.5 z wzorem bitowym1011quot, JEŚLI założymy, że punkt binarny znajduje się w pozycji 1. Teraz należy zauważyć, że numery punktów stałych rzeczywiście blisko spokrewniony z reprezentacją liczb całkowitych. Dwa tylko różnią się w miejscu punktu binarnego. W rzeczywistości można nawet uznać całkowitą reprezentację jako przypadek szczególnych przypadków liczb stałych, gdzie punkt binarny znajduje się w pozycji 0. Wszystkie arytmetyczne operacje, które może pracować na liczbie całkowitej, mogą być stosowane również do numeru punktu stałego. Zatem korzyść arytmetyki z punktem stałym jest taka, że ​​są one tak proste i skuteczne jak arytmetyki całkowite w komputerach. Możemy powtórzyć użycie wszystkich elementów zbudowanych w celu obliczenia arytmetycznego całkowitego, aby wykonać arytmetykę liczb rzeczywistych za pomocą reprezentacji stałej. Innymi słowy, arytmetyka punktów stałych jest bezpłatna na komputerach. Wadą ustalonego numeru punktu jest oczywiście utrata zakresu i dokładność w porównaniu z reprezentacją liczb zmiennoprzecinkowych. Na przykład, w reprezentacji o stałej wartości 8,1 gt, nasza część frakcyjna jest tylko dokładna do ilości 0,5. Nie możemy reprezentować numeru, np. 0,75. Możemy reprezentować 0.75 przy stałym litrach8,2gt. ale wtedy tracimy zakres na części całkowitej. C nie ma macierzystego typu quottypequot dla stałego numeru punktu. Jednak ze względu na charakter reprezentacji punktów stałych, po prostu nie potrzebujemy. Przypomnijmy sobie wszystkie arytmetyki o stałych punktach liczbowych są takie same jak liczby całkowite, możemy po prostu użyć ponownie intu typu int w C, aby przeprowadzić arytmetykę punktu stałego. Położenie punktu binarnego ma znaczenie tylko w przypadkach, gdy drukujemy je na ekranie lub wykonujemy arytmetykę z różnymi wartościami typu quottypequot (np. Przy dodawaniu int do fixedlt32,6gt). Stały punkt to prosty, ale bardzo potężny sposób reprezentacji liczb ułamkowych w komputerze. Przez ponowne użycie wszystkich liczb całkowitych obwodów arytmetycznych komputera, arytmetyka punktów stałych jest kolejnością wielkości szybkości niż arytmetyka zmiennoprzecinkowa. Dlatego jest on używany w wielu aplikacjach do gier i aplikacji DSP. Z drugiej strony, brakuje zakresu i dokładności, jaką oferuje liczba reprezentująca liczbę zmiennoprzecinkową. Ty, jako programista lub projektant obwodów, musisz dokonać kompromisu.

No comments:

Post a Comment