Komputery i sieci - podstawy
7. Przetwarzanie równoległe, potokowe i sieci systoliczne
7.2. Arytmetyka rozłożona
Co to jest arytmetyka rozłożona i do czego służy? Jest to równoległo-szeregowa metoda - czy raczej koncepcja - układowej realizacji układów obliczających wartość kombinacji liniowej.
(*) |
gdzie a1, a2, ..., ak są stałymi (reprezentowanymi przez słowa binarne), a x1, x2, ..., xk danymi wejściowymi (reprezentowanymi również przez słowa binarne).
Na wyrażenie (*) można patrzeć jak na iloczyn skalarny dwóch wektorów z przestrzeni Rn: (a1, a2, ..., ak) i (x1, x2, ..., xk).
Metoda dobrze nadaje się do realizacji filtrów cyfrowych NOI, SOI, do obliczania DFT i do realizacji cyfrowych filtrów adaptacyjnych (wymiana zawartości pamięci daje nowy filtr cyfrowy).
Rozwiązania układowe arytmetyki rozłożonej dobrze nadają się do realizacji iloczynu skalarnego (a1, a2, ..., ak) z takim „przesuwającym” się wektorem:
x1, x2, x3, ..., xk
x1, x2, x3, ..., xk
x1, x2, x3, ..., xk
a to właśnie robią filtry FIR.
Wyjaśnimy koncepcję arytmetyki rozłożonej na przykładzie. Niech liczby a1, a2, ..., ak ∈ Q, x1, x2, ..., xk ∈ Q będą reprezentowane w zapisie U2. Załóżmy, że dla każdego chcemy obliczyć zdefiniowane tak:
y = a0x + a1x(n - 1) + a2x(n - 2) + b1y(n - 1) + b2y(n - 2) | (**) |
Takim właśnie równaniem różnicowym opisywana jest tzw. sekcja bikwadratowa filtru NOI (nieskończona odpowiedź impulsowa).
Przyjmijmy, że wartości bezwzględne wszystkich sygnałów nie przekraczają jedności i są przedstawione za pomocą B+1 bitów w zapisie U2, tzn.:
słowo binarne reprezentuje x(k) ( „rozpisujemy sygnały na bity”)
gdzie ∈ {0,1}. Nasze wyrażenie (**) na y(n) możemy teraz zapisać następująco:
(***) | |
Niczego nadzwyczajnego nie zrobiliśmy, poza zmianą kolejności sumowania.
Zauważmy, że w wyrażeniach w nawiasach a0, a1, a2, b1, b2 są stałe, zatem każdy „nawias” jest wartością pewnej funkcji pięciu zmiennych.
gdzie e1, e2, ..., e5 ∈ {0,1}. Nasza funkcja może przyjmować tylko 32 wartości. Funkcję tę można zrealizować jako układ kombinacyjny lub zapamiętać w pamięci PROM.
Zatem przepisując (***) z użyciem nowego oznaczenia dostajemy:
Widać, że wyeliminowaliśmy w ten sposób mnożenie, a y(n) obliczać możemy przez sumowanie i przesuwanie odpowiedniej wartości funkcji .