background image

Ć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

Roman.Niestroj@polsl.pl

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

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,  

background image

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;

background image

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)