X - Paweł Tomaszewicz

Transkrypt

X - Paweł Tomaszewicz
Warszawa, dn. 1 czerwca 2005r.
Wojciech Klepacki
Michał Kubiak
Grzegorz Tyszka
Łukasz Zgierski
Opiekun: dr inż. Paweł Tomaszewicz
UKŁADY CYFROWE
dokumentacja projektu
IDENTYFIKACJA UŻYTKOWNIKA NA PODSTAWIE
GŁOSU
Z UŻYCIEM WSPÓŁCZYNNIKÓW PREDYKCJI LINIOWEJ (LPC)
Streszczenie
W projekcie wykorzystujemy przydatność reprezentacji LPC sygnału mowy do
rozpoznawania mówcy w oparciu o hasło, metodą klasyfikacji minimalnoodległościowej.
Zaprojektowany układ operuje na próbkach mowy zapisanych w pliku wave poddanych
uprzednio filtracji preemfazowej, oblicza współczynniki autokorelacji i predykcji liniowej, a
następnie na ich podstawie dokonuje klasyfikacji i ewentualnego przyporządkowania testowej
próbki konkretnemu użytkownikowi zarejestrowanemu w systemie.
1. Wstęp
Zagadnienia rozpoznawania w stosunku do mowy dzielą się na dwie kategorie. Pierwsza
dotyczy rozpoznawania mówcy (speaker identification, speaker verification), natomiast druga
- rozpoznawania mowy (speech recognition). Są to zupełnie różne kategorie zadań.
W zadaniach weryfikacji i identyfikacji mówcy rozpoznawany jest głos konkretnej
osoby, najlepiej w sytuacji wypowiadania dowolnych słów lub na podstawie mowy ciągłej. W
zadaniu rozpoznawania mowy dąży się do tego, aby uniezależnić się od mówcy, a skupić się
na rozpoznawaniu słów. Pomimo przeciwstawności tych zadań dostępna wiedza ogólna o
sygnale mowy pozwala często na stosowanie tych samych lub podobnych metod
wyodrębnienia pożądanych parametrów w obydwu kategoriach.
Liniowe kodowanie predykcyjne jest często wykorzystywanym narzędziem do opisu cech
sygnału mowy ze względu na stosunkowo szybki sposób ich wyznaczania, a przede
wszystkim na małą liczbę współczynników potrzebną do opisu tego typu sygnału (do dobrego
opisu wystarcza 12 współczynników – taką też ilość założyliśmy w naszym projekcie).
Istnieją rozmaite metody modelowania sygnału mowy przy użyciu LPC. Można wśród
nich wymienić takie jak: kwantyzacja wektorowa (Vector Quantization – VQ), analiza
przebiegu czasowego (Dynamic Time Warping – DTW), analiza współczynników
cepstralnych, a także modelowanie stochastyczne z użyciem liniowej kombinacji rozkładów
normalnych (Gaussian Mixture Model – GMM) i ukrytych modeli Markowa (Hidden Markov
Model – HMM). Coraz powszechniejsze stają się obecnie algorytmy rozpoznawania mówcy
stworzone na bazie sztucznych sieci neuronowych (Artificial Neural Network – ANN).
Większość z powyższych metod analizuje próbkę sygnału mowy okienkując ją
przesuwającymi się oknami (zazwyczaj Hamminga) o długości 20-30ms, a następnie budują
matematyczny model danego mówcy w oparciu o jego najbardziej charakterystyczne cechy.
W pierwszej fazie pracy nad projektem powstała konieczność wyboru odpowiedniej metody.
Głównym zagadnieniem było zapewnienie wystarczającej skuteczności idącej w parze ze
stopniem skomplikowania algorytmu adekwatnym do możliwości czasowych i sprzętowych.
Z powyższych powodów, jako punkt wyjścia potraktowaliśmy artykuł dr inż. Leszka
Grada Badanie możliwości rozpoznawania mówcy na podstawie reprezentacji LPC sygnału
mowy opublikowany w Biuletynie Instytutu Automatyki i Robotyki WAT (nr 13/2000). Jest
tam zawarty opis eksperymentu potwierdzającego użyteczność liczenia współczynników LPC
z całej badanej próbki sygnału mowy (bez konieczności okienkowania) do rozpoznawania
mówcy. Model mówcy tworzony jest poprzez zwykłe uśrednienie współczynników z
kolejnych realizacji nagrania tego samego słowa, a decyzja podejmowana jest przy użyciu
klasyfikatora minimalnoodległościowego.
Przeprowadzenie odpowiednich symulacji w programie MATLAB potwierdziło
skuteczność powyższej metody. Nasze zadanie sprowadziło się więc do problemów
związanych ze sprzętową realizacją algorytmu, a wśród nich:
•
•
•
•
•
ustalenia sposobu przesyłania próbek sygnału do płytki laboratoryjnej (niemożność
przesłania całego sygnału za jednym razem z powodu ograniczeń pamięci w układach
FLEX10k),
zaprojektowania automatu liczącego autokorelację za pomocą sum cząstkowych,
zaprojektowania automatu realizującego rekursywny algorytm Durbina-Levinsona do
liczenia współczynników LPC,
zaprojektowania klasyfikatora minimalnoodległościowego (automat decyzyjny),
przyjęcia najodpowiedniejszej reprezentacji liczb i opracowania dla nich operacji
arytmetycznych (przejście z formatu zmiennoprzecinkowego na stałoprzecinkowy przy
zachowaniu wystarczającej dokładności).
Sposoby rozwiązań powyższych problemów wraz ze sposobem implementacji
poszczególnych modułów projektu postaramy się omówić w dalszej części dokumentacji.
2. Krótkie omówienie istoty LPC (Linear Predictive Coding)
Współczynniki predykcji liniowej są bardzo powszechnym opisem sygnału mowy
stosowanym do jego kompresji. Wynika to z faktu, że niewielka liczba współczynników jest
w stanie opisać z wystarczającą dokładnością ten rodzaj sygnału, co z kolei jest wynikiem
tego, iż sygnał mowy charakteryzuje się dość dużą redundancją. Znaczy to w tym przypadku,
że na podstawie przebiegu poprzednich próbek sygnału jesteśmy w stanie z dużym
prawdopodobieństwem przewidzieć kolejną.
Pojęcie współczynników predykcji zawdzięczamy odpowiedniemu podejściu do
matematycznego modelowania ludzkiego traktu głosowego. Upraszczając nieco ów model
możemy powiedzieć, że sygnał mowy generowany jest przez struny głosowe i trakt głosowy
człowieka. Możemy wyróżnić jeden z dwóch stanów, w jakich znajdują się struny głosowe:
• rytmicznie i energicznie rozchylają się na całej długości, okresowo pobudzając trakt
głosowy silnymi impulsami powietrza z płuc
• są na całej długości otwarte, wpuszczając do traktu głosowego równomierny strumień
powietrza.
Pierwszy przypadek dotyczy głosek dźwięcznych, kiedy w bardzo krótkich chwilach
czasowych pobudzenie generowane przez struny głosowe możemy traktować jako
oscylacyjne. Przypadek drugi modeluje się pobudzeniem losowym – szumem. Dalsze
kształtowanie mowy ma miejsce w trakcie głosowym, który z sygnałowego punktu widzenia
można traktować jako filtr IIR o pewnej transmitancji H(z). Ta właśnie transmitancja jest
cechą osobniczą każdego mówcy. Analogicznie, budowa traktu głosowego jest odmienna i
niepowtarzalna u poszczególnych ludzi. Współczynniki LPC są właśnie współczynnikami
takiego filtra IIR, zatem na ich podstawie można identyfikować konkretnego mówcę.
Mowa
dźwięczna
Pobudzenie
okresowe
Filtr traktu
głosowego
Pobudzenie
losowe
H ( z) =
1
1+ a1 z
−1
+ a 2 z − 2 + ... + a 12 z − 12
Mowa
bezdźwięczna
Współczynniki LPC
Rys.1 Model generacji sygnału mowy
mowa
3. Opis wykorzystanej przez nas metody rozpoznawania mówcy
Metoda identyfikacji użytkownika bazuje na przetwarzaniu sygnału zastosowanym we
wspomnianym wcześniej eksperymencie przeprowadzonym na WAT. Celem doświadczenia
było otrzymanie odpowiedzi na pytanie, czy LPC zastosowane do całej próbki sygnału mowy
daje wystarczający opis, aby można było na jego podstawie identyfikować mówcę.
Proces rozpoznawania przeprowadzamy mając do dyspozycji wstępnie obrobione pliki
wave (bez kompresji) zapisane z dokładnością 8 bitów na próbkę oraz częstotliwości
próbkowania 8kHz. Przez wstępną obróbkę rozumiemy odszumienie i normalizację próbki
(przeprowadzone za pomocą programu Cool Edit Pro), a następnie poddanie jej wstępnej
filtracji preemfazowej (niewielkiemu uwydatnieniu wyższych częstotliwości) za pomocą
filtru FIR o transmitancji H ( z ) = 1 − 0.9375z −1 (za pomocą programu MATLAB). Wszystkie
nagrywane osoby mówiły ten sam tekst, aby mieć pewność, iż decyzja algorytmu zależy
przede wszystkim od mówcy, a nie od wypowiadanego tekstu. Arbitralnie dobraną sekwencją
mówioną było pojedyncze słowo „metoda” nagrywane ośmiokrotnie dla jednej osoby.
Z tak przygotowanego pliku dźwiękowego policzonych zostało 13 współczynników
autokorelacji, a następnie rekursywnym algorytmem Durbina-Levinsona wyliczyliśmy 12
współczynników LPC.
Załóżmy, że poniższe wyrażenie opisuje pojedynczy wektor współczynników LPC
wypowiedzi osoby X:
 a(1) 
a(2)
 
aX = a(3)
... 
 
a( p)
(1)
gdzie p=12 i oznacza ilość współczynników predykcji.
Następna równość będzie definiowała macierz utworzoną z powyższych wektorów
obliczonych z n=8 powtórzeń hasła przez osobę X:
A
X
[
= a 1X
a 2X
...
a nX
]
(2)
czyli:
AX
 A X (1,1)
 X
A ( 2 ,1)
= 

...
 X
 A ( p ,1)
A X (1, 2 )
...
A X ( 2,2 )
...
X
A ( p ,2 )
...
...
...
A X (1, n ) 

A X (2, n ) 

...

X
A ( p , n ) 
(3)
Policzmy teraz wektor wartości średnich współczynników jako uśrednienie wierszy macierzy:
a
X
(i ) =
n
1
n
∑
j =1
A X (i, j )
i = 1 , 2 ,...,
p
(4)
Wyznaczymy teraz odchylenia dla powtórzeń hasła wypowiadanych przez inne osoby od
powyższego uśrednionego wektora osoby X:
i = 1 , 2 ,...,
∆YX (i ) = a Y (i ) − a X (i )
(5)
p
Decyzję podejmujemy na podstawie wyboru wektora użytkownika zarejestrowanego,
którego odległość od wektora testowanego jest najmniejsza. Odległość tę wyznaczamy
sumując odległości, jak poniżej:
∆ YX =
p
∑
j =1
∆ YX ( i )
(6)
Wszystkie powyższe przekształcenia zostały przez nas przesymulowane w pakiecie
MATLAB i dały tam pomyślny rezultat. Na podstawie samych współczynników LPC i
powyższych przekształceń byliśmy w stanie określić z dużą skutecznością, kto jest mówcą.
4. Wyniki symulacji w programie MATLAB
Jako wynik symulacji przedstawimy graficznie wyniki porównań dwu wybranych osób,
które ten sam tekst nagrywały w tych samych warunkach. Dla każdej z tych osób zostały
przeprowadzone obliczenia opisane w poprzednim punkcie. Każda pojedyncza linia wykresu
ilustruje pojedynczą realizację wypowiedzi słowa „metoda”. Kolor linii jest przypisany do
jednego z użytkowników: czerwony — użytkownik X, zielony — użytkownik Y.
0.35
odleglosc od uzytkownika X
0.3
0.25
0.2
0.15
0.1
0.05
0
0
2
4
6
8
10
numer wspolczynnika LPC
12
14
Powyższy wykres ilustruje porównanie dwóch użytkowników względem użytkownika
„czerwonego”. Właśnie czerwony wykres przedstawia odległości opisane wzorem (5)
współczynników właściwego użytkownika od jego uśrednionego wektora LPC. opisane
wzorem (5). Zielony wykres przedstawia natomiast odległości użytkownika Y (innego) od
użytkownika X. Łatwo zauważyć, iż „zielone” odległości są znacznie większe, co
wskazywałoby na fakt, że to właśnie użytkownik X jest tym właściwym. Decyzja zatem
wypadłaby poprawnie.
Jak widać poniżej, decyzja przebiegałaby poprawnie również w drugą stronę, tzn. nawet
wtedy, gdy użytkownikiem, dla którego uśrednilibyśmy współczynniki byłby użytkownik Y.
0.35
odleglosc od uzytkownika Y
0.3
0.25
0.2
0.15
0.1
0.05
0
0
2
4
6
8
10
numer wspolczynnika LPC
12
14
Skuteczność metody widać nawet, gdy do porównań weźmiemy próbki, które nie były
uprzednio wykorzystywane do liczenia średniej:
0.4
odleglosc od uzytkownika X
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
0
2
4
6
8
10
numer wspolczynnika LPC
12
14
I analogicznie, gdy mierzymy odległości od użytkownika Y:
0.35
uzytkownik X
uzytkownik y
odleglosc od uzytkownika Y
0.3
0.25
0.2
0.15
0.1
0.05
0
0
2
4
6
8
10
numer wspolczynnika LPC
12
14
Chociaż w tym przypadku nie ma aż tak znaczących różnic w porównaniach, to jednak
przy zsumowaniu wszystkich delt, wartości wyrażenia (6) są właściwe.
∆
Y
Y
∆
Y
X
= 1 . 529
= 1 . 6284
Podobne wyniki otrzymaliśmy symulując skuteczność metody dla pozostałych dwóch osób
i wynik w większości prób okazał się pomyślny.
Na podstawie powyższych obliczeń uznaliśmy metodę za najbardziej odpowiednią do
sprzętowej implementacji (mieliśmy na względzie dużą skuteczność a zarazem względną
prostotę rozwiązania). W tym momencie głównym założeniem projektowym stało się dla nas
powtórzenie skuteczności metody w implementacji sprzętowej — zaczęliśmy dążyć do tego,
aby powtórzyć wyniki symulacji w programie MATLAB.
ZAGADNIENIA ZWIĄZANE ZE SPRZĘTOWĄ IMPLEMENTACJĄ OPISANEJ
METODY
5. Ogólna budowa układu
Zaprojektowany przez nas układ spełnia dokładnie funkcjonalność wcześniej opisanej
metody, zatem składa się z odpowiednich modułów odpowiedzialnych przede wszystkim za
obliczenie współczynników LPC, a następnie podjęcie decyzji w stosunku do mówcy.
Urządzenie składa się z następujących modułów:
• automatu głównego, zarządzającego pracą poszczególnych automatów,
• automatu odbiorczego – pobierającego dane wysyłane z komputera poprzez port USB, a
następnie wypełniającego pamięć RAM otrzymanymi danymi (do tego i poprzedniego
automatu posłużył nam za punkt wyjścia program EchoRAM napisany przez dr inż. M.
Rawskiego),
• automatu realizującego obliczenie funkcji autokorelacji,
• automatu realizującego algorytm Durbina-Levinsona, obliczający współczynniki LPC,
• automatu podejmującego decyzję na podstawie klasyfikacji minimalnoodległościowej,
• pamięci RAM przechowującej części wczytanej próbki, współczynniki autokorelacji i
współczynniki LPC,
• pamięci ROM, w której znajdują się wzorcowe próbki poszczególnych użytkowników.
Decyzja o wyborze konkretnego użytkownika zostaje zwrócona poprzez wyświetlenie się
na wyświetlaczu odpowiedniej cyfry przypisanej danemu mówcy.
dane[7..0]
automat
odbiorczy
RAM z
próbkami
automat
autokorelacji
RAM ze
współczynnika
mi
autokorelacji
automat
LPC
RAM ze
współczynnika
mi
LPC
automat sterujący
ROM ze
wzorcami
automat
decyzyjny
decyzja[1..0]
6. Opis automatu liczącego funkcję autokorelacji
Automat autokorelacji (Moore’a) realizuje algorytm liczący wartość poniższego wyrażenia
mając do dyspozycji całą próbkę sygnału mowy:
r (k ) =
N − 1
∑
s (n )s (n + k ),
(7)
n = 0
k
=
0 , 1 , 2 ,...,
Do liczenia tej funkcji zakładamy stałą długość próbki dźwiękowej, która wynosi 1s
(rozmiar 1 kB). W razie zbyt krótkiej sekwencji, pozostałym próbkom przypisywana jest już
po części softwarowej wartość 0. I podobnie, jeśli plik jest za duży, zostaje „przycięty” do
1kB.
Ze względu na niewystarczający rozmiar pamięci w układzie FPGA, zaistniała
konieczność porcjowania danych. Z tego faktu wynika, iż nie możemy policzyć autokorelacji
od razu z całej próbki. W tym celu należało rozbić tę sumę na kilka sum częściowych i liczyć
funkcję autokorelacji osobno dla każdej z nich. Obliczone współczynniki są aktualizowane po
obliczeniu każdej następnej sumy częściowej. Ponadto trzeba było za każdym razem
przesyłać o 13 próbek więcej w każdej paczce, aby nie wyjść poza zakres sumowania, co
powodowałoby błędne wyniki.
Automat pracuje na porcjach próbek zapisanych wcześniej w pamięci RAM przez automat
odbiorczy. Rozmiar RAMu – 256 bajtów, a każda próbka zajmuje 1 bajt. Współczynniki
autokorelacji reprezentowane są na 32 bitach i zapisywane w pamięci RAM. Liczonych jest
13 współczynników, zatem do policzenia każdej sumy cząstkowej należy przesłać 13 bajtów
nadmiarowych. W przypadku wcześniejszego skończenia się danych, automat i tak odbierze
zera, które zerując kolejne iloczyny, nie spowodują błędnego wyniku.
7. Automat obliczający współczynniki LPC
Na wstępie opisu metody zastosowanej do obliczania LPC, warto podać zależność wiążącą
te współczynniki ze współczynnikami autokorelacji:
 r (0)
 r (1)


M

 r ( p − 1)
r (1)
r (0)
L
L
M
O
r ( p − 2) L
r ( p − 1)   a1 
 r (1) 
a 

 r (2) 
r ( p − 2)  2 
,
⋅
= −


M


M
M 
  


r ( 0 )   a p 
r ( p )
macierz współczynników
autokorelacji
wektor ze
współczynnikami
LPC
Ra
=
− r
wektor ze współczynnikami
autokorelacji
Obliczenie współczynników LPC według powyższego wzoru jest możliwe, aczkolwiek
wiąże się z rozwiązaniem równania macierzowego i wymaga odwracania macierzy. Jest to
zabieg bardzo mało wydajny i nieodpowiedni do sprzętowej implementacji.
Wydajnym algorytmem, który pozwala uniknąć procesu odwracania macierzy jest
iteracyjny algorytm Durbina-Levinsona, stosowany w koderach mowy czasu rzeczywistego.
Szczegółowy opis algorytmu (z którego korzystaliśmy) można znaleźć w książce Tomasza
Zielińskiego Od teorii do cyfrowego przetwarzania sygnałów. Przedstawimy tu tylko
poszczególne kroki algorytmu:
E 0 = r0
Dla i = 1,2,3,...,p:
1.
2.
•
γi =
ri + a(i−1)2ri−1 + a(i−1)2ri−2 +K+ a(i−1)(i−1) r1
Ei−1
•
a ii = − γ
•
dla j = 1,2,3,... ,i-1:
i
(
)
Ei = 1−γ i2 Ei−1
a ij = a ( i −1) j − γ i a ( i −1)( i − j )
Algorytm Durbina-Levinsona jest realizowany za pomocą automatu Moore’a. Automat ten
pracuje na dwóch pamięciach RAM., z których pierwsza, w której zostały zapisane próbki
autokorelacji, jest używana tylko do odczytu. Kolejna stanowi akumulator, gdzie gromadzone
są wyliczone współczynniki predykcji. Odczyt z RAMu „LPC” jest także wykonywany przez
opisywany automat, gdyż wyliczone dotychczas współczynniki są aktualizowane w każdej
iteracji.
Implementacja całego algorytmu pracuje na liczbach stałoprzecinkowych
reprezentowanych na 32 bitach (1 bit znaku + 15 bitów części całkowitej + 16 bitów części
ułamkowej). Na tylu bitach zapisywane są zarówno dane wejściowe (współczynniki
autokorelacji), jak i wyjściowe. Dzięki przyjęciu stałej 32 bitowej reprezentacji możliwe stało
się wykorzystanie prostych i szybkich modułów mnożących i dzielących, pracujących na
zwykłych liczbach całkowitych.
Z opisanej reprezentacji wynika, iż wartości autokorelacji (które są w rzeczywistości
zawsze całkowite), są „widziane” przez automat LPC jako ułamki. Nie stanowi to jednak
problemu, gdyż odpowiada to w istocie podzieleniu wszystkich tych współczynników przez
stałą, co zmienia wynik LPC w sposób nieliniowy, jednak nie ma wpływu na decyzję – dla
dwóch różnych mówców obliczone w ten sposób współczynniki będą nadal się różnić.
8. Automat decyzyjny
Jako układ decyzyjny wykorzystujemy nieco uproszczoną wersję klasyfikatora
minimalnoodległościowego. Uproszczenie polega na tym, że nie badamy różnicy w sensie
odległości Euklidesowej dwóch wektorów w przestrzeni p-wymiarowej, ale po prostu
sumujemy moduły różnic poszczególnych współrzędnych, zgodnie ze wzorem (6). Decyzja
na podstawie tego właśnie wyrażenia okazała się podczas symulacji wystarczająca, a ponadto
nie wymuszało to konieczności podnoszenia różnic do kwadratu.
Automat wykonuje wyrażenie (6) dla wszystkich wektorów zapisanych w pamięci ROM
układu porównując każdy z nich z wektorem aktualnie badanym. Jako decyzja, wskazywany
jest użytkownik zarejestrowany w systemie, którego wektor okazał się najbliższy wektorowi
testowanemu.
9. Opis przyjętej reprezentacji liczb
Specyfika algorytmu wymagała przyjęcia odpowiedniej reprezentacji liczb — takiej, aby
za jej pomocą dało się w prosty i dokładny sposób przedstawić ułamki ze znakiem, a ponadto
zaimplementować mało skomplikowane dzielenie i mnożenie bez utraty zbyt dużej ilości
informacji.
Reprezentacją która spełniła te kryteria, okazał się zapis liczb ułamkowych na 32 bitach
(znakowany format 16.16). Jak już wcześniej wspomnieliśmy, 16 bitów zajmuje część
ułamkowa, 15 bitów – część całkowita + 1 bit znaku. Do zakodowania liczb ujemnych
użyliśmy kodu U2, który jest w pełni funkcjonalny nawet przy tym zapisie liczb. Dziesiętnie
nasza reprezentacja jest właściwie przeskalowaniem ułamka przez czynnik 2^16.
Dla wygody pracy z algorytmem, ważne było, aby liczby po wykonaniu nań operacji
mnożenia lub też dzielenia pozostawały w tej samej reprezentacji. Największy problem
powstał przy dzieleniu, ponieważ wykorzystując samo dzielenie całkowite, dostawaliśmy
zerowy wynik w przypadku dzielenia mniejszej liczby przez większą.
a) mnożenie
Przy mnożeniu czynimy założenie, że iloczyn nie przekroczy maksymalnej liczby
dającej zapisać się w znakowanym formacie 16.16. Stąd wykorzystując układ
wykonujący mnożenie całkowite dało się zaimplementować mnożenie przebiegające
według poniższego schematu:
0
31
część
całkowita
mnożna
część ułamkowa
0
31
część
całkowita
63
część odrzucana
mnożnik
część ułamkowa
32
część
całkowita
0
31
część ułamkowa
część odrzucana
iloczyn
b) dzielenie
W celu zapewnienia poprawnego wyniku dzielenia dla ułamków, przy jednoczesnym
wykorzystaniu algorytmu dzielenia całkowitego stosujemy operację przesunięcia bitów
dzielnej w lewo o 16 pozycji (przy jednoczesnym wypełnieniu pozostałych pozycji
zerami), a następnie wykonania zwykłego dzielenia liczb całkowitych.
32
0
31
część
całkowita
część ułamkowa
wypełnienie
zerami
dzielna
0
31
część
całkowita
dzielnik
część ułamkowa
0
31
część
całkowita
iloraz
część ułamkowa
Dodawanie i odejmowanie liczb w opisanej reprezentacji przebiega analogicznie do liczb
całkowitych, zatem wykorzystujemy do ich realizacji zwykłe sumatory.
Opisane przedstawienie liczb pozwala na opisanie ułamków z dokładnością
(rozdzielczością) 2^(-16).
Podsumowując, reprezentacje wszystkich używanych danych możemy przedstawić w
tabeli:
rodzaj danych
próbka sygnału
rozmiar
reprezentacja
znak
8 bitów
całkowite dodatnie
nie
współczynnik
autokorelacji
32 bity
16.16
tak
współczynnik LPC
decyzja
32 bity
16.16
tak
2 bity
całkowite
nie
10. Wyniki i opis symulacji w Waveform Editor programu Quartus II
Po zakodowaniu każdego z modułów w języku AHDL, dokonaliśmy symulacji. Każdy
moduł był testowany oddzielnie, jak również we współpracy z innymi modułami.
Implementacje algorytmów były testowane na przykładowych danych. Analizując przebieg
działania tego algorytmu zwracaliśmy uwagę, czy automat zwraca poprawne wyniki
pośrednie, czy dobrze wypełnia pamięć RAM, czy rejestry posiadają prawidłową zawartość, a
przede wszystkim sprawdzaliśmy, czy automat znajduje się w ściśle zdeterminowanym i
założonym przez nas stanie.
Całe projektowanie automatów także wykonywaliśmy w oparciu o wyniki symulacji w
Waveform Editor. Wpierw rysowaliśmy sam graf stanów automatu, kodowaliśmy jego
przejścia w AHDL (bez dodawania jakichkolwiek instrukcji) i dopiero na samym końcu
uzupełnialiśmy go o układy arytmetyczne, pamięci i inne bardziej skomplikowane instrukcje.
Niekiedy powstawała konieczność dodania dodatkowych stanów, które umożliwiały
wykonanie złożonych operacji (np. zapis lub odczyt z RAMu).
Symulacje pozwoliły nam także na dobór optymalnych elementów i ich parametrów.
Dobrym przykładem jest tu pamięć RAM, której wejście danych oraz wejście adresowe
zdecydowaliśmy się synchronizować zegarem.
Wszystkie symulacje przeprowadzone w programie Quartus II wypadły pomyślnie.
Algorytmy dawały poprawny wynik a wszystkie dołączone elementy i urządzenia (pamięci,
rejestry itd.) były obsługiwane poprawnie. Pomyślnie wypadła także symulacja działania
głównego automatu – napisane przez nas moduły na symulacji właściwie współpracowały z
automatem odbierającym dane, którego kod omawiany był na wykładzie.
11. Omówienie części softwarowej projektu
Jednym z założeń projektu jest to, iż plik dźwiękowy, który poddajemy weryfikacji jest
już wstępnie przetworzony (poddany odpowiednim filtracjom itp.). Stąd część softwarowa w
naszym projekcie ogranicza się właściwie tylko do przesłania w odpowiedni sposób danych
do płytki laboratoryjnej.
Także w tej kwestii przyszedł nam z pomocą prezentowany na wykładzie program
EchoRAM dr M. Rawskiego, w którym dokonaliśmy kilku drobnych modyfikacji mających na
celu dostosowanie przesyłania danych do założeń naszego projektu. Polegały one głównie na
przyjęciu stałej długości pliku (zatem stałej liczby bloków wysyłanych), a także na
wyłączeniu kodu odpowiadającego za odbiór danych z płytki (nie transmitujemy nic z
powrotem do komputera).
Ważny element części softwarowej to także kod odpowiedzialny za ucięcie nagłówka
pliku wave i taki sposób przesyłania danych, aby automat autokorelacji mógł poprawnie
policzyć wszystkie sumy cząstkowe. Jest to realizowane poprzez przesyłanie za każdym
razem o 13 bitów więcej (chodzi o to, aby nie wyjść poza zakres sumowania).
12. Podsumowanie, problemy wynikłe w trakcie prac i przyczyny niepowodzenia.
Mimo starań, konsultacji i ilości czasu jaki poświęciliśmy na określenie stopnia trudności
projektu (i w efekcie stwierdzenia czy jesteśmy w stanie go zrealizować) oraz określenie
potencjalnych trudności - nie byliśmy w stanie przewidzieć prawdziwego stopnia trudności
projektu.
Wspomniane problemy z ograniczeniem pamięci na układach FLEX10k można było
(przynajmniej teoretycznie) dość łatwo rozwiązać przez podział danych na pakiety,
konieczność zastosowania nowej reprezentacji dla liczb i arytmetyki dla tej reprezentacji
kosztowała nieco wysiłku ale rozwiązanie sprowadzało się do wykorzystania najprostszych
możliwości języka
AHDL, oprócz wymienionych wyżej problemów, rozwiązaliśmy wiele mniejszych i mniej
znaczących. Największym problemem okazało się podstawowe założenie – zmodyfikowania
automatu OpRAM dr Rawskiego i wykorzystania go jako szkieletu i podstawy dla naszego
projektu. Niestety, w trakcie symulacji, odpowiednia częstotliwość działania naszych
modułów, określona na około 2,7 MHz okazała się kompletnie niewłaściwa i uniemożliwiała
poprawne działanie automatu OpRAM. Podjęliśmy próby rozwiązania tego problemu poprzez
stworzenie dzielnikowanych zegarów, dla odpowiednich grup automatów (jedna grupa dla
automatu mainAut, rcvAut i trsAut o częstotliwości 25 MHz czyli dwukrotnie podzielony
zegar na płytce; druga grupa – przewidziana dla stworzonych przez nas modułów miała być
taktowana zegarem nie szybszym niż 2,7 Mhz), dbając o odpowiedni czas trwania sygnałów
startujących odpowiednie automaty oraz o taktowanie pamięci RAM i liczników adresowych
odpowiednimi zegarami. Mimo 10 dni spędzonych w laboratorium nie udało nam się
przygotować głównego automatu do połączenia z przygotowanymi przez nas modułami i
ostatecznego ukończenia pracy.
Głównym powodem niepowodzenia w laboratorium, podczas pracy z płytką były
rozbieżności w wynikach symulacji (przeprowadzanej przy kilkakrotnym sprawdzeniu
ustawień) i działaniu płytki. Nie byliśmy w stanie wytłumaczyć działania zakodowanej płytki
i określić źródeł rozbieżności pomiędzy teoretycznymi wynikami i praktycznymi próbami.
Konkluzja
Podsumowując prace nad projektem, możemy stwierdzić, iż mimo ostatecznego efektu, nie
uważamy semestru spędzonego z Układami Cyfrowymi za stracony – przedmiot i wybrany
przez nas projekt pozwolił nam na poznanie zasad projektowania i kodowania układów
cyfrowych, sposobów rozwiązywania najczęstszych problemów oraz metod analizy mowy.
Zdobyta wiedza z pewnością okaże się użyteczna w przyszłości. Pewien niedosyt pozostawia
jedynie fakt, że na jedynym przedmiocie, na którym istniała możliwość stworzenia niemal od
podstaw projektu działającego w rzeczywistości (co daje miłą odskocznię po czystym
programowaniu) nie udało nam się wyjść poza sferę projektowania i symulacji.
Bibliografia
[1]
[2]
[3]
[4]
[5]
[6]
[7]
prof. Tadeusz Łuba, dr Mariusz Rawski, dr Paweł Tomaszewicz i dr Bogdan
Zwierzchowski: Synteza Układów Cyfrowych, WKiŁ Warszawa 2003.
artykuł dr inż. Leszka Grada Badanie możliwości rozpoznawania mówcy na podstawie
reprezentacji LPC sygnału mowy opublikowany w Biuletynie Instytutu Automatyki i
Robotyki WAT (nr 13/2000).
Tomasz Zieliński: Od teorii do cyfrowego przetwarzania sygnałów, Wydz.
Elektrotechniki, Automatyki, Informatyki i Elektroniki AGH, Kraków 2002.
prof. dr hab. inż. Ryszard Tadeusiewicz: Sygnał Mowy, WKiŁ Warszawa 1988.
J. Żurada, M. Barski, W. Jędruch: Sztuczne sieci neuronowe, Wydawnictwo Naukowe
PWN Warszawa 1996.
Richard G. Lyons: Wprowadzenie do cyfrowego przetwarzania sygnałów, WKiŁ
Warszawa 2003.
Bogumiła Mrozek, Zbigniew Mrozek: MATLAB i Simulink. Poradnik użytkownika,
Helion 2004.
Materiały znalezione na stronach WWW załączamy w katalogu z dokumentacją.