of 48 /48
VYSOK ´ EU ˇ CEN ´ I TECHNICK ´ E V BRN ˇ E BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKA ˇ CN ´ ICH TECHNOLOGI ´ I ´ USTAV TELEKOMUNIKAC ´ I FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS SPEKTR ´ ALN ´ I ODE ˇ C ´ IT ´ AN ´ I V SIGN ´ ALOV ´ EM PROCESORU DIPLOMOV ´ A PR ´ ACE MASTER’S THESIS AUTOR PR ´ ACE Bc. ANTON ´ IN HUDEC AUTHOR

VYSOKE U CEN I TECHNICKE V BRN E - vutbr.cz

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Text of VYSOKE U CEN I TECHNICKE V BRN E - vutbr.cz

Spektrální odeítání v signálovém procesoruFAKULTA ELEKTROTECHNIKY A KOMUNIKACNICH TECHNOLOGII USTAV TELEKOMUNIKACI
FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS
SPEKTRALNI ODECITANI V SIGNALOVEM PROCESORU
DIPLOMOVA PRACE MASTER’S THESIS
AUTOR PRACE Bc. ANTONIN HUDEC AUTHOR
VYSOKE UCENI TECHNICKE V BRNE BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA ELEKTROTECHNIKY A KOMUNIKACNICH TECHNOLOGII USTAV TELEKOMUNIKACI
FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS
SPEKTRALNI ODECITANI V SIGNALOVEM PROCESORU SPEKTRAL SUBSTRACT IN SIGNAL PROCESSOR
DIPLOMOVA PRACE MASTER’S THESIS
AUTOR PRACE Bc. ANTONIN HUDEC AUTHOR
VEDOUCI PRACE Ing. PETR SYSEL, Ph.D. SUPERVISOR
BRNO 2010
Ústav telekomunikací
Telekomunikaní a informaní technika
Student: Bc. Antonín Hudec ID: 78483 Roník: 2 Akademický rok: 2009/2010
NÁZEV TÉMATU:
POKYNY PRO VYPRACOVÁNÍ:
Cílem diplomové práce je implementovat metodu spektrálního odeítání na vývojovém kitu DSP56858EVM se signálovým procesorem Freescale. V první ásti implementujte ízení a komunikaci s kodekem Cyrrus Logic CS4218 osazeném na vývojovém kitu. V další fázi implementujte segmentaci vstupního signálu a rychlý algoritmus dopedné i zptné Fourierovy transformace. V poslední fázi implementujte detektor eové aktivity a metodu spektrálního odeítání. Funkci ovte na zpracování signál v reálném ase.
DOPORUENÁ LITERATURA:
[1] Cirrus Logic. CS4218 16-Bit Stereo Audio Codec. Datasheet. 1996.[1] Freescale. 56858 Evaluation Module User Manual. Rev. 3. 2005. [2] Freescale. CodeWarrior Development Studio for Freescale 56800/E Digital Signal Controllers: MC56F8xxx/DSP5685x Family Targeting Manual. Rev. 2007. [3] Freescale. DSP56800E 16-Bit DSP Core Reference Manual. Rev. 2.16. 2005.
Termín zadání: 29.1.2010 Termín odevzdání: 26.5.2010
Vedoucí práce: Ing. Petr Sysel, Ph.D.
prof. Ing. Kamil Vrba, CSc. Pedseda oborové rady
UPOZORNNÍ:
Autor diplomové práce nesmí pi vytváení diplomové práce porušit autorská práva tetích osob, zejména nesmí zasahovat nedovoleným zpsobem do cizích autorských práv osobnostních a musí si být pln vdom následk porušení ustanovení § 11 a následujících autorského zákona . 121/2000 Sb., vetn moných trestnprávních dsledk vyplývajících z ustanovení ásti druhé, hlavy VI. díl 4 Trestního zákoníku .40/2009 Sb.
ABSTRAKT Tato diplomova prace je zamerena na realizaci spektralnho odectan na signalovem kontroleru DSC56858. Prvn cast se zameruje na inicializaci DSC, nastaven kodeku a zprovoznen komunikace mezi kodekem a DSC. Druha cast pojednava o spektralnm odectanm a realizaci programu.
KLICOVA SLOVA zpracovan cslicovych signalu, DSP, zpracovan reci, spektraln odectan, FFT, DSC, 56858, kruhova pamet’
ABSTRACT This master’s thesis is focused on realization spectral subtract on signal controller DSC56858. The first part is focusing on initialization DSC, setting codec and set up communication between DSC and codec. The second part treat about spectral subtract and realization of code.
KEYWORDS digital signal processing, DSP, voice processing, spectral subtract, FFT, DSC, 56858, circular memory
HUDEC, Antonn Spektraln odectan v signalovem procesoru: diplomova prace. Brno: Vysoke ucen technicke v Brne, Fakulta elektrotechniky a komunikacnch technologi, Ustav telekomunikac, 2010. 36 s. Vedouc prace byl Ing. Petr Sysel, Ph.D.
PROHLASENI
Prohlasuji, ze svou diplomovou praci na tema ” Spektraln odectan v signalovem
procesoru“ jsem vypracoval samostatne pod vedenm vedoucho diplomove prace a
s pouzitm odborne literatury a dalsch informacnch zdroju, ktere jsou vsechny citovany
v praci a uvedeny v seznamu literatury na konci prace.
Jako autor uvedene diplomove prace dale prohlasuji, ze v souvislosti s vytvorenm
teto diplomove prace jsem neporusil autorska prava tretch osob, zejmena jsem nezasahl
nedovolenym zpusobem do cizch autorskych prav osobnostnch a jsem si plne vedom
nasledku porusen ustanoven § 11 a nasledujcch autorskeho zakona c. 121/2000 Sb.,
vcetne moznych trestnepravnch dusledku vyplyvajcch z ustanoven § 152 trestnho
zakona c. 140/1961 Sb.
1.2 Nastaven kokedu a DSC . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.1 Nastaven na vyvojove modulu DSC56858XUM . . . . . . . . 14
1.2.2 Inicializace ESSI . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.4 Cten a zapis dat z kodeku . . . . . . . . . . . . . . . . . . . . 18
1.3 Detekce reci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 Spektraln odectan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.5 Rychla Fourierova transformace . . . . . . . . . . . . . . . . . 23
1.4.6 Kruhova vyrovnavac pamet’ . . . . . . . . . . . . . . . . . . . 24
1.4.7 Reprezentace dat . . . . . . . . . . . . . . . . . . . . . . . . . 25
2 Vlastn resen 28
2.1 Popis resen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2 Popis programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.1 Funkce main . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.3 Funkce readFromCodec . . . . . . . . . . . . . . . . . . . . . . 32
2.2.4 Funkce sendToCodec . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.5 Funkce VAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
SEZNAM OBRAZKU
1.3 Propojen kodeku s DSC na vyvojove desce . . . . . . . . . . . . . . . 11
1.4 Struktura ramce na ESSI sbernici . . . . . . . . . . . . . . . . . . . . 12
1.5 Struktura ramce na SPI sbernici . . . . . . . . . . . . . . . . . . . . . 12
1.6 Prenos na ESSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7 Registr STXCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.8 Registr SRXCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9 Registr SCR2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.10 Registr SCR3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.11 Registr SCR4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.12 Registr SFCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.15 Schema casove posloupnosti zpracovavan dat . . . . . . . . . . . . . 22
1.16 Princip kruhove pameti . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1 Vyvojovy diagram programu main . . . . . . . . . . . . . . . . . . . . 37
4.2 Vyvojovy diagram programu main 2.cast . . . . . . . . . . . . . . . . 38
4.3 Vyvojovy diagram programu Codec OnFullRxBuf . . . . . . . . . . . 39
4.4 Vyvojovy diagram programu Codec OnFullRxBuf 2.cast . . . . . . . . 40
4.5 Vyvojovy diagram programu sendToCodec . . . . . . . . . . . . . . . 41
4.6 Vyvojovy diagram programu sendToCodec 2.cast . . . . . . . . . . . 42
4.7 Vyvojovy diagram programu sendToCodec 3.cast . . . . . . . . . . . 43
4.8 Vyvojovy diagram programu readFromCodec . . . . . . . . . . . . . . 44
4.9 Vyvojovy diagram programu readFromCodec 2.cast . . . . . . . . . . 45
4.10 Vyvojovy diagram programu VAD . . . . . . . . . . . . . . . . . . . . 46
SEZNAM TABULEK
1.2 Nastaven frekvence vzorkovan pomoc pinu na prepnaci SW5. . . . 14
1.3 Pomer SCLK ku CLKIN . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 Odhad pamet’ova narocnost programu . . . . . . . . . . . . . . . . . . 23
1.5 Zavislost pamet’ove narocnosti na velikosti segmentu . . . . . . . . . . 23
UVOD
Diplomova prace se zameruje na spektraln odectan a implementac na DSC (Dig-
ital Signal Controller). Spektraln odectan je oblbenou metodou pro odstranovan
sumu u hovorovych signalu. Tato metoda je zalozena na tom, ze pri mluven vznikaj
pauzy (pro oddelen slov, vet, atd.) bez uzitecneho signalu, ze kterych se da odhad-
nout sum, ktery se pak ve spektraln oblasti od puvodnho signalu odecte. Tato
metoda patr mezi jednokanalove metody (k separovan zvuku od sumu mame jen je-
den signal), filtr je nelinearn (protoze filtrace je realizovana odectanm ve spektraln
oblasti), v case prispusobuje odhad sumu , ale trp tzv. hudebnm sumem, dky
nepresnemu odhadu sumu jsou nektere kmitocty potlaceny uplne, coz clovek vnma
jako neprjemne zvuky.
obsahuje i kodek CS4218.
1 TEORETICKY POPIS
1.1 Audio Kodek
CS4218 firmy Cirrus Logic je stereofonn audio kodek, ktery obsahuje 2 A/D a D/A
prevodnky (levy a pravy kanal), vstupn antialiasing filtry a vystupn vyhlazovac
filtry a zeslen vstupu i vystupu. Dokaze vzorkovat s kmitocty 8 az 48 kHz pri
16bitove presnosti.
Tento kodek je pouzit, protoze je soucast vyvojoveho kitu pro DSC 56858
(viz [4]), na kterem se bude spektraln odectan realizovat.
1.1.1 Popis jednotlivych bloku
Obr. 1.1: Blokove schema kodeku cs4218
Na obr. 1.1 vidme schema kodeku CS4218, ktery se sklada z jednotlivych lo-
gickych bloku.
Vstupn obvody Kodek ma pary vstupu RIN1,LIN1 a RIN2,LIN2, ze kterych je
mozne v kodeku zvolit, ale v nasem prpade je na vyvojovem modulu pouzit jen
9
jeden vstup, druhy je uzemnen. Vstup RIN1 a LIN1 je zapojen tak, ze na vstupech
RIN1 a RIN1 ocekavame linkovou uroven signalu (0,1 az 0,9 V) pres 3,5 mm Jack
konektor.
Vystupn obvody Kodek CS4218 ma jeden vystupn par LOUT1 a LOUT2, na desce
je vystup veden do konektor Jack 3,5 mm, ale take paralelne napojen na operacn
zesilovac LM4850, ktery zesl signal pro pripojen sluchatek (jeho parametry viz [5]).
Zapojen vidme na obr. 1.2 .
Obr. 1.2: Zapojen vstupu a vystupu
Vstupn filtry Vstupn (antialiasing) filtry pro levy i pravy kanal jsou reseny
pomoc decimace vzorku. Podle nastaveneho kmitoctu vzorkovan jsou odfiltrovany
vets kmitocty nez je Fvz/2 . Takze pro prpad kdyz nastavme vzorkovan kmitocet
na 16 kHz, tak doln propust vstupnho filtru bude mt propustne pasmo (utlumu
3 dB ) do 6,4 kHz a nepropustne pasmo (utlum 74 dB ) dosahne u 9,6 kHz.
Vystupn filtry Na vystupu jsou pro kazdy kanal doln propusti, ktere vystupn
signaly vyhlad, vce o problematice viz [3].
Mody kodeku Kodek muze pracovat v nekolika modech (vce informac o rezimech
modu kodeku viz [3]).
• Mod kodeku 3 a 5 - Kodek pouzva jen ESSI, pres kterou prijma hovorove
data a rdc data, a posla na vzorkovane data se stavovymi informacemi jako
verze kodeku, detekce chyby aj. viz [3]
• Mod kodeku 4 - Kodek pouzva ESSI a SPI sbernici. Rdc informace jsou
prenaseny pomoc SPI sbernice zvlast’ a pres ESSI se prenas jen vzorky.
10
U vyvojovem modulu DSP 56858 je pouzit mod 4, takze pres ESSI se poslaj jenom
navzorkovane data, a pres SPI se poslaj rdic data pro kodek zvlast’. Zapojen je
videt na obr. 1.3 .
sbernice, ktera byla vyvinuta z potreby leps synchronizace. V prpade, kdyz se
periodicky poslaj data, je dulezita presna synchronizace jednotlivych ramcu. ESSI
podporuje duplexn prenos, umoznuje komunikovat v rezimu synchronnm i asyn-
chronnm (se synchronizac na ramce), v nasem prpade ma jeden kanal pro prjem a
3 kanaly pro vyslan s tm, ze vyslac a prijmac kanaly mohou pracovat na jinych
kmitoctech.
Kodek pouzva pro komunikaci jeden kanal pro prjem vzorku a jeden kanal pro
vyslan vzorku. Strukturu ramce pro prenos vzorku vidme na obr. 1.4. V jednom
ramci, ktery ma velikost 32 bitu, je prvnch 16 bitu pro levy kanal a dalsch 16 bitu
pro pravy kanal.
Sbernice SPI SPI (Serial Peripheral Interface) je synchronn seriova sbernice,
ktera muze pracovat ve duplexnm rezimu Master nebo Slave. Podporuje az 16bitove
ramce s teoretickou rychlost az destky MHz. Kodek v modu 4 pouzva sbernici SPI
k prenaseni rdcch dat. Struktura vyslanych dat kodeku a prijmanych dat z DSC je
na obr. 1.5, ale na vyvojovem modulu nen vyslan od kodeku podporovano (vystup
CDOUT je uzemnen).
Pomoc prijmaneho ramce od DSC lze nastavit predzeslen na vstupu kodeku,
zeslen vystupu kodeku a zakazat vystup (mute). V tab 1.1 je uveden popis jed-
notlivych bitu ramce. SPI sbernice, kterou DSP 56858 ma, je na vyvojovem modulu
pouzita ke komunikaci s extern pamet, sice by bylo mozne na vyvojovem modulu
prepojit sbernici SPI ke kodeku, ale vzhledem k tomu, ze se data poslaj jen pri
zmene nastaven kodeku a to je zpravidla jen pri inicializaci (po zapnut), tak nen
zapotreb k tomu SPI sbernici vyclenit, ale lze to efektivne vyresit i softwarove, emu-
lac SPI. Dky tomu, ze data z DSC jsou pouze vyslana, a nen nutne resit prijman
je softwarova realizace relativne jednoducha.
Obr. 1.5: Struktura ramce na SPI sbernici
Zeslen vstupu a vystupu je nastavovano z DSC pomoc SPI sbernice a tak,
ze se da kdykoliv v prubehu cinnosti zmenit, poslanm noveho nastaven. Na vstupu
kodeku lze signal zeslit az o 22,5 dB a vyuzt tak lepe rozsah A/D prevodnku. Na
vystupu lze zeslit signal az o 46,5 dB.
12
Symbol Popis
1 = DAC vystup potlaceny
1 =vstup leveho kanalu je LIN2
ISR 0 = vstup praveho kanalu je RIN1
1 = vstup praveho kanalu je RIN2
LG3-LG0 zeslen vstupu leveho kanalu
zvetsuje se o 1,5 dB
0000 = zadne zeslen (0 dB)
1111 = maximaln zeslen (22,5 dB)
RG3-RG0 zeslen vstupu praveho kanalu
zvetsuje se o 1,5 dB
0000 = zadne zeslen (0 dB)
1111 = maximaln zeslen (22,5 dB)
LA4-LA0 zeslen leveho vystupnho kanalu
zvetsuje se o 1,5 dB
0000 = zadne zeslen (0 dB)
1111 = maximaln zeslen (22,5 dB)
RA4-RA0 zeslen praveho vystupnho kanalu
zvetsuje se o 1,5 dB
0000 = zadne zeslen (0 dB)
1111 = maximaln zeslen (22,5 dB)
Hodiny Kodek CS4218 nema integrovany krystal, mus se k nemu pripojit extern
krystal jehoz kmitocet mus byt minimalne 256krat vets, nez je kmitocet vzorko-
van (plat pro 4. mod kodeku ). Extern krystal se pripojuje na vstup CLKIN a to
bud’ 11,2896 MHz nebo 12,288 MHz. Na zvolene kmitoctu kodeku zavis rychlost
vzorkovan, zavislost vidme v tab. 1.2. Na vyvojove modulu je pouzit krystal 12,288
MHz.
Nastaven je nutne napred udelat na vyvojovem modulu, nastavenm prepnace SW5
(nastavuje se vzorkovac kmitocet Fvz), pak nastavenm periferi DSC a nasledneho
nastaven kodeku pomoc SPI.
Tab. 1.2: Nastaven frekvence vzorkovan pomoc pinu na prepnaci SW5.
SW 5 SW 5 SW 5
Pozice 1 Pozice 2 Pozice 3 Vzorkovac kmitocet Fvz (kHz)
(MF6) (MF7) (MF8) 12,288 MHz 11,2896 MHz
ON ON ON 48,00 44,10
ON ON OFF 32,00 29,40
ON OFF ON 24,00 20,05
ON OFF OFF 19,20 17,64
OFF ON ON 16,00 14,70
OFF ON OFF 12,00 11,025
OFF OFF ON 9,60 8,82
OFF OFF OFF 8,00 7,35
1.2.1 Nastaven na vyvojove modulu DSC56858XUM
Vzorkovac kmitocet kodeku Fvz nastavme na hodnotu 16 kHz pomoc prepnace
SW5. Ke kodeku je pripojen krystal 12,288 MHz, tak podle tabulky 1.2 je Fvz rovno
16 kHz pri nastavenm pozic prepnacu OFF ON ON.
1.2.2 Inicializace ESSI
Vyvojovy modul je navrhnut tak ze, ESSI na DSC pracuje v Slave modu a v kodeku
jako Master, je to kvuli tomu, ze kodek je pak mene nachylny k rusen. Pri zmene
vzorkovacho kmitoctu se zakonite mus zmenit rychlost prenosu na ESSI lince,
protoze je kodek Master, a vysla casovan, tm je situace jednodus, a nen nutne
menit nastaven ESSI na DSC. Zavislost kmitoctu sbernice na kmitoctu vzorkovan
vidme v tab. 1.3 CLKIN je kmitocet externch hodin a SCLK je kmitocet hodin na
ESSI sbernici.
Na obr. 1.6 vidme, jak kodek komunikuje pres ESSI sbernici. Pred samotnou ko-
munikac vysle synchronizacn bit, ktery mus byt aktivn v sestupne hrane casovan
SCLK, a pote zacne vyslat a prijmat data od DSC. Ale pri vychozm nastavenm
(po resetu) je sbernice ESSI na DSC nastavena jinak, a proto ji musme spravne
nakonfigurovat.
Doporucene porad inicializace registru pro sbernici ESSI
1. Nastavit registry SRXCR, STXCR, SCR2, SCR3, a SCR4 na rezim Slave (kodek je
pri vyslan Master) mode Normal (na sbernici komunikuje jen jedno zarzen).
14
8 48,00
12 32,00
16 24,00
20 19,20
24 16,00
32 12,00
40 9,60
48 8,00
Obr. 1.6: Prenos na ESSI
2. Nastavit casovan prijmace a vyslace, DSC pracuje jako Slave takze signal
CLOCK prijma.
4. Povolit sbernici ESSI ( ESSIEN = 1).
5. Povolit RXFIFO ( RFEN = 1) a RTFIFO ( RTEN = 1) nastavit prijmac a
vyslac threshold pro RXFIFO a TXFIFO.
6. Povolit prerusen vyslan a prjmu.
7. Nastavit RE a TE bit (RE = 1 a TE = 1) k povolen vyslan a prjmu na
15
Registr STXCR a SRXCR
WL = 3 (World length) velikost slova 16 bitu
DC = 1 (Frame Rate Divider Control) kazdy ramec je prijat
PM = 0 (Prescaler Modulus Select) Modulo registr pred-delicky nen pouzit
Nastaven registru STXCR = 0x6100 a SRXCR = 0x6100
Obr. 1.7: Registr STXCR
Obr. 1.8: Registr SRXCR
TIE = 1 (Transmit Interrupt Enable) povol prerusen pri odeslan dat
SYN = 1 (Synchronous Mode) povol synchronizaci
TSHFD = 0 (Transmit Shift Direction) nejvce vyznamny bit se bude vyslat jako
prvn
TSCKP = 0 (Transmit Clock Parity) data jsou cteny pri nabezne hrane signalu SCLK
ESSIEN = 1 (ESSI Enable) povol sbernici ESSI
NET = 1 (Network Mode)povol network mode
TFSI = 0 (Transmit Frame Sync) synchronizace ramce je pri urovni HIGH u SYNC
signalu
TFSL = 1 (Transmit Frame Sync Length) nastavuje velikost synchronizace na 1 bit
TEFS = 1 (Trensmit early Frame Sync) synchronizacn bit je vyslan pred daty
16
Registr SCR3
RSHFD = 0 (Receive Shift Direction) v prijatych datech je prvn bit nejvyznamnejs
RSCKP = 0 (Receive Clock Polarity) data jsou ctena behem vzestupne hrany
RFSI = 0 (Receive Frame Sync Invert) synchronizace ramce je pri urovne u SYNC
signalu
Registr SCR4
TXSF0 = 1 (Transmit Status Flag Control 0) povolen aby vyslac kanal 0 mohl
menit prznaky (flagy TFF, TDE, TUE, a TFE) a tm vyvolat prerusen
SCKD = 0 (Clock Source Direction) SCK pin se chova jako vstupn (mod slave)
Nastaven registru SCR4 = 0x400
Obr. 1.11: Registr SCR4
Registr SFCSR
RFWM = 8 (Receive FIFO Full Watermark) prznak pretecen FIFO bude az bude
17
TDWM = 1 (Transmit FIFO Empty Watermark) prznak naplnen TXFIFO bude
pokud zbude uz jen jeden volny slot
Nastaven registru SFCSR = 0x129
Obr. 1.12: Registr SFCSR
1.2.3 Inicializace SPI a kodeku CS4218
Vzhledem k tomu, ze pouzvame softwarove emulovanou SPI (viz kap. 1.1.1 ) je
zapotreb nastavit jen registry GPIO obvodu. Na obr. 1.3 je videt, ze jsou pouzity
piny PE2 pro MOSI, PE3 pro CCLK a PC3 pro CS. Pro kazdy pin je nutno nastavit
prslusne bity v registrech.
Registr GPIOX PER
(Peripheral Enable Register) urcuje, jestli se pin chova jako GPIO (General Pur-
pose Input/Output - standardn in/out pin) nebo ma nejakou jinou funkci, pokud
to pin umoznuje (naprklad ACMP, A/D aj.). Zapsanm nuly (vychoz hodnota
registru) se vsechny piny chovaj jako GPIO pro dany port, takze hodnota registru
GPIOE PER muzeme nechat v poresetovych hodnotach, ale v portu GPIOC PER musme
nastavit chovan pinu PC0 az PC2 a PC5 jako vstupy a vystupy ESSI sbernice. Tedy
do registru GPIOC PER nastavme hodnotu 39.
Registr GPIOX DD
(Data Direction) nastavuje smer. Pokud je pin v modu GPIO tak tento registr
urcuje, jestli je to vstupn nebo vystupn pin. Zapsan nuly znamena, ze pin je
vstupn, zapsanm jednicky znamena, ze pin je vystupn. Piny, ktere pouzvame
k SPI komunikaci, jsou vsechny vystupn. Do registru GPIOE DDR nastavme 6 a do
registru GPIOC DDR nastavme hodnotu 8.
1.2.4 Cten a zapis dat z kodeku
Jakmile DSC prijme pres ESSI vzorek od kodeku, vyvola se prerusen, data z prij-
macho registru se zkopruj do vstupn pameti (vstupn i vystupn pamet’ je kruhova
18
Obr. 1.13: Prenost na SPI
vyrovnavac pamet’ viz kap. 1.4.6 ), pokud jsou ve vystupn pameti nachystany data,
tak jsou zkoprovana do vyslacho registru ESSI sbernice.
1.3 Detekce reci
Pri spektralnm odectanm je nutne urcit, ktery segment obsahuje uzitecnou infor-
maci (rec) a ktery segment prenas jen sum. A k tomu se pouzvaj detektory hlasove
aktivity.
Detektory hlasove aktivity (VAD voice activity detection) jsou algoritmy navrzene
pro to, aby dokazali v hovorovem signalu urcit, zdali dany usek (v nasem prpade
segment) obsahuje nebo neobsahuje rec. Obecne se v reci vyskytuje mnoho pauz a
odmlk, ktere jsou vetsinou pro zpracovani reci nezadouc a proto je nutne je od reci
nejakym zpusobem odlisit, a prave pro to se pouzvaj VAD algoritmy. V nasem
prpade je pouzit detektor na principu prahovan energie segmentu. Tato metoda
vychaz z predpokladu ze rec ma vyrazne vets energii nez sum.
19
1.4 Spektraln odectan
Princip spektralnho odectan je videt na obr. 1.14 Vzorky x jsou poslany z kodeku
do DSP a ukladana do vstupn pameti, pote jsou jako segment x[n] pomoc FFT
prevedeny do spektraln oblasti X[n]. Vhodnou metodou je odhadnuto spektraln
hustota sumu S[n], a to je odecteno od spektralnch koeficientu X[n], vysledne
spektrum Y [n] (zbavene sumu) je inverzne transformovano pomoc IFFT do casove
oblasti y[n]. Nakonec jsou jednotlive vzorky y poslany z vystupn pameti do kodeku.
Obr. 1.14: Schema spektralnho odctan
1.4.1 Segmentace
Hovorove signaly se obvykle segmentuj do ramcu s dobou trvan okolo 20 az 30
ms, ktere se jev pro lidsky sluch jako kvazistacionarn (po castech stacionarn).
Algoritmus FFT je nutne poctat s velikost segmentu mocniny dvou (viz [1]). Takze
je nutne prizpusobit velikost ramce vzorkovacmu kmitoctu.
Vzorec pro vypocet velikosti segmentu je
N = Fvz ∗ Tseg (1.1)
kde je Tseg velikost segmentu v case a N je pocet vzorku. V nasem prpade, mame
vzorkovac kmitocet Fvz =16 kHz a po dosazen do vztahu 1.1 vychazej
pro Tseg = 20 ms je N = 380,
pro Tseg = 30 ms je N = 480,
nejblizs mocnina dvou je 256 a 512. Ze vztahu 1.1 muzeme odvodit vztah pro
vypocet delky segmentu
Fvz
(1.2)
po dosazen zjistme ze, Tseg256 =16 ms a Tseg512 = 32 ms. Vybral sem segment
o velikosti 512, protoze se blz vc pouzvanym casum a bude mt leps kmitoctove
20
1.4.2 Vahovan segmentu
Algoritmus vypoctu FFT bere vstupn signal jako periodicky, ale segment ve vetsine
prpadu periodicky nebyva a proto ho zperiodizujeme v algoritmu vypoctu, tm
ale vznikne problem toho, ze spektra zperiodizovaneho signalu se prekryvaj a tm
sctaj, tm vznika chyba (jednotlive spektraln slozky se rozmazavaj), resenm to-
hoto problemu je pouzit nektere vahovac okenko, napr Hammingovo, ktere vynaso-
beno se signalem potlac vyss kmitocty (vce o problematice viz [1]).
Pro vahovan segmentu je vybrano Hammingovo okenko.
Presah segmentu K problematice segmentace patr i nutnost presahu vysledku
po uprave dat. Pri vahovan okenkem je cast energie potlacena a pouhym zarazenm
segmentu za sebe by vznikaly vyrazne zmeny v amplitude vysledneho signalu.
Spektraln odectan patr mezi nelinearn metody filtrace(na vc v case se men
odhad sumu - tudz i filtrace) a pouhem razenm jednotlivych segmentu by vznikaly
nespojitosti v mstech navazovan segmentu. To je reseno presahem, kdy pro vypocet
aktualnho spektra jsou pouzita i cast dat z minuleho vzorku, na na vystupu jsou
k aktualnmu vysledku prictena data z minuleho vysledku prave o velikost presahu.
Tm je zpusobeno, ze jednotlive vzorky na sebe plynuleji navazuj, a navc vhodnou
volbou presahu se res i problem pr vahovanm okenkem, protoze dochaz ke ztrate
energie, a prave dky presahu segmentu je mozne dostat energii vystupnho signalu
rovnou energie signalu pred zpracovanm.
1.4.3 Vypocetn narocnost
Vyznam jednotlivych cast:
• Segment znac cas potrebny k navzorkovan dat pro segment a ulozen do
vstupn pameti.
• Vypocet zobrazuje maximaln dobu po, ktere muze DSC pracovat s daty
(vahovan okenkem, fft,atd.)
• Vystup znamena odeslan dat z vystupn pameti do kodeku.
V dobe Segment 1 vyckava DSC dokud neprijme N vzorku od kodeku, jakmile je
toto splneno, zkopruje se segment ze vstupn pameti do intern a zacna Vypocet
1 a zaroven DSC prijma dals vzorky od kodeku. Doba Vypocet 1 mus byt mens
21
nez je doba prijmut vzorku o poctu N − p, kde N je velikost segmentu a p je
velikost presahu, v prpade nedodrzen by doslo ke ztrate nasledujcho segmentu
(vzhledem k tomu, ze algoritmus ma v case konstantn slozitost, tak by se ztrata
segmentu periodicky opakovala), k cemuz nesm dojt. Na zacatku doby Vysledek 1
jsou data zkoprovany do Vystup 1 (vystupn kruhova pamet’) a odtud jsou poslana
do kodeku a zaroven bylo prijatych novych N − p vzorku od kodeku a ty jsou
spolecne se vzorky se Segment 1, o velikosti presahu, zkoprovany pro Vypocet 2.
V case dokoncen Vypoctu 2, se presah z Vysledek 1 pricte k Vysledku 2 a data,
ktera byla v casti presahu jsou pripravena k odeslan ke kodeku. A tento cyklus se
opakuje pro vsechny dals segmenty.
Obr. 1.15: Schema casove posloupnosti zpracovavan dat
Dulezite informace o systemu pracujc v realnem case je zpozden systemu.
Z obr. 1.15 nam vychaz, ze zpozden vystupu je
Ts = 1
∗ (N + N − p), (1.3)
kde N je pocet vzorku v segmentu a p znac velikost presahu segmentu. Dals
dulezitou hodnotou je doba po kterou muze DSC pracovat s daty, a ta je
Tv = 1
∗ (N− p). (1.4)
Po dosazen pouzitych hodnot (N = 512 a p = 256) vychaz doba zpozden systemu
na 48 ms a doba na zpracovan segmentu je 16 ms.
1.4.4 Pamet’ove pozadavky programu na DSC
Obecne maj mikrokontrolery relativne malo pameti a ani tento DSC nen vyjmkou,
proto je dulezite se zamerit i na pamet’ove narocnost, aby bylo vubec v moznostech
tohoto DSC tento program provadet. V tabulce 1.4 jsou vypsany nejvets datove pole
22
programu. Lze tedy usoudit, ze priblizna velikost programu v pameti RAM bude
uzce souviset s velikost segmentu, ale musme jeste poctat s mnozstvm globalnch
i lokalnch promennych, stack, heapu a dale, ze data byvaj v pameti ukladana
v blocch, ktere nemus odpovdat puvodn velikosti.
Priblizna velikost pameti z tabulky 1.4 vychaz na 20 ∗N ,kde N je pocet vzorku
v segmentu. Z toho predpokladu vychaz tab. 1.5 kde vidme odhad velikosti pameti
pro jednotlive velikosti segmentu. Podle manualu (viz [4]) ma DSC 56858 pamet’
RAM o velikosti az 24000*16bitu, takze pravdepodobne nejvets mozna velikost je
prave 512 vzorku na segment, u velikosti segmentu 1024 vzorku je rezerva okolo
4000*16bitu coz je nedostatecne (je mozne, ze po optimalizaci kodu by velikost
segmentu 1024 byla realna ale 2048 je uz mimo pamet’ove moznosti tohoto DSC).
Tab. 1.4: Odhad pamet’ova narocnost programu
Nazev pameti Velikost v RAM
Vstupn kruhova pamet’ 4 ∗N Vystupn kruhova pamet’ 4 ∗N
Pamet’ pro vypocet L+R kanal 2 ∗ 2 ∗N Pomocna pamet’ pro vypocet FFT 2 ∗N
Pamet’ pro ulozen Hammingova okna N
Pamet’ pro ulozen twidle faktoru N
Pamet’ pro ulozen odhadu sumu L+R kanal 2 ∗ 2 ∗N
Tab. 1.5: Zavislost pamet’ove narocnosti na velikosti segmentu
Pocet vzorku v segmentu Odhadovana velikost v pameti RAM
N 16-ti bitove slova
lyzovan obrazu (signalu). V obecnem prpade se jedna o vyjadren funkce popisujc
obraz v jinych promennych pomoc integraln transformace (v podstate vyjadren
funkce v jine bazi). V nasem prpade se uvazuje tzv. trigonometricka Fourierova
23
transformace, ktera za bazove funkce poklada sin(kt), cos(kt) nebo v komplexnm
tvaru exp(jkt), kde k je cele cslo v prpade Fourierovy rady nebo realna promenna
v prpade Fourierovy transformace.
Rychla Fourierova transformace (FFT Fast Fourier transform) je algoritmus,
ktery umoznuje rychlejs vypocet oproti vypoctu z definicnho vztahu (viz [1]). Kla-
sicka fourierova transformace ma narocnost na vypocet O(N2), rychla Fourierova
transformace ma narocnost O(N ∗ logN), ale mus byt dodrzeno, ze velikost dat nad
kterymi je FFT poctano je mocnina dvou. Vzorec pro vypocet diskretnch hodnot
FFT je
xne (−j2πk n
N ) (1.5)
kde N je celkovy pocet hodnot, k je index spektraln slozky a nabyva hodnoty 0 az
N -1. Inverzn FFT je rozdlna ve znamenku u twidle faktoru a s tm, ze kazdy prvek
je na vystupu podelen poctem vzorku
xk = 1
paraleln a naopak, takze vstupn vyrovnavac pameti ze vstupnch dat, ktere jsou
poslany po vzorcch (seriove), vytvar segment ktery je zkoprovan pro vypocet
(paraleln presun) a naopak u vystupnho je segment po vypoctu (paraleln vstup)
postupne preposlan kodeku (seriovy vystup).
K resen problemu prijman a odeslan vzorku by vyrovnavac pamet’ s kla-
sickym adresovanm byla nevhodna z duvodu prekryvan segmentu, kde je nutne mt
ulozenou historii dat o velikost presahu, takze je nutne krome aktualne nactaneho
ramce mt nekde ulozen cast minuleho, a vyresenou adresaci pri vyctan dat ze
stareho segmentu a aktualnho, a navc jsou neustale od kodeku poslany data nove,
coz zpusobuje velice slozity zpusob adresace. Proto se pouzvaj kruhove pameti,
ktere mnoho problemu odstranuj, ale nektere pridavaj.
V kruhove vyrovnavac pameti software pouzva kazdou pamet’ovou lokaci sek-
vencne, dokud nenaraz na konec bloku. Pak proces zacna znovu na pocatku adre-
soveho prostoru a data prepisuje, tedy opakuje se v kruhu obr. 1.16.
U kruhove vyrovnavac pameti se pouzvaj dva ukazatele Read a Write. Read
slouz pro zapisovan dat do pameti a Write slouz pro cten dat z pameti. Na
zacatku ukazuj Read i Write na prvn polozku pameti. Pokazde, kdyz je pomoc
Read precten vzorek, tak je tento ukazatel zvetsen a pokud je jeho adresa vets, nez
je velikost pameti, tak je do Read ulozena adresa prvn polozky (stejne se pracuje i
24
Obr. 1.16: Princip kruhove pameti
s ukazatelem Write). To znamena ze vzdalenosti Read od Write urcuje pocet dat
ve vyrovnavac pameti, vzorec pro vypocet poctu dat v kruhove pameti je
Ndat = (Write−Read) mod Nb (1.7)
kde Ndat je aktualn pocet vzorku ve vyrovnavac pameti, Write a Read obsahuj
adresy dat a Nb je velikost kruhove vyrovnavac pameti.
Ze vzorce 1.7 muzeme urcit dva limitn stavy, ktere kdyz nastanou je nutne je
osetri.
Limitn stavy jsou:
1. Pokud plat Read = Write, a je vyvolana instrukce cten, dojde k podtecen a
Read ukazuje na data, ktera nejsou aktualn. V praxi se s tm setkame pokud
vyctame z pameti data rychleji nez jsou zapisovana. Nen moznost jak tuto
chybu napravit, a je nutne cekat na dals data.
2. Pokud se Write = Read+1, a je vyvolan zapis do pameti, dojde k pretecen a
Read neukazuje na prvn polozku fronty (nejstars vzorek), ale na prvn (nej-
novejs vzorek). Tato chyba se odstranuje bud’ tak, ze jsou vsechny nove data
zahozena, dokud se nevyctou nejstars (nezvets se Read ukazatel) nebo ze
se zapisem (zvetsen ukazatele Write) zvets i ukazatel Read tak, aby stale
platilo Write ≥ Read + 1, neboli nejstars data jsou odstranovana.
1.4.7 Reprezentace dat
Cslicova technika pracuje s csly ve dvojkove soustave. Dvojkova soustav je polyadicka
cselna soustava se zakladem Z = 2. Jako v kazde jine polyadicke soustave je i zde
kazde cslo tvoreno posloupnost cslic, ktere nabyvaj hodnot 0, . . . Z − 1, v binarn
cselne soustave tedy 0,1. Kazda cslice ma svou vahu 2i a libovolne realne cslo A
lze vyjadrit jako soucet mocnin o zakladu 2
25
Ve dvojkove soustave definovane vztahem 1.8 lze zobrazit jakekoliv realne cslo.
Omezena delka registru v cslicovych systemech ma za nasledek i omezeny pocet
zobrazitelny csel a z toho duvodu i omezenou presnost zobrazen. Pro delku registru
B lze prepsat vztah 1.8 do tvaru
A = k∑
k−1 + . . . + a12 1 + a0 + a−12
−1 + . . . + a−b2 −b, (1.9)
kde k znac nejvyss vahu cele casti csla A a b nejmene vyznamneho bitu, ktery
urcuje rozlisen dvou sousednch csel, tzv. kvantizacn krok g,
g = 2−b. (1.10)
V registru delky B muzeme zobrazit jak celou, tak i zlomkovou cast csla. Delka
registru B je
B = k + b + 1. (1.11)
Pri tomto vyjadren cslaAje umstena radova carka za clenem a0 a rozdeluje cast
celou (integer) Ai a zlomkovou (fractional) Af
A = Ai + Af = k∑ i=0
ai2 i +
a−i2 −i. (1.12)
Umsten radove carky v registru je fiktivn, zalez jen na nas volbe reprezentace
dat. Mus byt vsak dodrzeno a respektovano pro vsechny registry a vsechny aritmet-
icke operace. V nasem prpade je umsten radove carky bud’ za poslednm zprava,
pak se jedna o celocselnou reprezentaci(integer) nebo ze prvnm bitem zleva, pak
se jedna o zlomkovou reprezentaci csel(fractional).
Zaporna csla
Ve vetsine algoritmu DSP pracujeme s kladnymi i zapornymi csly. Existuj v zasade
tri nejbeznejs metody reprezentace zapornych csel
• znamenkovy bit s absolutn hodnotou
• dvojkovy doplnek
• jednickovy doplnek
26
V predchozch odstavcch jsme poznali, ze v B-bitovem registru lze zobrazit 2B
ruznych csel. Budeme-li chtt v registru ulozit jak kladna tak i zaporna csla, pak
budeme muset rozdelit registr priblizne na dva stejne casti. V mikrokontrolerech
se skoro vyhradne pouzva jen dvojkovy doplnek, takze nasleduj uvahy budou
smerovany ohledne neho.
Dvojkovy doplnek Jedna se nejcasteji pouzvany zpusob zobrazen csel v tech-
nickych realizacch. Pro kladna csla X ≥ 0 je zobrazen shodne s neznamenkovymi
csly. Pro csla X < 0 se vytvar dvojkovy doplnek jako doplnek absolutn hodnoty
csla |X| do hodnoty 2B, kde B je pocet bitu pouziteho registru. Odtud plyne nazev
2-doplnek. Prepis pro vytvoren dvojkoveho doplnku X2K binarn csla Xbin pro dane
dekadicke cslo Xdek v registru delky B = b + 1 je
Xbin(b + 1) ≡
Dvojkovy doplnek k danemu binarnmu cslu nalezneme podle vztahu
X = XM
kde XM znac libovolnou celocselnou konstantu, ktera slouz jako mertko. Bule-li
napr. XM = 2b bude se jedna o zobrazen integer, pro XM = 20 se jedna o zo-
brazen fraction. Jako praktickou pomucku, vyplyvajc ve vztahu 1.13 pri stanoven
dvojkoveho doplnku negujeme cslo XB bit po bitu, a pricteme 1 v nejnizsm radu
X2K(b + 1) = Xbin(b + 1) + 1 (1.15)
Pri aplikacnch se signalovymi procesory pracujeme nejcasteji se zlomkovymi csly,
tedy
Dvojkovy doplnek zlomkoveho csla s radovou carkou za prvnm bitem zleva,
vytvarme jako doplnek do csla 21 = 2.0. Vaha nejvyssho bitu je 20 a nejnizsho
2−b. Dekadickou hodnotu zlomkoveho csla −1 ≤ X ≤ 1 stanovme z binarnho
vyjadren podle vztahu 1.14 pro XM = 20:
Xdek = −XS + b∑ i=1
Xi2 −i (1.16)
Definicn obor csel ve dvojkovem doplnku je nesymetricky vzhledem k nule. Zlomkova
csla lze zobrazit v intervalu(−1, 1− 2−b).
27
2 VLASTNI RESENI
2.1 Popis resen
Program je psan v jazyce C ve vyvojovem prostred CodeWarrior. Jako zaklad pro
program jsem pouzil demoprojekt (umsten je Precessoru Expert Stationery→ DemoApplication→Telephony→Codec→56858). Tento ukazkovy projekt nastav
DSC a kodek a po te v hlavn smycce prijma a vysla bloky dat vzorku. Pro-
jekt byl pro potrebu spektralnho odctan kompletne predelan. Obsluha prijman a
vyslan vzorku byla presunuta do prerusen Codec OnFullRxBuf, kde jsou ukladany
do vstupn a vystupn vyrovnavac kruhove pameti. Ve hlavn smycce programu se
vykonava samotne spektraln odctan.
Projekt pouzva pro nastaven DSC a kodeku beany. Bean je kompoment pro-
gramu Precessoru Expert (je soucast CodeWarrioru), ktery umoznuje jednoduse
nastavit registry dane periferie, obsluhovat prerusen a jine funkce. Pomoc beanu
56858 je nastaveno CPU, bean Audio Codec CS4218 inicializuje ESSI, posla nas-
taven kodu a obsluhuje prerusen.
V beanu Audio Codec CS4218 je komunikace (prijman a vyslan dat) na ESSI
resena pomoc intern vstupn a vystupn vyrovnavac pameti. Ovsem pro nase ucely
jsou tyto vyrovnavac pameti nevhodne (jsou to intern funkce Procesora Experta,
ktery pri kazdem pregenerovan intern funkce prepisuje - vrac uzivatelske zmeny),
tak je nastavena hodnota techto pameti na 32 (v Bean Inspektrou polozka Fifo
size) s tm, ze tato hodnota by nemela byt nikdy dosazena. V beanu je prijman
implementovano tak, ze ESSI ma vlastn buffer na 8 vzorku, pote co prijme 8 vzorku
vyvola prerusen Inhr2 InterruptRx,a uloz tyto data na intern kruhove pameti a
zavola se funkce Codec OnFullRxBuf, kde je muzeme pomoc funkce Codec Read
vycst. Pomoc funkce Codec Write zapisujeme data do intern vystupn pameti
kodeku, ktere jsou zkoprovana do vyslacho registru ESSI jakmile je prazdny.
V prubehu vytvaren kodu se objevilo nekolik problemu. DSC 56858 podle ma-
nualu (viz [6]) nepodporuje standardn trigonometricke a algebraicke funkce s csly
s pohyblivou desetinou carkou (double a float), coz nam zpusobovalo problemy s gen-
erovanm tabulky pro Hammingovo okno a tabulku twidle faktoru, tento problem
byl vyresen predgenerovanm tabulek pro 1024 vzorku. Chtena velikost tabulky se
vytvor podvzorkovanm. Dalsm problemem je, ze kodek vysla priblizne prvnch
160 vzorku jako nuly, nez zacne vyslat skutecne hodnoty (plat jen po inicializaci,
takze v realnem case zanedbatelne)
28
2.1.1 Volan funkc assembleru
Program je psan v jazyce C, ale jazyk C neumoznuje u promennych s pevnou de-
setinnou carkou (viz kap 1.4.7), definovat jestli se jedna o zlomkovy tvar, nebo cela
csla. Pouzit csel s pohyblivou carkou, nebo prevaden csel , by bylo vypocetne
velmi neefektivn a kvuli tomu je nutne volat funkce z assembleru. Existuj tri metody
jak pouzvat funkce z assembleru v jazyku C:
• Klcove slovo asm
• Intrizitn funkce.
Klcove slovo asm
Za klcovym slovem asm jsou bud’ slozene zavorky(v nich muze byt vce assem-
bler funkc) nebo nasleduj normaln zavorky (v nich muze byt pouze jedna funkce
v assembleru). V nasem prpade nen pouzit tohoto zpusobu volan funkce vhodne,
protoze v prubehu programu nevme co je v kterych registrech ulozeno, a jenom
velice slozite by se to resilo.
Ukazka volan:
Volanm funkce napsane v assembleru
Kod v assembleru je napsan jako funkce v jazyce C, vyhodou toho volan je ze pred
vyvolanm funkce jsou vsechny registry ulozeny, takze muzeme s registry bezpecne
pracovat. Ukazka volan:
{
Intrizitn funkce, jsou obsazene v knihovne intrinsics 56800E.h, ktera je soucast
29
assembleru. Vyhodou tohoto prstupu je to, ze umoznuje jednoduseji volat volat
funkce z assembleru, a tm lze urcit jak se ma s promennymi pracovat (nejenom typ,
ale take saturace, velikost slova atd.) a zefektivn to provaden vypoctu.
Ukazka volan:
result = L_sub(la,lb);
vych diagramu.
2.2.1 Funkce main
Jedna se o hlavn funkci, z ktere jsou volane jednotlive podprogramy. Program po
inicializaci DSC prejde do nekonecne smycky, ve ktere ceka na navzorkovan seg-
mentu a nasledneho vypoctu.
1. Jedna se o intern funkci beanu Audio Codec CS4218 , kde je inicializace CPU
a vsech pouzvanych periferi.
2. Jedna se o funkci beanu, ktera povoluje prerusen pri prjmu na ESSI, a tm
padem je zabezpeceno, aby nedoslo k nechtenemu prijet dat od kodeku, dokud
nen hotova cela inicializace.
3. Napln tabulku pro vahovan Hammingovym oknem a twidle faktoru (pro-
kladane funkce cos a sin pouzity pro vypocet FFT) pomoc predgenerovane
tabulky. Vzorky jsou pro segmenty o velikosti 1024 vzorku a ostatn rozmery
jsou vytvoreny pomoc podvzorkovan, prpadne aproximac.
4. Program ceka dokud nen promenna start rovna jedne, tato promenna se nas-
tav v prerusen Codec OnFullRxBuf pokud je uz prijat segment pro vypocet.
5. Vynulovan promenne start zpusob, ze pri prstm prechodu se u 4. bodu
zastav, dokud nebudou pripraveny vstupn data. Promenna inprog se nastav
na hodnotu 1, aby program vedel, ze je aktualne ve vypoctu spektralnho
odctan. A pokud by doslo v prerusen Codec OnFullRxBuf k navzorkovan
dostatecneho mnozstv dat (bude splnena podmnka u 4. bodu, tak 5.bod
zabezpec, aby nebyli prepsany data s kterymi se provad vypocet. Jedna se
o chybovy stav, kdy DSC nestha spoctat spektraln odctan vcas. To se da
napravit zmensenm segmentu (narocnost je N∗logN) , zmensen vzorkovacho
kmitoctu (zvets se perioda prijmanych dat od kodeku), zmensen presahu
30
(zavislost je linerarn) a nebo pokud je vypocet dvoukanalovy (stereo), tak
zmenit na jednokanalovy (dvakrat mene narocne na vypocet).
6. Nacte navzorkovane data z kodeku. Popis viz 2.2.3.
7. Detekuje jestli segment obsahuje rec. Popis viz 2.2.5.
8. Funkce fft potrebuje vstupn data v reverzne bitovem adresovan, o coz se
postara tato funkce. Je psana v assembleru a nen to in-place metoda, takze
potrebuje zvlast’ pole pro vstupn data a zvlast’ pole pro vystupn data (pro
nase ucely by byla vhodnejs metoda in-place).
Vstupnmi parametry: vstupn vektor, vystupn vektor a pocet vzorku.
9. Vypocet FFT, je to funkce psana v assembleru, optimalizovana na tento DSC
(prevzato z ucebnch materialu k predmetu MSPR viz [8]). Upravil jsem tento
program tak, aby se dal volat z jazyka C a aby se spravne predaly parametry.
Vstupn pole je zaroven i vystupn (in-place metoda), jelikoz vystup z funkce
fft je komplexn cslo (ulozeno ve tvaru Real1,Img1,Real2,Img2...), tak vstup-
n pole mus mt dvojnasobnou velikost, nez je velikost segmentu.
Parametry funkce jsou: velikost segmentu, pole dat, pocet sekc FFT, tabulka
twidle faktoru.
10. Pokud byl aktualn segment detekovan jako bez uzitecne informace (obsahuje
pouze sum a ne rec), tak je spektrum sumu ulozeno (poprpade vhodnou
metodou pricteno k aktualnmu odhadu sumu).
11. Od vypocteneho spektra hovoroveho signalu odecteme odhad sumu. Aby ne-
dochazelo k nulovym ci dokonce k zapornym hodnotam u spektralnch koefi-
cientu, je zavedena podmnka, ze spektraln koeficient po odecten sumu muze
mt minimalne 1/128 velikosti puvodn hodnoty.
Prklad: Pokud by mel spektraln koeficient na pozici 200 hodnotu 100 a
odhad sumu z minuleho segmentu by byl pro tuto pozici 300, po odecten
vznikne zaporna hodnota, coz je osetreno a na danou pozici je ulozena hod-
nota 100/128.
12. Vypocet inverzn Fourierovi transformace. Jedna se upravenou funkci fft
(v 9.bode), ve ktere je zmeneno znamenko u twidle faktoru, a odstraneno
delen 2 v jednotlivych sekc (u puvodn fft je to osetren proti pretecen
promennych).
13. Protoze v 8.bode nen pouzita in-place metoda, je nutne prekoprovat data do
intern pameti prslusneho kanalu.
14. Do promenne lastStateN L je ulozeno, jak byl segment detekovan, to je nutne
pro detektor VAD u rozhodovan pro prst segment.
15. V nasledujcm bode se opakuje cely vypocet od bodu 7 az 14 pro pravy kanal.
16. Zkoprovan dat do vystupn pameti (popis funkce viz 2.2.4.
17. Promenna Result se nastav do 1, a tm padem mohou byt v udalosti
31
Codec OnFullRxBuf poslany vystupn data do kodeku.
18. Nekonecne smycka, navrat na zacatek zpracovan (bod 4) a cekan na nacten
dalsho segmentu.
Vyvojovy diagram popisuje podprogram Codec OnFullRxBuf, ktery se vola v pre-
rusen jak bylo zmneno vyse (viz 2.1).
1. Je nacten jeden vzorek z kodeku, strdave jsou nactany 16bitova slova pro
levy a pro pravy kanal.
2. Je inkrementovan ukazatele vstupn kruhove pameti pWRITE a ctac prijatych
vzorku.
3. Je implementovana aritmetika modulo kruhove pameti.
4. Pokud je navzorkovano dostatecny pocet dat v nasem prpade 1024 pro prvnm,
pro druhe je to uz NUM SAMPLES-2*OVERLAP SIZE to je zabezpeceno dky pod-
mnce v 5.bode
5. Nastaven, aby prste bylo vyvolano koprovan (splnena 4.podmnka) po prijet
NUM SAMPLES-2*OVERLAP SIZE, pokud se do counter uloz hodnota presahu
(vzorky jsou pro levy a pravy, takze dvojnasobna hodnota), tak podmnka
4. bude splnena za prave 512 vzorku.
6. Pokud by se promenna inprog rovnala 1 znamenalo by to, ze v hlavnm pro-
gramu prave probha vypocet, a ze CPU nestacilo vypoctat hodnoty vcas, a
uzivatel je informovan o chybe.
7. Nastav se prznak pro spusten vypoctu v hlavnm programu main, ktery se
zacne vykonavat po navratu programu z prerusen.
8. Pokud uz jsou nejake data ve vystupn vyrovnavac pameti, tak se spust
prekoprovan.
2.2.3 Funkce readFromCodec
Prekopruje vzorky ze vstupn pameti pFromCodec do pamet pro vypocet pCompR
a pCompL tak, ze vyctan z pameti pFromCodec je vzdy posunuto o velikost presahu.
Vyvojovy diagram znazornujc algoritmus pro cten vstupn vzorku jsou na
obr. 4.8 a 4.9.
1. Cyklus ktery prekopruje NUM COMPT-OVERLAP SIZE vzorku ze vstupn pameti
do pameti urcene pro vypocet pCompR a pCompL, je dulezite v celem programu
32
dodrzovat stejne porad v jakem porad je zapisovano a vyctany vzorky pro
pravy a levy kanal.
2. Prekoprovan vzorku ze vstupn pameti pFromCodec do pameti pCompR (data
v pCompR jsou v komplexnm tvaru, proto dvojnasobna adresa pro realnou
cast), a zvetsen ukazatele.
3. V tomto podprogramu dochaz k vynasoben vzorku s odpovdajc pozic pole
Hammingova okna.
4. Kontrola pretecen kruhove pameti, pokud by byla splnena podmnka zname-
nalo byto, ze doslo k podtecen, tudz ze kodek nedodava data.
5. Zkoprovan vstupu i do pCompL.
6. Vahovan vzorku.
7. Pouzit logiky kruhove pameti.
8. Kontrola podtecen kruhove pameti.
9. Ulozen aktualn hodnoty pREAD, do pomocne promenne pREAD, aby bylo mozne
v prstm segmentu adresovat presah od promenne pREAD.
10. Cyklus pro adresaci druheho presahu v segmentu.
11. Do pameti pFromCodec jsou zkoprovany vzorky z pamet pCompR/L s indexac
na druhy segment.
2.2.4 Funkce sendToCodec
Prekopruje segmenty z pamet pCompR a pCompL do vystupn kruhove pameti pToCodec
s tm, ze pricte presah segmentu. Vyvojovy diagram vidme na obr. 4.5 az 4.7
1. Cyklus, ktery provad pricten presahu segmentu.
2. K presahu z poslednho segmentu se pricte presah z aktualnho segmentu.
Jelikoz je vypocet dvoukanalovy (stereo), je nutne data pro pravy a levy kanal
prokladat.
3. Implementace modulo aritmetiky, pro kruhovou pamet’.
4. Pokud je v tomto bode splnena podmnka pREAD2 = pWRITE2, doslo k pretecen
a je vyvolan chybovy stav.
5. Vzorky v segmentu, ktere jsou mezi presahy (prvn presah v segmentu je
pricten k vysledku predchozho segmentu, a dals presah v segmentu je adre-
sovan pomoc pomocne promenne) jsou prekoprovany na vystup. V nasem
prpade kdy je presah 50% je tento cyklus vynechan, protoze nejsou zadne
data mezi presahy.
6. Prekoprovan vzorku pro levy a pravy kanal, s tm ze u pamet pCompR/L je
nutne adresovat od konce prvnho presahu.
7. Implementace modulo aritmetiky, pro kruhovou pamet’.
33
8. Pokud je v tomto bode splnena podmnka pREAD2 = pWRITE2, doslo k pretecen
a je vyvolan chybovy stav.
9. Pro adresovan je pouzita pomocna promenna pom, aby bylo mozne adresovat
u prstho segmentu presah od aktualn pozice pWRITE2.
10. Cyklus pro prekoprovan dat v posledn casti segmentu.
11. Prekoprovana vzorku do vystupn v pameti, s tm ze mus byt spravne index-
ovane vyctan z pamet pCompR/L
12. Implementace modulo aritmetiky, pro kruhovou pamet’.
13. Pokud je v tomto bode splnena podmnka pREAD2 = pWRITE2, doslo k pretecen
a je vyvolan chybovy stav
2.2.5 Funkce VAD
Urc zda-li segment obsahuje rec, pomoc prahovan energie viz. 1.3.
Algoritmus funkce je popsan na vyvojovem diagramu, ktery je na obr. 4.10.
1. Vstupn promenne funkce jsou v porad: Vstupn vektor (segment), prahova
energie, promenna obsahujc predchoz vysledek detekce segmentu, promenna
pro aktualn vysledek detekce segmentu.
2. Prprava pro vypocet sumy energie.
3. Vypocet sumy kvadratu energie segmentu. Kvadrat je pouzit, aby hodnoty
byly vzdy kladne, ale je nutne resit pretekan pri sctan.
4. Uplatnen hystereze pri rozhodovan jestli segment obsahuje rec. Pokud byl
minuly segment detekovan jako rec, je prah pro urcen aktualnho segmentu
jiny, nez by byl pokud by byl minuly segment sum. Tm je zabezpeceno, aby
pri spatne detekovanem segmentu, nebo u neznelych hlasek (ktere maj nizs
energii) se vznikla chyba nesrila do vce segmentu. FS a FN jsou predem nas-
tavene prahy (empiricky zvolene).
5. Pokud byl segment detekovan jako recovy, je aktualizovana prahova energie
(je dulezite prahovou energii aktualizovat i pri reci, protoze energie reci se
men) a ulozen vysledek detekce do promenne stateN
6. Pokud byl segment detekovan jako sumovy, je aktualizovana prahova energie
a ulozen vysledek detekce do promenne stateN.
34
3 ZAVER
V diplomove praci sem se zameril na popsan vlastnost DSC 56858 a kodeku CS4812
(jake je jejich nastaven a jak probha komunikace mezi nimi), pak jsem se zameril
na spektraln odectan (vlastnosti a zpusob implementace). Bylo zapotreb zvolit
metodu detekce reci (vybrana metoda prahovan energie), urcit velikost segmentu
a presahu (velikost segmentu jsem zvolil 512 vzorku a presah 50%) a zvolit metodu
ukladan dat (na vstupu a vystupu DSC je kruhova vyrovnavac pamet’, a samostatne
pameti pro vypocet kazdeho kanalu). Pri realizaci programu byl nejvets problem od-
laden spravneho nacten segmentu (vzhledem k tomu, ze se pracuje s daty v realnem
case, bylo obtzne zjistit, v ktere casti kodu je prpadna chyba) a zprovoznen vypoctu
FFT ( problemy s volanm funkc napsanych v assebmleru bit rev a fft).
35
LITERATURA
[1] JAN, J. Cslicova filtrace, analyza a restaurace signalu Brno:VUT, 2002. 472 s
ISBN 80-214-1558-4.
case. Praha: CVUT, 2004. 170 s ISBN 80-01-03114-4.
[3] Cirrus Logic. CS4218 16-Bit Stereo Audio CodecDatasheet. 1996.
[4] Freescale. DSP56800E 16-Bit DSP Core Reference ManualDatasheet. Rev.
2.16. 2005.
[5] National Semiconductor LM4850 Mono 1.5 W / Stereo 300 mW Power Ampli-
fierDatasheet.
13.11. 2007.
[7] Freescale. 56858 Evaluation Module User ManualDatasheet. Rev. 3. 2005.
[8] MSPR Signalove procesory [online]. 2009. Dostupne z URL:
37
ne
subtractNoise(pComp_pom,noiseL)
saveNoise(pComp_pom,noiseL)
ifft(NUM_COMPT,pComp_pom,SECTION_FFT,sincos_tab);
sendToCodec();
1
stateN==NOISE
A B
Je opakován bod 7 a 14. Jen s tím, e jsou pouity promnné pCompR, noiseR, actulStateN_R a stateN_R (tudí pro pravý kanál)
10
11
13
15
12
14
16
ano
38
ne
pWRITE >=FIFO_SIZE
pWrite=0
39
Konec
result==1
40
i=0..OVERLAP_SIZE
pToCodec[pWRITE2]=pToCodec[pWRITE2]+pCompR[2*i] pWRITE2=pWRITE2+1 pToCodec[pWRITE2]=pToCodec[pWRITE2]+pCompL[2*i] pWRITE2=pWRITE2+1
pWRITE2 >=FIFO_SIZE
pWRITE2=0
i=0..NUM_COMPT-2*OVERLAP_SIZE
pToCodec[pWRITE2]=pCompR[OVERLAP_SIZE*2+i*2] pWRITE2=pWRITE2+1 pToCodec[pWRITE2]=pCompL[OVERLAP_SIZE*2+i*2] pWRITE2=pWRITE2+1
C
41
9
E
i=0..OVERLAP_SIZE
pToCodec[pom]=pCompR[2*NUM_COMPT-2*OVERLAP_SIZE+2*i] pom=pom+1 pToCodec[pom]=pCompL[2*NUM_COMPT-2*OVERLAP_SIZE+2*i] pom=pom+1
pom >=FIFO_SIZE
pom=0
42
I
Konec
43
H
pREAD >=FIFO_SIZE
pREAD=0
windowing(&pCompR[2*i],i)
windowing(&pCompL[2*i],i)
5
6
7
3
44
I
i=0..OVERLAP_SIZE
pCompR[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]=pFromCodec[pom] pom=pom+1 pCompL[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]=pFromCodec[pom] pom=pom+1
pom >=FIFO_SIZE
pom=0
45
ne
ano
VAD()
E=0
En=H_2*(*En)+(1-H_2)*(*E) *stateN=NOISE;
Konec
2
3
4
6
7
5
46
Úvod
Inicializace ESSI
tení a zápis dat z kodeku
Detekce ei
Rychlá Fourierova transformace
Kruhová vyrovnávací pam