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
    2

  • Download
    0

Embed Size (px)

Citation preview

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

VYSOKE UCENI TECHNICKE V BRNEBRNO UNIVERSITY OF TECHNOLOGY

FAKULTA ELEKTROTECHNIKY A KOMUNIKACNICH TECHNOLOGIIUSTAV TELEKOMUNIKACI

FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATIONDEPARTMENT OF TELECOMMUNICATIONS

SPEKTRALNI ODECITANI V SIGNALOVEM PROCESORU

DIPLOMOVA PRACEMASTER’S THESIS

AUTOR PRACE Bc. ANTONIN HUDECAUTHOR

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

VYSOKE UCENI TECHNICKE V BRNEBRNO UNIVERSITY OF TECHNOLOGY

FAKULTA ELEKTROTECHNIKYA KOMUNIKACNICH TECHNOLOGIIUSTAV TELEKOMUNIKACI

FACULTY OF ELECTRICAL ENGINEERING ANDCOMMUNICATIONDEPARTMENT OF TELECOMMUNICATIONS

SPEKTRALNI ODECITANI V SIGNALOVEM PROCESORUSPEKTRAL SUBSTRACT IN SIGNAL PROCESSOR

DIPLOMOVA PRACEMASTER’S THESIS

AUTOR PRACE Bc. ANTONIN HUDECAUTHOR

VEDOUCI PRACE Ing. PETR SYSEL, Ph.D.SUPERVISOR

BRNO 2010

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

VYSOKÉ UČENÍTECHNICKÉ V BRNĚ

Fakulta elektrotechniky a komunikačních technologií

Ústav telekomunikací

Diplomová prácemagisterský navazující studijní obor

Telekomunikační a informační technika

Student: Bc. Antonín Hudec ID: 78483Ročník: 2 Akademický rok: 2009/2010

NÁZEV TÉMATU:

Spektrální odečítání v signálovém procesoru

POKYNY PRO VYPRACOVÁNÍ:

Cílem diplomové práce je implementovat metodu spektrálního odečítání na vývojovém kituDSP56858EVM se signálovým procesorem Freescale. V první části implementujte řízení a komunikaci skodekem Cyrrus Logic CS4218 osazeném na vývojovém kitu. V další fázi implementujte segmentacivstupního signálu a rychlý algoritmus dopředné i zpětné Fourierovy transformace. V poslední fáziimplementujte detektor řečové aktivity a metodu spektrálního odečítání. Funkci ověřte na zpracovánísignálů v reálném čase.

DOPORUČENÁ LITERATURA:

[1] Cirrus Logic. CS4218 16-Bit Stereo Audio Codec. Datasheet. 1996.[1] Freescale. 56858 EvaluationModule 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.Předseda oborové rady

UPOZORNĚNÍ:

Autor diplomové práce nesmí při vytváření diplomové práce porušit autorská práva třetích osob, zejména nesmízasahovat nedovoleným způsobem do cizích autorských práv osobnostních a musí si být plně vědom následkůporušení ustanovení § 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávníchdůsledků vyplývajících z ustanovení části druhé, hlavy VI. díl 4 Trestního zákoníku č.40/2009 Sb.

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

ABSTRAKTTato diplomova prace je zamerena na realizaci spektralnıho odecıtanı na signalovemkontroleru DSC56858. Prvnı cast se zameruje na inicializaci DSC, nastavenı kodeku azprovoznenı komunikace mezi kodekem a DSC. Druha cast pojednava o spektralnımodecıtanım a realizaci programu.

KLICOVA SLOVAzpracovanı cıslicovych signalu, DSP, zpracovanı reci, spektralnı odecıtanı, FFT, DSC,56858, kruhova pamet’

ABSTRACTThis master’s thesis is focused on realization spectral subtract on signal controllerDSC56858. The first part is focusing on initialization DSC, setting codec and set upcommunication between DSC and codec. The second part treat about spectral subtractand realization of code.

KEYWORDSdigital signal processing, DSP, voice processing, spectral subtract, FFT, DSC, 56858,circular memory

HUDEC, Antonın Spektralnı odecıtanı v signalovem procesoru: diplomova prace. Brno:Vysoke ucenı technicke v Brne, Fakulta elektrotechniky a komunikacnıch technologiı,Ustav telekomunikacı, 2010. 36 s. Vedoucı prace byl Ing. Petr Sysel, Ph.D.

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

PROHLASENI

Prohlasuji, ze svou diplomovou praci na tema”Spektralnı odecıtanı v signalovem

procesoru“ jsem vypracoval samostatne pod vedenım vedoucıho diplomove prace a

s pouzitım odborne literatury a dalsıch informacnıch 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 vytvorenım

teto diplomove prace jsem neporusil autorska prava tretıch osob, zejmena jsem nezasahl

nedovolenym zpusobem do cizıch autorskych prav osobnostnıch a jsem si plne vedom

nasledku porusenı ustanovenı § 11 a nasledujıcıch autorskeho zakona c. 121/2000 Sb.,

vcetne moznych trestnepravnıch dusledku vyplyvajıcıch z ustanovenı § 152 trestnıho

zakona c. 140/1961 Sb.

Brno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

(podpis autora)

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

OBSAH

Uvod 8

1 Teoreticky popis 9

1.1 Audio Kodek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.1.1 Popis jednotlivych bloku . . . . . . . . . . . . . . . . . . . . . 9

1.2 Nastavenı kokedu a DSC . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.2.1 Nastavenı na vyvojove modulu DSC56858XUM . . . . . . . . 14

1.2.2 Inicializace ESSI . . . . . . . . . . . . . . . . . . . . . . . . . 14

1.2.3 Inicializace SPI a kodeku CS4218 . . . . . . . . . . . . . . . . 18

1.2.4 Ctenı a zapis dat z kodeku . . . . . . . . . . . . . . . . . . . . 18

1.3 Detekce reci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.3.1 Detektory hlasove aktivity . . . . . . . . . . . . . . . . . . . . 19

1.4 Spektralnı odecıtanı . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.4.1 Segmentace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.4.2 Vahovanı segmentu . . . . . . . . . . . . . . . . . . . . . . . . 21

1.4.3 Vypocetnı narocnost . . . . . . . . . . . . . . . . . . . . . . . 21

1.4.4 Pamet’ove pozadavky programu na DSC . . . . . . . . . . . . 22

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.1.1 Volanı funkcı assembleru . . . . . . . . . . . . . . . . . . . . . 29

2.2 Popis programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.2.1 Funkce main . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.2.2 Funkce Codec OnFullRxBuf . . . . . . . . . . . . . . . . . . . 32

2.2.3 Funkce readFromCodec . . . . . . . . . . . . . . . . . . . . . . 32

2.2.4 Funkce sendToCodec . . . . . . . . . . . . . . . . . . . . . . . 33

2.2.5 Funkce VAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3 Zaver 35

Literatura 36

4 Prıloha vyvojove diagrami 36

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

SEZNAM OBRAZKU

1.1 Blokove schema kodeku cs4218 . . . . . . . . . . . . . . . . . . . . . . 9

1.2 Zapojenı vstupu a vystupu . . . . . . . . . . . . . . . . . . . . . . . . 10

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.13 Prenost na SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.14 Schema spektralnıho odcıtanı . . . . . . . . . . . . . . . . . . . . . . 20

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

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

SEZNAM TABULEK

1.1 Popis bitu rıdıcıho ramce SPI . . . . . . . . . . . . . . . . . . . . . . 13

1.2 Nastavenı frekvence vzorkovanı pomocı pinu na prepınaci 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

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

UVOD

Diplomova prace se zameruje na spektralnı odecıtanı a implementacı na DSC (Dig-

ital Signal Controller). Spektralnı odecıtanı je oblıbenou 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 puvodnıho 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 odecıtanım ve spektralnı

oblasti), v case prispusobuje odhad sumu , ale trpı tzv. hudebnım sumem, dıky

nepresnemu odhadu sumu jsou nektere kmitocty potlaceny uplne, coz clovek vnıma

jako neprıjemne zvuky.

Spektralnı pdecıtanı se bude realizovat na vyvojovem modulu DSC56858, ktery

obsahuje i kodek CS4218.

8

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

1 TEORETICKY POPIS

1.1 Audio Kodek

CS4218 firmy Cirrus Logic je stereofonnı audio kodek, ktery obsahuje 2 A/D a D/A

prevodnıky (levy a pravy kanal), vstupnı antialiasing filtry a vystupnı vyhlazovacı

filtry a zesılenı 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ı odecıtanı realizovat.

1.1.1 Popis jednotlivych bloku

Obr. 1.1: Blokove schema kodeku cs4218

Na obr. 1.1 vidıme 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 prıpade je na vyvojovem modulu pouzit jen

9

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

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 zesılı signal pro pripojenı sluchatek (jeho parametry viz [5]).

Zapojenı vidıme 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 prıpad kdyz nastavıme vzorkovanı kmitocet

na 16 kHz, tak dolnı propust vstupnıho filtru bude mıt 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ı, vıce o problematice viz [3].

Mody kodeku Kodek muze pracovat v nekolika modech (vıce informacı o rezimech

modu kodeku viz [3]).

• Mod kodeku 3 a 5 - Kodek pouzıva jen ESSI, pres kterou prijıma hovorove

data a rıdıcı data, a posıla na vzorkovane data se stavovymi informacemi jako

verze kodeku, detekce chyby aj. viz [3]

• Mod kodeku 4 - Kodek pouzıva ESSI a SPI sbernici. Rıdıcı informace jsou

prenaseny pomocı SPI sbernice zvlast’ a pres ESSI se prenası jen vzorky.

10

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

U vyvojovem modulu DSP 56858 je pouzit mod 4, takze pres ESSI se posılajı jenom

navzorkovane data, a pres SPI se posılajı rıdicı data pro kodek zvlast’. Zapojenı je

videt na obr. 1.3 .

Obr. 1.3: Propojenı kodeku s DSC na vyvojove desce

Sbernice ESSI (Enhanced Synchronous Serial Interface) je vylepsena seriova

sbernice, ktera byla vyvinuta z potreby lepsı synchronizace. V prıpade, kdyz se

periodicky posılajı data, je dulezita presna synchronizace jednotlivych ramcu. ESSI

podporuje duplexnı prenos, umoznuje komunikovat v rezimu synchronnım i asyn-

chronnım (se synchronizacı na ramce), v nasem prıpade ma jeden kanal pro prıjem a

3 kanaly pro vysılanı s tım, ze vysılacı a prijımacı kanaly mohou pracovat na jinych

kmitoctech.

Kodek pouzıva pro komunikaci jeden kanal pro prıjem vzorku a jeden kanal pro

vysılanı vzorku. Strukturu ramce pro prenos vzorku vidıme na obr. 1.4. V jednom

ramci, ktery ma velikost 32 bitu, je prvnıch 16 bitu pro levy kanal a dalsıch 16 bitu

pro pravy kanal.

Sbernice SPI SPI (Serial Peripheral Interface) je synchronnı seriova sbernice,

ktera muze pracovat ve duplexnım rezimu Master nebo Slave. Podporuje az 16bitove

ramce s teoretickou rychlostı az desıtky MHz. Kodek v modu 4 pouzıva sbernici SPI

k prenaseni rıdıcıch dat. Struktura vysılanych dat kodeku a prijımanych dat z DSC je

na obr. 1.5, ale na vyvojovem modulu nenı vysılanı od kodeku podporovano (vystup

CDOUT je uzemnen).

11

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

Obr. 1.4: Struktura ramce na ESSI sbernici

Pomocı prijımaneho ramce od DSC lze nastavit predzesılenı na vstupu kodeku,

zesılenı 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 posılajı 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. Dıky tomu, ze data z DSC jsou pouze vysılana, a nenı nutne resit prijımanı

je softwarova realizace relativne jednoducha.

Obr. 1.5: Struktura ramce na SPI sbernici

Zesılenı vstupu a vystupu je nastavovano z DSC pomocı SPI sbernice a tak,

ze se da kdykoliv v prubehu cinnosti zmenit, poslanım noveho nastavenı. Na vstupu

kodeku lze signal zesılit az o 22,5 dB a vyuzıt tak lepe rozsah A/D prevodnıku. Na

vystupu lze zesılit signal az o 46,5 dB.

12

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

Tab. 1.1: Popis bitu rıdıcıho ramce SPI

Symbol Popis

Mute 0 = DAC vystup povolen

1 = DAC vystup potlaceny

ISL 0 = vstup leveho kanalu je LIN1

1 =vstup leveho kanalu je LIN2

ISR 0 = vstup praveho kanalu je RIN1

1 = vstup praveho kanalu je RIN2

LG3-LG0 zesılenı vstupu leveho kanalu

zvetsuje se o 1,5 dB

0000 = zadne zesılenı (0 dB)

1111 = maximalnı zesılenı (22,5 dB)

RG3-RG0 zesılenı vstupu praveho kanalu

zvetsuje se o 1,5 dB

0000 = zadne zesılenı (0 dB)

1111 = maximalnı zesılenı (22,5 dB)

LA4-LA0 zesılenı leveho vystupnıho kanalu

zvetsuje se o 1,5 dB

0000 = zadne zesılenı (0 dB)

1111 = maximalnı zesılenı (22,5 dB)

RA4-RA0 zesılenı praveho vystupnıho kanalu

zvetsuje se o 1,5 dB

0000 = zadne zesılenı (0 dB)

1111 = maximalnı zesılenı (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 vidıme v tab. 1.2. Na vyvojove modulu je pouzit krystal 12,288

MHz.

1.2 Nastavenı kokedu a DSC

Nastavenı je nutne napred udelat na vyvojovem modulu, nastavenım prepınace SW5

(nastavuje se vzorkovacı kmitocet Fvz), pak nastavenım periferiı DSC a nasledneho

nastavenı kodeku pomocı SPI.

13

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

Tab. 1.2: Nastavenı frekvence vzorkovanı pomocı pinu na prepınaci 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 nastavıme na hodnotu 16 kHz pomocı prepınace

SW5. Ke kodeku je pripojen krystal 12,288 MHz, tak podle tabulky 1.2 je Fvz rovno

16 kHz pri nastavenım pozic prepınacu 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

vzorkovacıho kmitoctu se zakonite musı zmenit rychlost prenosu na ESSI lince,

protoze je kodek Master, a vysıla casovanı, tım je situace jednodusı, a nenı nutne

menit nastavenı ESSI na DSC. Zavislost kmitoctu sbernice na kmitoctu vzorkovanı

vidıme v tab. 1.3 CLKIN je kmitocet externıch hodin a SCLK je kmitocet hodin na

ESSI sbernici.

Na obr. 1.6 vidıme, 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 vysılat a prijımat data od DSC. Ale pri vychozım nastavenım

(po resetu) je sbernice ESSI na DSC nastavena jinak, a proto ji musıme spravne

nakonfigurovat.

Doporucene poradı inicializace registru pro sbernici ESSI

1. Nastavit registry SRXCR, STXCR, SCR2, SCR3, a SCR4 na rezim Slave (kodek je

pri vysılanı Master) mode Normal (na sbernici komunikuje jen jedno zarızenı).

14

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

Tab. 1.3: Pomer SCLK ku CLKIN

Pomer SCLK ku CLKIN Fvz (kHz)

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ı prijımace a vysılace, DSC pracuje jako Slave takze signal

CLOCK prijıma.

3. Nastavit synchronizaci a strukturu ramce kterou vyzaduje kodek.

4. Povolit sbernici ESSI ( ESSIEN = 1).

5. Povolit RXFIFO ( RFEN = 1) a RTFIFO ( RTEN = 1) nastavit prijımacı a

vysılacı threshold pro RXFIFO a TXFIFO.

6. Povolit prerusenı vysılanı a prıjmu.

7. Nastavit RE a TE bit (RE = 1 a TE = 1) k povolenı vysılanı a prıjmu na

15

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

dalsı ramcove synchronizaci.

Nastavenı registru pro sbernici ESSI

Registr STXCR a SRXCR

PSR = 0 (Prescaler Range) nenı pouzita pred-delicka

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

Registr SCR2

RIE = 1 (Receive Interrupt Enablepovolı) prerusenı pri prijetı dat

TIE = 1 (Transmit Interrupt Enable) povolı prerusenı pri odeslanı dat

SYN = 1 (Synchronous Mode) povolı synchronizaci

TSHFD = 0 (Transmit Shift Direction) nejvıce vyznamny bit se bude vysılat 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

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

Nastavenı registru SCR2 = 0x8B

Obr. 1.9: Registr SCR2

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

Nastavenı registru SCR3 = 0x83E0

Obr. 1.10: Registr SCR3

Registr SCR4

TXSF0 = 1 (Transmit Status Flag Control 0) povolenı aby vysılacı kanal 0 mohl

menit prıznaky (flagy TFF, TDE, TUE, a TFE) a tım 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) prıznak pretecenı FIFO bude az bude

17

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

nacteno 8 ramcu v RXFITO

TDWM = 1 (Transmit FIFO Empty Watermark) prıznak 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 pouzıvame 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

prıslusne 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 (naprıklad ACMP, A/D aj.). Zapsanım 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 musıme

nastavit chovanı pinu PC0 az PC2 a PC5 jako vstupy a vystupy ESSI sbernice. Tedy

do registru GPIOC PER nastavıme 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ı, zapsanım jednicky znamena, ze pin je vystupnı. Piny, ktere pouzıvame

k SPI komunikaci, jsou vsechny vystupnı. Do registru GPIOE DDR nastavıme 6 a do

registru GPIOC DDR nastavıme 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ı-

macıho registru se zkopırujı do vstupnı pameti (vstupnı i vystupnı pamet’ je kruhova

18

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

Obr. 1.13: Prenost na SPI

vyrovnavacı pamet’ viz kap. 1.4.6 ), pokud jsou ve vystupnı pameti nachystany data,

tak jsou zkopırovana do vysılacıho registru ESSI sbernice.

1.3 Detekce reci

Pri spektralnım odecıtanım je nutne urcit, ktery segment obsahuje uzitecnou infor-

maci (rec) a ktery segment prenası jen sum. A k tomu se pouzıvajı detektory hlasove

aktivity.

1.3.1 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 prıpade

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 pouzıvajı VAD algoritmy. V nasem

prıpade je pouzit detektor na principu prahovanı energie segmentu. Tato metoda

vychazı z predpokladu ze rec ma vyrazne vetsı energii nez sum.

19

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

1.4 Spektralnı odecıtanı

Princip spektralnıho odecıtanı je videt na obr. 1.14 Vzorky x jsou posılany 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 spektralnıch koeficientu X[n], vysledne

spektrum Y [n] (zbavene sumu) je inverzne transformovano pomocı IFFT do casove

oblasti y[n]. Nakonec jsou jednotlive vzorky y posılany z vystupnı pameti do kodeku.

Obr. 1.14: Schema spektralnıho odcıtanı

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 pocıtat s velikostı segmentu mocniny dvou (viz [1]). Takze

je nutne prizpusobit velikost ramce vzorkovacımu 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 prıpade, 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

Tseg =N

Fvz

(1.2)

po dosazenı zjistıme ze, Tseg256 =16 ms a Tseg512 = 32 ms. Vybral sem segment

o velikosti 512, protoze se blızı vıc pouzıvanym casum a bude mıt lepsı kmitoctove

20

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

rozlisenı (presnejsı odhady sumu a tudız presnejsı odsumovanı), ale znamena to take

delsı dobu vypoctu a vetsı naroky na pamet’.

1.4.2 Vahovanı segmentu

Algoritmus vypoctu FFT bere vstupnı signal jako periodicky, ale segment ve vetsine

prıpadu periodicky nebyva a proto ho zperiodizujeme v algoritmu vypoctu, tım

ale vznikne problem toho, ze spektra zperiodizovaneho signalu se prekryvajı a tım

scıtajı, tım vznika chyba (jednotlive spektralnı slozky se rozmazavajı), resenım to-

hoto problemu je pouzit nektere vahovacı okenko, napr Hammingovo, ktere vynaso-

beno se signalem potlacı vyssı kmitocty (vıce 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 zarazenım

segmentu za sebe by vznikaly vyrazne zmeny v amplitude vysledneho signalu.

Spektralnı odecıtanı patrı mezi nelinearnı metody filtrace(na vıc v case se menı

odhad sumu - tudız i filtrace) a pouhem razenım jednotlivych segmentu by vznikaly

nespojitosti v mıstech navazovanı segmentu. To je reseno presahem, kdy pro vypocet

aktualnıho spektra jsou pouzita i cast dat z minuleho vzorku, na na vystupu jsou

k aktualnımu vysledku prictena data z minuleho vysledku prave o velikost presahu.

Tım je zpusobeno, ze jednotlive vzorky na sebe plynuleji navazujı, a navıc vhodnou

volbou presahu se resı i problem prı vahovanım okenkem, protoze dochazı ke ztrate

energie, a prave dıky presahu segmentu je mozne dostat energii vystupnıho signalu

rovnou energie signalu pred zpracovanım.

1.4.3 Vypocetnı narocnost

Na obr. 1.15 vidıme casovou posloupnost zpracovanı dat.

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.)

• Vysledek naznacuje ulozenı dat do vystupnı pameti.

• Vystup znamena odesılanı dat z vystupnı pameti do kodeku.

V dobe Segment 1 vyckava DSC dokud neprijme N vzorku od kodeku, jakmile je

toto splneno, zkopıruje se segment ze vstupnı pameti do internı a zacına Vypocet

1 a zaroven DSC prijıma dalsı vzorky od kodeku. Doba Vypocet 1 musı byt mensı

21

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

nez je doba prijmutı vzorku o poctu N − p, kde N je velikost segmentu a p je

velikost presahu, v prıpade nedodrzenı by doslo ke ztrate nasledujıcıho segmentu

(vzhledem k tomu, ze algoritmus ma v case konstantnı slozitost, tak by se ztrata

segmentu periodicky opakovala), k cemuz nesmı dojıt. Na zacatku doby Vysledek 1

jsou data zkopırovany do Vystup 1 (vystupnı kruhova pamet’) a odtud jsou posılana

do kodeku a zaroven bylo prijatych novych N − p vzorku od kodeku a ty jsou

spolecne se vzorky se Segment 1, o velikosti presahu, zkopırovany 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 pracujıcı v realnem case je zpozdenı systemu.

Z obr. 1.15 nam vychazı, ze zpozdenı vystupu je

Ts =1

Fvz

∗ (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

Fvz

∗ (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ı vyjımkou,

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

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

programu. Lze tedy usoudit, ze priblizna velikost programu v pameti RAM bude

uzce souviset s velikostı segmentu, ale musıme jeste pocıtat s mnozstvım globalnıch

i lokalnıch promennych, stack, heapu a dale, ze data byvajı v pameti ukladana

v blocıch, ktere nemusı odpovıdat 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 vidıme 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 ∗NVystupnı kruhova pamet’ 4 ∗N

Pamet’ pro vypocet L+R kanal 2 ∗ 2 ∗NPomocna 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

256 5120

512 10480

1024 20480

2048 40960

1.4.5 Rychla Fourierova transformace

Fourierova transformace je matematicka metoda, ktera je uspesne pouzitelna k ana-

lyzovanı obrazu (signalu). V obecnem prıpade se jedna o vyjadrenı funkce popisujıcı

obraz v jinych promennych pomocı integralnı transformace (v podstate vyjadrenı

funkce v jine bazi). V nasem prıpade se uvazuje tzv. trigonometricka Fourierova

23

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

transformace, ktera za bazove funkce poklada sin(kt), cos(kt) nebo v komplexnım

tvaru exp(jkt), kde k je cele cıslo v prıpade Fourierovy rady nebo realna promenna

v prıpade Fourierovy transformace.

Rychla Fourierova transformace (FFT Fast Fourier transform) je algoritmus,

ktery umoznuje rychlejsı vypocet oproti vypoctu z definicnıho 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 pocıtano je mocnina dvou. Vzorec pro vypocet diskretnıch hodnot

FFT je

Xk =N−1∑n=0

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 rozdılna ve znamenku u twidle faktoru a s tım, ze kazdy prvek

je na vystupu podelen poctem vzorku

xk =1

N

N−1∑n=0

Xne(j2πk n

N). (1.6)

1.4.6 Kruhova vyrovnavacı pamet’

Vyrovnavacı pamet’ zprostredkovava prevod mezi seriovym datovym proudem na

paralelnı a naopak, takze vstupnı vyrovnavacı pameti ze vstupnıch dat, ktere jsou

posılany po vzorcıch (seriove), vytvarı segment ktery je zkopırovan pro vypocet

(paralelnı presun) a naopak u vystupnıho je segment po vypoctu (paralelnı vstup)

postupne preposılan kodeku (seriovy vystup).

K resenı problemu prijımanı a odesılanı vzorku by vyrovnavacı pamet’ s kla-

sickym adresovanım byla nevhodna z duvodu prekryvanı segmentu, kde je nutne mıt

ulozenou historii dat o velikost presahu, takze je nutne krome aktualne nacıtaneho

ramce mıt nekde ulozen cast minuleho, a vyresenou adresaci pri vycıtanı dat ze

stareho segmentu a aktualnıho, a navıc jsou neustale od kodeku posılany data nove,

coz zpusobuje velice slozity zpusob adresace. Proto se pouzıvajı kruhove pameti,

ktere mnoho problemu odstranujı, ale nektere pridavajı.

V kruhove vyrovnavacı pameti software pouzıva kazdou pamet’ovou lokaci sek-

vencne, dokud nenarazı na konec bloku. Pak proces zacına znovu na pocatku adre-

soveho prostoru a data prepisuje, tedy opakuje se v kruhu obr. 1.16.

U kruhove vyrovnavacı pameti se pouzıvajı 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

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

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 tım setkame pokud

vycıtame 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

Cıslicova technika pracuje s cısly ve dvojkove soustave. Dvojkova soustav je polyadicka

cıselna soustava se zakladem Z = 2. Jako v kazde jine polyadicke soustave je i zde

kazde cıslo tvoreno posloupnostı cıslic, ktere nabyvajı hodnot 0, . . . Z − 1, v binarnı

cıselne soustave tedy 0,1. Kazda cıslice ma svou vahu 2i a libovolne realne cıslo A

lze vyjadrit jako soucet mocnin o zakladu 2

25

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

A =k∑

i=−∞ai2

i, ai = 0nebo 1. (1.8)

Ve dvojkove soustave definovane vztahem 1.8 lze zobrazit jakekoliv realne cıslo.

Omezena delka registru v cıslicovych systemech ma za nasledek i omezeny pocet

zobrazitelny cısel a z toho duvodu i omezenou presnost zobrazenı. Pro delku registru

B lze prepsat vztah 1.8 do tvaru

A =k∑

i=−bai2

i = ak2k + ak−12

k−1 + . . . + a121 + a0 + a−12

−1 + . . . + a−b2−b, (1.9)

kde k znacı nejvyssı vahu cele casti cısla A a b nejmene vyznamneho bitu, ktery

urcuje rozlisenı dvou sousednıch cısel, tzv. kvantizacnı krok g,

g = 2−b. (1.10)

V registru delky B muzeme zobrazit jak celou, tak i zlomkovou cast cısla. Delka

registru B je

B = k + b + 1. (1.11)

Pri tomto vyjadrenı cıslaAje umıstena radova carka za clenem a0 a rozdeluje cast

celou (integer) Ai a zlomkovou (fractional) Af

A = Ai + Af =k∑i=0

ai2i +

b∑i=1

a−i2−i. (1.12)

Umıstenı 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 prıpade je umıstenı radove carky bud’ za poslednım zprava,

pak se jedna o celocıselnou reprezentaci(integer) nebo ze prvnım bitem zleva, pak

se jedna o zlomkovou reprezentaci cısel(fractional).

Zaporna cısla

Ve vetsine algoritmu DSP pracujeme s kladnymi i zapornymi cısly. Existujı v zasade

tri nejbeznejsı metody reprezentace zapornych cısel

• znamenkovy bit s absolutnı hodnotou

• dvojkovy doplnek

• jednickovy doplnek

26

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

V predchozıch odstavcıch jsme poznali, ze v B-bitovem registru lze zobrazit 2B

ruznych cısel. Budeme-li chtıt v registru ulozit jak kladna tak i zaporna cısla, pak

budeme muset rozdelit registr priblizne na dva stejne casti. V mikrokontrolerech

se skoro vyhradne pouzıva jen dvojkovy doplnek, takze nasledujı uvahy budou

smerovany ohledne neho.

Dvojkovy doplnek Jedna se nejcasteji pouzıvany zpusob zobrazenı cısel v tech-

nickych realizacıch. Pro kladna cısla X ≥ 0 je zobrazenı shodne s neznamenkovymi

cısly. Pro cısla X < 0 se vytvarı dvojkovy doplnek jako doplnek absolutnı hodnoty

cısla |X| do hodnoty 2B, kde B je pocet bitu pouziteho registru. Odtud plyne nazev

2-doplnek. Prepis pro vytvorenı dvojkoveho doplnku X2K binarnı cısla Xbin pro dane

dekadicke cıslo Xdek v registru delky B = b + 1 je

Xbin(b + 1) ≡

Xdek pro X ≥ 0

2b+1 − |Xdek| pro Xdek < 0(1.13)

Dvojkovy doplnek k danemu binarnımu cıslu nalezneme podle vztahu

X = XM

(−XS +

b∑i=1

Xi2−i)

(1.14)

kde XM znacı libovolnou celocıselnou konstantu, ktera slouzı jako merıtko. Bule-li

napr. XM = 2b bude se jedna o zobrazenı integer, pro XM = 20 se jedna o zo-

brazenı fraction. Jako praktickou pomucku, vyplyvajıcı ve vztahu 1.13 pri stanovenı

dvojkoveho doplnku negujeme cıslo XB bit po bitu, a pricteme 1 v nejnizsım radu

X2K(b + 1) = Xbin(b + 1) + 1 (1.15)

Pri aplikacnıch se signalovymi procesory pracujeme nejcasteji se zlomkovymi cısly,

tedy

−1 ≤ X ≤ 1.

Dvojkovy doplnek zlomkoveho cısla s radovou carkou za prvnım bitem zleva,

vytvarıme jako doplnek do cısla 21 = 2.0. Vaha nejvyssıho bitu je 20 a nejnizsıho

2−b. Dekadickou hodnotu zlomkoveho cısla −1 ≤ X ≤ 1 stanovıme z binarnıho

vyjadrenı podle vztahu 1.14 pro XM = 20:

Xdek = −XS +b∑i=1

Xi2−i (1.16)

Definicnı obor cısel ve dvojkovem doplnku je nesymetricky vzhledem k nule. Zlomkova

cısla lze zobrazit v intervalu(−1, 1− 2−b).

27

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

2 VLASTNI RESENI

2.1 Popis resenı

Program je psan v jazyce C ve vyvojovem prostredı CodeWarrior. Jako zaklad pro

program jsem pouzil demoprojekt (umıstenı je Precessoru Expert Stationery→DemoApplication→Telephony→Codec→56858). Tento ukazkovy projekt nastavı

DSC a kodek a po te v hlavnı smycce prijıma a vysıla bloky dat vzorku. Pro-

jekt byl pro potrebu spektralnıho odcıtanı kompletne predelan. Obsluha prijımanı a

vysılanı 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ı odcıtanı.

Projekt pouzıva 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, posıla nas-

tavenı kodu a obsluhuje prerusenı.

V beanu Audio Codec CS4218 je komunikace (prijımanı a vysılanı 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 tım, ze tato hodnota by nemela byt nikdy dosazena. V beanu je prijımanı

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

vycıst. Pomocı funkce Codec Write zapisujeme data do internı vystupnı pameti

kodeku, ktere jsou zkopırovana do vysılacıho 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 cısly

s pohyblivou desetinou carkou (double a float), coz nam zpusobovalo problemy s gen-

erovanım tabulky pro Hammingovo okno a tabulku twidle faktoru, tento problem

byl vyresen predgenerovanım tabulek pro 1024 vzorku. Chtena velikost tabulky se

vytvorı podvzorkovanım. Dalsım problemem je, ze kodek vysıla priblizne prvnıch

160 vzorku jako nuly, nez zacne vysılat skutecne hodnoty (platı jen po inicializaci,

takze v realnem case zanedbatelne)

28

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

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

cısla. Pouzitı cısel s pohyblivou carkou, nebo prevadenı cısel , by bylo vypocetne

velmi neefektivnı a kvuli tomu je nutne volat funkce z assembleru. Existujı tri metody

jak pouzıvat funkce z assembleru v jazyku C:

• Klıcove slovo asm

• Volanım funkce napsane v assembleru

• Intrizitnı funkce.

Klıcove slovo asm

Za klıcovym slovem asm jsou bud’ slozene zavorky(v nich muze byt vıce assem-

bler funkcı) nebo nasledujı normalnı zavorky (v nich muze byt pouze jedna funkce

v assembleru). V nasem prıpade nenı pouzitı tohoto zpusobu volanı funkce vhodne,

protoze v prubehu programu nevıme co je v kterych registrech ulozeno, a jenom

velice slozite by se to resilo.

Ukazka volanı:

asm(nop);

asm{

move.w x:(r2),y0

move.w x:(r3),x0

};

Volanım funkce napsane v assembleru

Kod v assembleru je napsan jako funkce v jazyce C, vyhodou toho volanı je ze pred

vyvolanım funkce jsou vsechny registry ulozeny, takze muzeme s registry bezpecne

pracovat. Ukazka volanı:

asm int add_int( int * i, int * j )

{

move.w x:(r2),y0

move.w x:(r3),x0

add x0,y0

rst

}

Intrizitnı funkce

Intrizitnı funkce, jsou obsazene v knihovne intrinsics 56800E.h, ktera je soucastı

29

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

knihoven CodeWarrioru. Obsahuje soubor funkcı, ktere umoznujı volat prıkazy z

assembleru. Vyhodou tohoto prıstupu je to, ze umoznuje jednoduseji volat volat

funkce z assembleru, a tım 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);

2.2 Popis programu

V nasledujıcıch kapitolach jsou popsany jednotlive casti programu pomocı vyvojo-

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 pouzıvanych periferiı.

2. Jedna se o funkci beanu, ktera povoluje prerusenı pri prıjmu na ESSI, a tım

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ı, prıpadne 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 prıstım 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 spektralnıho

odcıtanı. A pokud by doslo v prerusenı Codec OnFullRxBuf k navzorkovanı

dostatecneho mnozstvı dat (bude splnena podmınka u 4. bodu, tak 5.bod

zabezpecı, aby nebyli prepsany data s kterymi se provadı vypocet. Jedna se

o chybovy stav, kdy DSC nestıha spocıtat spektralnı odcıtanı vcas. To se da

napravit zmensenım segmentu (narocnost je N∗logN) , zmensenı vzorkovacıho

kmitoctu (zvetsı se perioda prijımanych dat od kodeku), zmensenı presahu

30

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

(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).

Vstupnımi parametry: vstupnı vektor, vystupnı vektor a pocet vzorku.

9. Vypocet FFT, je to funkce psana v assembleru, optimalizovana na tento DSC

(prevzato z ucebnıch 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ı cıslo (ulozeno ve tvaru Real1,Img1,Real2,Img2...), tak vstup-

nı pole musı mıt 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 (poprıpade vhodnou

metodou pricteno k aktualnımu odhadu sumu).

11. Od vypocteneho spektra hovoroveho signalu odecteme odhad sumu. Aby ne-

dochazelo k nulovym ci dokonce k zapornym hodnotam u spektralnıch koefi-

cientu, je zavedena podmınka, ze spektralnı koeficient po odectenı sumu muze

mıt minimalne 1/128 velikosti puvodnı hodnoty.

Prıklad: 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 prekopırovat data do

internı pameti prıslusneho kanalu.

14. Do promenne lastStateN L je ulozeno, jak byl segment detekovan, to je nutne

pro detektor VAD u rozhodovanı pro prıstı segment.

15. V nasledujıcım bode se opakuje cely vypocet od bodu 7 az 14 pro pravy kanal.

16. Zkopırovanı dat do vystupnı pameti (popis funkce viz 2.2.4.

17. Promenna Result se nastavı do 1, a tım padem mohou byt v udalosti

31

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

Codec OnFullRxBuf posılany vystupnı data do kodeku.

18. Nekonecne smycka, navrat na zacatek zpracovanı (bod 4) a cekanı na nactenı

dalsıho segmentu.

2.2.2 Funkce Codec OnFullRxBuf

Vyvojovy diagram popisuje podprogram Codec OnFullRxBuf, ktery se vola v pre-

rusenı jak bylo zmıneno vyse (viz 2.1).

1. Je nacten jeden vzorek z kodeku, strıdave jsou nacıtany 16bitova slova pro

levy a pro pravy kanal.

2. Je inkrementovan ukazatele vstupnı kruhove pameti pWRITE a cıtac prijatych

vzorku.

3. Je implementovana aritmetika modulo kruhove pameti.

4. Pokud je navzorkovano dostatecny pocet dat v nasem prıpade 1024 pro prvnım,

pro druhe je to uz NUM SAMPLES-2*OVERLAP SIZE to je zabezpeceno dıky pod-

mınce v 5.bode

5. Nastavenı, aby prıste bylo vyvolano kopırovanı (splnena 4.podmınka) po prijetı

NUM SAMPLES-2*OVERLAP SIZE, pokud se do counter ulozı hodnota presahu

(vzorky jsou pro levy a pravy, takze dvojnasobna hodnota), tak podmınka

4. bude splnena za prave 512 vzorku.

6. Pokud by se promenna inprog rovnala 1 znamenalo by to, ze v hlavnım pro-

gramu prave probıha vypocet, a ze CPU nestacilo vypocıtat hodnoty vcas, a

uzivatel je informovan o chybe.

7. Nastavı se prıznak pro spustenı vypoctu v hlavnım programu main, ktery se

zacne vykonavat po navratu programu z prerusenı.

8. Pokud uz jsou nejake data ve vystupnı vyrovnavacı pameti, tak se spustı

prekopırovanı.

9. Je poslan jeden vysledny vzorek do kodeku.

10. Implementace kruhove vystupnı pametı pomocı ukazatele pREAD2.

11. Navrat z prerusenı do hlavnıho programu (smycky).

2.2.3 Funkce readFromCodec

Prekopıruje vzorky ze vstupnı pameti pFromCodec do pametı pro vypocet pCompR

a pCompL tak, ze vycıtanı z pameti pFromCodec je vzdy posunuto o velikost presahu.

Vyvojovy diagram znazornujıcı algoritmus pro ctenı vstupnı vzorku jsou na

obr. 4.8 a 4.9.

1. Cyklus ktery prekopıruje NUM COMPT-OVERLAP SIZE vzorku ze vstupnı pameti

do pameti urcene pro vypocet pCompR a pCompL, je dulezite v celem programu

32

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

dodrzovat stejne poradı v jakem poradı je zapisovano a vycıtany vzorky pro

pravy a levy kanal.

2. Prekopırovanı vzorku ze vstupnı pameti pFromCodec do pameti pCompR (data

v pCompR jsou v komplexnım tvaru, proto dvojnasobna adresa pro realnou

cast), a zvetsenı ukazatele.

3. V tomto podprogramu dochazı k vynasobenı vzorku s odpovıdajıcı pozicı pole

Hammingova okna.

4. Kontrola pretecenı kruhove pameti, pokud by byla splnena podmınka zname-

nalo byto, ze doslo k podtecenı, tudız ze kodek nedodava data.

5. Zkopırovanı 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 prıstım segmentu adresovat presah od promenne pREAD.

10. Cyklus pro adresaci druheho presahu v segmentu.

11. Do pameti pFromCodec jsou zkopırovany vzorky z pametı pCompR/L s indexacı

na druhy segment.

12. Kontrola pretecenı kruhove pameti.

2.2.4 Funkce sendToCodec

Prekopıruje segmenty z pametı pCompR a pCompL do vystupnı kruhove pameti pToCodec

s tım, ze pricte presah segmentu. Vyvojovy diagram vidıme na obr. 4.5 az 4.7

1. Cyklus, ktery provadı prictenı presahu segmentu.

2. K presahu z poslednıho segmentu se pricte presah z aktualnıho 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 podmınka 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 predchozıho segmentu, a dalsı presah v segmentu je adre-

sovan pomocı pomocne promenne) jsou prekopırovany na vystup. V nasem

prıpade kdy je presah 50% je tento cyklus vynechan, protoze nejsou zadne

data mezi presahy.

6. Prekopırovanı vzorku pro levy a pravy kanal, s tım ze u pametı pCompR/L je

nutne adresovat od konce prvnıho presahu.

7. Implementace modulo aritmetiky, pro kruhovou pamet’.

33

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

8. Pokud je v tomto bode splnena podmınka pREAD2 = pWRITE2, doslo k pretecenı

a je vyvolan chybovy stav.

9. Pro adresovanı je pouzita pomocna promenna pom, aby bylo mozne adresovat

u prıstıho segmentu presah od aktualnı pozice pWRITE2.

10. Cyklus pro prekopırovanı dat v poslednı casti segmentu.

11. Prekopırovana vzorku do vystupnı v pameti, s tım ze musı byt spravne index-

ovane vycıtanı z pametı pCompR/L

12. Implementace modulo aritmetiky, pro kruhovou pamet’.

13. Pokud je v tomto bode splnena podmınka 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 obsahujıcı predchozı vysledek detekce segmentu, promenna

pro aktualnı vysledek detekce segmentu.

2. Prıprava pro vypocet sumy energie.

3. Vypocet sumy kvadratu energie segmentu. Kvadrat je pouzit, aby hodnoty

byly vzdy kladne, ale je nutne resit pretekanı pri scıtanı.

4. Uplatnenı hystereze pri rozhodovanı jestli segment obsahuje rec. Pokud byl

minuly segment detekovan jako rec, je prah pro urcenı aktualnıho segmentu

jiny, nez by byl pokud by byl minuly segment sum. Tım je zabezpeceno, aby

pri spatne detekovanem segmentu, nebo u neznelych hlasek (ktere majı nizsı

energii) se vznikla chyba nesırila do vıce 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

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

3 ZAVER

V diplomove praci sem se zameril na popsanı vlastnostı DSC 56858 a kodeku CS4812

(jake je jejich nastavenı a jak probıha komunikace mezi nimi), pak jsem se zameril

na spektralnı odecıtanı (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 obtızne zjistit, v ktere casti kodu je prıpadna chyba) a zprovoznenı vypoctu

FFT ( problemy s volanım funkcı napsanych v assebmleru bit rev a fft).

35

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

LITERATURA

[1] JAN, J. Cıslicova filtrace, analyza a restaurace signalu Brno:VUT, 2002. 472 s

ISBN 80-214-1558-4.

[2] DAVIDEK, V. Implementace algoritmu cıslicoveho zpracovanı signalu v realnem

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.

[6] Freescale. MC56F8xxx/DSP5685x Family Targeting ManualDatasheet. Rev.

13.11. 2007.

[7] Freescale. 56858 Evaluation Module User ManualDatasheet. Rev. 3. 2005.

[8] MSPR Signalove procesory [online]. 2009. Dostupne z URL:

<https://www.vutbr.cz/elearning/>.

36

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

4 PRILOHA VYVOJOVE DIAGRAMI

36

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

main()

Codec_EnableEvent()

initHamming();

VAD(pCompL)

readFromCodec()

initSinCos();

bit_rev(pCompL,pComp_pom,NUM_COMPT)

fft(NUM_COMPT,pComp_pom,SECTION_FFT,sincos_tab)

PE_low_level_init()

9

8

1

2

3

4

5

6

7

ne

start==0

start=0inprog=1

ano

AB

Obr. 4.1: Vyvojovy diagram programu main

37

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

ne

subtractNoise(pComp_pom,noiseL)

saveNoise(pComp_pom,noiseL)

ifft(NUM_COMPT,pComp_pom,SECTION_FFT,sincos_tab);

sendToCodec();

1

lastStateN_L=stateN_L

ano

stateN==NOISE

AB

Je opakován bod 7 až 14. Jen s tím, že jsou použity proměnné pCompR, noiseR, actulStateN_R a stateN_R (tudíž pro pravý kanál)

10

11

13

15

12

14

16

ano

i=0..NUM_COMPT*2

pCompL[i]=pComp_pom[i]

I

17Result=1inprog=0

18

Obr. 4.2: Vyvojovy diagram programu main 2.cast

38

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

counter >=NUM_SAMPLES

Codec_Read((void*)&pFromCodec[pWRITE],2, &Rcv);

ne

counter=2*OVERLAP_SIZE

Codec_OnFullRxBuf()

counter=counter+1pWRITE=pWRITE+1

pWRITE >=FIFO_SIZE

pWrite=0

ano

ne

ano

1

2

3

4

5

6

7inprog ==0

ano

ne

start=1

B

pWRITE==pREAD

ne

ano

ERROR(ER_OVERFLOW)

ERROR(ER_OVERRUN)

Obr. 4.3: Vyvojovy diagram programu Codec OnFullRxBuf

39

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

Konec

Codec_Write((void*)&pToCodec[pREAD2],2, &Snd);

result==1

ano

ne

pREAD2=pREAD2+1

pREAD2 >=FIFO_SIZE

pREAD2=0

ne

ano

B

9

8

10

11

pWRITE==pREAD

ne

ano

ERROR(ER_OVERFLOW)

12

Obr. 4.4: Vyvojovy diagram programu Codec OnFullRxBuf 2.cast

40

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

i=0..OVERLAP_SIZE

pToCodec[pWRITE2]=pToCodec[pWRITE2]+pCompR[2*i]pWRITE2=pWRITE2+1pToCodec[pWRITE2]=pToCodec[pWRITE2]+pCompL[2*i]pWRITE2=pWRITE2+1

pWRITE2 >=FIFO_SIZE

pWRITE2=0

ne

ano

1

2

3

4

5

6

sendToCodec()

i=0..NUM_COMPT-2*OVERLAP_SIZE

pToCodec[pWRITE2]=pCompR[OVERLAP_SIZE*2+i*2]pWRITE2=pWRITE2+1pToCodec[pWRITE2]=pCompL[OVERLAP_SIZE*2+i*2]pWRITE2=pWRITE2+1

C

pWRITE2==pREAD2

ne

ano

ERROR(ER_OVERFLOW)

D

I

Obr. 4.5: Vyvojovy diagram programu sendToCodec

41

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

9

E

i=0..OVERLAP_SIZE

pToCodec[pom]=pCompR[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]pom=pom+1pToCodec[pom]=pCompL[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]pom=pom+1

pom >=FIFO_SIZE

pom=0

ne

ano

pom=pWRITE2

C

I

pWRITE2 >=FIFO_SIZE

pWRITE2=0

ne

ano

D

pWRITE2==pREAD2

ne

ano

ERROR(ER_OVERFLOW)

F

8

7

10

11

12

Obr. 4.6: Vyvojovy diagram programu sendToCodec 2.cast

42

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

I

Konec

pom==pREAD2

ne

ano

ERROR(ER_OVERFLOW)

FE

13

Obr. 4.7: Vyvojovy diagram programu sendToCodec 3.cast

43

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

H

i=0..NUM_COMPT-OVERLAP_SIZE

pCompR[2*i]=pFromCodec[pREAD]pREAD=pREAD+1

pREAD >=FIFO_SIZE

pREAD=0

ne

ano

G

readFromCodec()

1

2

4pWRITE==pREAD

ne

ano

ERROR(ER_UNDERFLOW)

pCompL[2*i]=pFromCodec[pREAD]pREAD=pREAD+1

windowing(&pCompR[2*i],i)

windowing(&pCompL[2*i],i)

5

6

7

3

Obr. 4.8: Vyvojovy diagram programu readFromCodec

44

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

I

i=0..OVERLAP_SIZE

pCompR[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]=pFromCodec[pom]pom=pom+1pCompL[2*NUM_COMPT-2*OVERLAP_SIZE+2*i]=pFromCodec[pom]pom=pom+1

pom >=FIFO_SIZE

pom=0

ne

ano

Konec

I

pom=pREAD

pWRITE==pREAD

ne

ano

ERROR(ER_UNDERFLOW)

H G

10

11

12

9

8

pWRITE==pom

ne

ano

ERROR(ER_UNDERFLOW)

13

Obr. 4.9: Vyvojovy diagram programu readFromCodec 2.cast

45

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

ne

ano

VAD()

i=0..NUM_COMPT

E=E+(pComp[2*i]*pComp[2*i])

E=0

((E-FN)>(*En))&& (*lastStateN==NOISE)

I

((E-FS)>(*En)) && (*lastStateN==SPEECH)

ano

ne

*En=En=H_1*(*En)+(1-H_1)*(*E);*stateN=SPEECH;

En=H_2*(*En)+(1-H_2)*(*E)*stateN=NOISE;

Konec

*pComp, *En, *lastStateN, *stateN 1

2

3

4

6

7

5

Obr. 4.10: Vyvojovy diagram programu VAD

46