Ćwiczenie D6:
A
LGORYTMY
OBLICZANIA
MODUŁU
WEKTORA
,
PIERWIASTKA
KWADRATOWEGO
I
FUNKCJI
TRYGONOMETRYCZNYCH
PRZY
ZASTOSOWANIU
PROCESORÓW
SYGNAŁOWYCH
TMS320
opracował:
mgr inż. Roman Niestrój
Cele ćwiczenia:
–
poznanie wybranych algorytmów obliczeniowych
–
wykorzystanie sprzętowych możliwości obliczeniowych
procesora sygnałowego
–
doskonalenie umiejętności programowania w asemblerze
Algorytm szybkiego obliczania modułu wektora
Algorytmy stosowane w systemach przetwarzania sygnałów i cyfrowych systemach sterowania często
wymagają obliczenia modułu wektora zespolonego danego w postaci jego części rzeczywistej i
urojonej w następujący sposób:
W =W
x
jW
y
Obliczenie modułu wektora W wymaga pierwiastkowania, ponieważ moduł W jest określony jako:
∣
W∣=
W
x
2
W
y
2
Zakładając, że suma kwadratów składowych wektora W
x
2
+W
y
2
jest dostępna, problem sprowadza się
do sprawnego przeprowadzenia operacji pierwiastkowania. Założenie to jest prawdziwe, ponieważ
operacja mnożenia (w tym podnoszenia do kwadratu) i dodawania jest bardzo efektywnie
wykonywana przez procesory sygnałowe. Operacja pierwiastkowania nie jest w nich realizowana
sprzętowo, więc konieczne jest zastosowanie dla niej jakiejś metody aproksymacji. Istnieje kilka
sposobów otrzymania wartości pierwiastka kwadratowego, ale optymalna technika zależy od
możliwości dostępnego sprzętu i oprogramowania. Na przykład, jeżeli przeprowadza się
pierwiastkowanie korzystając z języka programowania wysokiego poziomu, stosuje się jakąkolwiek
dostępną funkcję biblioteczną dla pierwiastka kwadratowego. Procedury programowe, chociaż
dokładne, mogą być bardzo wolne. Jedną z możliwości aproksymacji pierwiastka jest metoda
wykorzystująca wielomian piątego rzędu [1]. Wymaga ona jednak wielu operacji mnożenia i
skalowania sumy kwadratów składowych wektora do przedziału, w którym aproksymacja jest
wystarczająco dokładna. Jeżeli w systemie cyfrowym wymagana jest bardzo szybka (ale nie
koniecznie bardzo dokładna) aproksymacja modułu wektora, trwająca nie dłużej niż np. kilkadziesiąt
lub kilkaset ns, konieczne jest wykorzystanie algorytmów charakteryzujących się większą
wydajnością.
Istnieje technika nazywana algorytmem
α
Max+
β
Min [2]. Jest to aproksymacja liniowa,
zastosowana do wyznaczenia modułu wektora bez pierwiastkowania, wymagająca określenia, która z
ortogonalnych składowych wektora W ma większą wartość bezwzględną. Jeżeli maksymalna wartość
bezwzględna W
x
lub W
y
jest oznaczona jako Max, a minimalna wartość bezwzględna W
x
lub W
y
jest
oznaczona jako Min, to aproksymacja modułu wektora W przy zastosowaniu algorytmu
α
Max+
β
Min,
jest wyrażona jako:
∣
W∣= Max Min
Algorytmy
α
Max+
β
Min sprawnie wyznaczają moduł wektora W, przy dowolnej szybkości systemu,
potrzebując do tego zaledwie dwóch operacji wyznaczenia wartości bezwzględnej, jednej operacji
porównania (np. za pomocą odejmowania i skoku warunkowego uzależnionego od wyniku
odejmowania), dwóch operacji mnożenia i jednej operacji dodawania. Wszystkie te operacje są
sprzętowo wykonywane przez procesory sygnałowe. Dokładność wyznaczenia modułu wektora przez
algorytm
α
Max+
β
Min zależy od wyboru wartości współczynników
α
i
β
. Istnieje kilka par takich
wartości, które zapewniają stosunkowo dobrą dokładność, jednak muszą one być reprezentowane w
pamięci procesora za pomocą słowa bitowego o długości przynajmniej szesnastu bitów. Ograniczając
wybór wartości
α
i
β
do całkowitych potęg liczby dwa, można uprościć wykonanie operacji mnożenia
w algorytmie, zastępując je przesunięciem słowa bitowego w lewo lub w prawo o odpowiednią ilość
bitów.
Dokładność algorytmu estymatora modułu wektora można określić przez wykreślenie jego błędu jako
funkcji kąta fazowego. Na rysunku zamieszczonym poniżej przedstawiono wyniki działania takiego
estymatora, dla różnych wartości współczynników
α
i
β
, realizującego algorytm
α
Max+
β
Min dla
wektora o module równym jeden, którego kąt fazowy zmienia się w przedziale od 0
o
do 90
o
.
Wybór wartości współczynników
α
=15/16 i
β
=15/32 zapewnia średni błąd wyznaczenia modułu
wektora równy 1,79% i odchylenie standardowe tego błędu równe 0,030. Wtedy moduł wektora W
jest obliczany w następujący sposób:
∣
W∣=
15
16
⋅
Max
Min
2
Zakres kątów fazowych na rysunku ograniczono do przedziału od 0
o
do 90
o
, ponieważ przedstawione
krzywe powtarzają się co 90
o
.
Zadanie.
Opracować program w języku asembler dla procesora sygnałowego TMS320C50, realizujący
algorytm szybkiej aproksymacji modułu wektora.
Opracowany program będzie składał się z dwóch plików. Pierwszy z nich to program główny,
zawierający wszystkie niezbędne procedury inicjalizacyjne dla procesora sygnałowego i jego
otoczenia, oraz zawierający podprogramy obsługi przerwań. Program główny jest w całości napisany
i dostarczany przez prowadzącego zajęcia. Drugi z plików zawierać będzie tylko właściwą procedurę
obliczeniową, realizującą algorytm
α
Max+
β
Min. Zadaniem uczestników ćwiczenia jest opracowanie
i uruchomienie za pomocą debugger-a, na podstawie podanych przez prowadzącego wskazówek,
programu procedury obliczeniowej.
Do wykonania ćwiczenia potrzebny jest komputer wyposażony w odpowiednio skonfigurowane
środowisko programistyczne i zestaw uruchomieniowy z procesorem sygnałowym TMS320C50.
Wskazówki do wykonania zadania:
Założenia:
- składowa Wx przechowywana jest w komórce pamięci danych o adresie symbolicznym Xcmpt w
formacie Q15;
- składowa Wy przechowywana jest w komórce pamięci danych o adresie symbolicznym Ycmpt w
formacie Q15;
- wynik obliczeń (moduł wektora) zapisywany jest w komórce pamięci danych o adresie
symbolicznym modul w formacie (2.14);
- współczynnik
α
=15/16 zapisany jest w komórce pamięci danych o adresie symbolicznym alfa
w formacie Q15;
Algorytm procedury obliczeniowej:
1) pobierz Xcmpt z pamięci danych
2} oblicz wartość bezwzględną z Xcmpt
3) pobierz Ycmpt z pamięci danych
4) oblicz wartość bezwzględną z Ycmpt
5) sprawdź czy |Xcmpt| >= |Ycmpt|
a) jeśli |Xcmpt| >= |Ycmpt|, to MAX=|Xcmpt|, MIN=|Ycmpt|
b) jeśli |Xcmpt| < |Ycmpt|, to MAX=|Ycmpt|, MIN=|Xcmpt|
6) oblicz MIN/2
7) oblicz MAX+MIN/2
8) oblicz alfa*(MAX+MIN/2)
9) zapisz wynik w pamięci danych
Potrzebne instrukcje asemblera:
- służące do ładowania akumulatora:
LACC, LACL
- służące do ładowania rejestrów odwzorowanych w pamięci:
SAMM
- służące do zapisu do pamięci danych:
SACH, SPH
- służące do przenoszenia danych pomiedzy ACC i ACCB:
EXAR
- służące do skoków:
B, BCND, RET
- służące do obliczeń:
ABS, SUB, SFR, ADDB, MPY
Uwagi:
1) Dodawanie dwóch liczb w formacie (Q15) czyli 16-bitowych może dać w wyniku liczbę
w formacie (2.15) czyli 17-bitową.
2) Mnożenie dwóch liczb w formacie (Q15) czyli 16-bitowych może dać w wyniku liczbę
w formacie (2.30) czyli 32-bitową.
3) Zapis formatu (Q15) jest równoważny z (1.15), czyli 1 bit na część całkowitą (w tym
przypadku jest to tylko bit znaku) i 15 bitów na część ułamkową.
W czasie wykonywania ćwiczenia uczestnicy mogą korzystać z literatury dostarczanej przez
prowadzącego, dotyczącej wykorzystywanego procesora sygnałowego i środowiska
programistycznego (między innymi z opisu instrukcji i dyrektyw asemblera w języku polskim).
Pozostałe wskazówki, komentarze i dodatkowe polecenia znajdują się we wstępnej wersji pliku
procedury obliczeniowej, dostarczanej przez prowadzącego ćwiczenie. Sprawdzenie działania
opracowanego programu następuje za pomocą debugger-a w pracy krokowej. Polega ono na zadaniu
wartości składowych wektora W w komórkach pamięci danych „Xcmpt” i „Ycmpt”, wykonaniu
programu i odczytaniu wyniku jego działania z komórki pamięci danych „modul”. Sprawdzenie to
należy przeprowadzić dla różnych wartości składowych wektora W.
Sprawozdanie z ćwiczenia
Sprawozdanie z ćwiczenia powinno zawierać kody napisanych w trakcie ćwiczenia programów
wraz z komentarzami opisującymi ich działanie.
Źródła literaturowe:
[1]. Fixed Point Math Library. Texas Instruments
[2]. R. G. Lyons: Wprowadzenie do cyfrowego przetwarzania sygnałów. WKŁ, Warszawa 2000
opracowano dnia 07-03-2007, (v1.0)