VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA STROJNÍHO INŽENÝRSTVÍ ÚSTAV AUTOMATIZACE A INFORMATIKY FACULTY OF MECHANICAL ENGINEERING INSTITUTE OF AUTOMATION AND COMPUTER SCIENCE
INDIKÁTOR ROJOVÉ NÁLADY VČELSTVA THE INDICATOR OF SWARMING FEWER OF BEE COLONY
DIPLOMOVÁ PRÁCE DIPLOMA THESIS
AUTOR PRÁCE
BC. OTO GREGOŘÍK
AUTHOR
VEDOUCÍ PRÁCE SUPERVISOR
BRNO 2007
ING. MIROSLAV HOLÝ
LICENČNÍ SMLOUVA POSKYTOVANÁ K VÝKONU PRÁVA UŽÍT ŠKOLNÍ DÍLO uzavřená mezi smluvními stranami: 1. Pan/paní Jméno a příjmení: Oto Gregořík Bytem: Březolupy 512, 587 13 Narozen/a (datum a místo): 25.9.1981 Zlín (dále jen „autor“) a 2. Vysoké učení technické v Brně Fakulta strojního inženýrství se sídlem Technická 2896/2, 616 69, Brno jejímž jménem jedná na základě písemného pověření děkanem fakulty: Doc. RNDr. Ing. Miloš Šeda, Ph.D., ředitel ÚAI (dále jen „nabyvatel“)
Čl. 1 Specifikace školního díla 1. Předmětem této smlouvy je vysokoškolská kvalifikační práce (VŠKP): □ disertační práce □ diplomová práce □ bakalářská práce □ jiná práce, jejíž druh je specifikován jako ....................................................... (dále jen VŠKP nebo dílo) Název VŠKP:
Indikátor rojové nálady včelstva
Vedoucí/ školitel VŠKP:
Ing. Miroslav Holý
Ústav:
Ústav automatizace a informatiky
Datum obhajoby VŠKP: VŠKP odevzdal autor nabyvateli v*: □ tištěné formě
*
–
počet exemplářů 2
□ elektronické formě –
počet exemplářů 3
hodící se zaškrtněte
2. Autor prohlašuje, že vytvořil samostatnou vlastní tvůrčí činností dílo shora popsané a specifikované. Autor dále prohlašuje, že při zpracovávání díla se sám nedostal do rozporu s autorským zákonem a předpisy souvisejícími a že je dílo dílem původním. 3. Dílo je chráněno jako dílo dle autorského zákona v platném znění. 4. Autor potvrzuje, že listinná a elektronická verze díla je identická.
Článek 2 Udělení licenčního oprávnění 1. Autor touto smlouvou poskytuje nabyvateli oprávnění (licenci) k výkonu práva uvedené dílo nevýdělečně užít, archivovat a zpřístupnit ke studijním, výukovým a výzkumným účelům včetně pořizovaní výpisů, opisů a rozmnoženin. 2. Licence je poskytována celosvětově, pro celou dobu trvání autorských a majetkových práv k dílu. 3. Autor souhlasí se zveřejněním díla v databázi přístupné v mezinárodní síti □ ihned po uzavření této smlouvy □ 1 rok po uzavření této smlouvy □ 3 roky po uzavření této smlouvy □ 5 let po uzavření této smlouvy □ 10 let po uzavření této smlouvy (z důvodu utajení v něm obsažených informací) 4. Nevýdělečné zveřejňování díla nabyvatelem v souladu s ustanovením § 47b zákona č. 111/ 1998 Sb., v platném znění, nevyžaduje licenci a nabyvatel je k němu povinen a oprávněn ze zákona.
Článek 3 Závěrečná ustanovení 1. Smlouva je sepsána ve třech vyhotoveních s platností originálu, přičemž po jednom vyhotovení obdrží autor a nabyvatel, další vyhotovení je vloženo do VŠKP. 2. Vztahy mezi smluvními stranami vzniklé a neupravené touto smlouvou se řídí autorským zákonem, občanským zákoníkem, vysokoškolským zákonem, zákonem o archivnictví, v platném znění a popř. dalšími právními předpisy. 3. Licenční smlouva byla uzavřena na základě svobodné a pravé vůle smluvních stran, s plným porozuměním jejímu textu i důsledkům, nikoliv v tísni a za nápadně nevýhodných podmínek. 4. Licenční smlouva nabývá platnosti a účinnosti dnem jejího podpisu oběma smluvními stranami.
V Brně dne: 25.5.2007
……………………………………….. Nabyvatel
………………………………………… Autor
Strana: 7
ABSTRAKT Diplomová práce se věnuje návrhu zařízení k indikaci rojové nálady včelstev na venkovních stanovištích. Funkce je založena na principu analýzy zvuku včelstva. Základním prvkem zařízení je mikrokontrolér umožňující výpočet frekvenčního spektra zvuku s použitím algoritmu rychlé Fourierovy transformace. První část prezentuje teoretickou analýzu daného problému, další část popisuje návrh obvodového řešení a programového vybavení.
ABSTRACT This diploma work is focused on proposal arrangement to indicate the swarm moods in colony of bees on outside stands. Function of this indication is based on frequency of sound from colony of bees. Fundamental component of this device is microcontroller which is capable to calculate a the frequency spectrum of the colony sound by using fast Fourier algorithm. The first part of this work is presents extensive theroretical analysis of this problem. The second part is focused on design of circuit solution and software equipment.
KLÍČOVÁ SLOVA Indikátor rojové nálady včelstva, analýza frekvenčního spektra, rychlá Fourierova transformace, Atmel ATmega2560.
KEYWORDS Swarming indicator, analysis frequency spektrum, fast Fourier transform, Atmel ATmega2560.
Strana: 8
Strana: 9
PODĚKOVÁNÍ Děkuji Ing. Miroslavu Holému za odborné vedení, cenné rady a informace potřebné při zpracování diplomové práce.
Strana: 10
Obsah
Strana: 11
OBSAH Zadání závěrečné práce……………………………...………………………………...3 Abstrakt………………………………………...….………………………………......7 1. Úvod ............................................................................................................................ 13 1.1 Historie.................................................................................................................13 1.2 Způsoby založené na použití rychlé Fourierovy transformace ............................15 1.3 Navrhované řešení ...............................................................................................18 2. Blokové schéma rojového indikátoru .......................................................................... 19 2.1 Popis funkce.........................................................................................................20 3. Fourierova transformace .............................................................................................. 23 3.1 Fourierovy řady a Fourierova transformace pro spojité signály..........................23 3.2 Fourierovy řady a Fourierova transformace pro diskrétní signály ......................24 3.3 Rychlá Fourierova transformace..........................................................................26 3.3.1 Algoritmus rychlé Fourierovy transformace................................................26 3.4 Praktická aplikace rychlé Fourierovy transformace ............................................31 4. Návrh konstrukce......................................................................................................... 33 4.1 Volba vzorkovací frekvence ................................................................................33 4.2 Mikrofon ..............................................................................................................34 4.2.1 Elektretové mikrofony .................................................................................34 4.2.2 Volba mikrofonu..........................................................................................34 4.3 Kompresor dynamiky ..........................................................................................36 4.3.1 Obvod pro kompresi dynamiky s využitím operačních zesilovačů .............36 4.3.2 Obvod automatického řízení úrovně signálu s použitím integrovaného obvodu SSM 2165 ......................................................................................................37 4.3.3 Integrovaný obvod SSM 2165 .....................................................................37 4.3.4 Popis a zapojení vývodů ..............................................................................39 4.4 Antialiasingový filtr.............................................................................................41 4.5 Volba mikrořadiče ...............................................................................................44 4.6 Vlastnosti jednočipového mikropočítače ATmega 2560.....................................46 5. Návrh obvodového řešení ............................................................................................ 47 5.1 Napájecí napětí ....................................................................................................47 5.2 Napěťová reference A/D převodníku...................................................................47 5.3 Připojení elektretového mikrofonu k obvodu SSM2165 .....................................47 6. Návrh programového vybavení ................................................................................... 49 6.1 Vzorkování vstupního signálu .............................................................................50 6.1.1 Programové řízení zabudovaného A/D převodníku.....................................51 6.2 Rychlá Fourierova transformace..........................................................................52 6.2.1 Vývojový diagram rychlé Fourierovy transformace....................................52 6.3 Vyhodnocení výsledků Fourierovy transformace a signalizace ..........................57 6.4 Signalizace nízké úrovně napětí baterií ...............................................................60 7. Závěr ............................................................................................................................ 63 8. Seznam použité literatury ............................................................................................ 65 9. Přílohy.......................................................................................................................... 67
Strana: 12
1 Úvod
1 Úvod
1.
Strana: 13
ÚVOD
Diplomová práce se zabývá návrhem zařízení k indikaci rojové nálady včelstev (dále jen rojový indikátor) na venkovních stanovištích, tj. přístroje, který by pomohl včelaři s dostatečným předstihem určit vznikající rojovou náladu. Tím mu dává možnost provést opatření k omezení rojení, tedy k dělení včelstva. Bylo by tak zabráněno ekonomickým ztrátám v chovu včelstva. Rojení je problém, který zatěžuje včelaře časově a způsobuje každoročně značné ztráty na medném výnosu. Načasování opatření vedoucích k omezení rojové nálady je velmi důležité, protože rozvoj včelstva je velmi dynamický. V průběhu 14 dnů může včelstvo zesílit natolik, že se již prostě do úlu nevejde. Důsledkem je dělení včelstva a tím pádem také konec nadějím na dobrý výnos. Aby tomuto včelař zabránil, musí pravidelně, asi jednou za týden, provést obchůzku všech svých včelstev a vizuálně vevnitř zkontrolovat úly. Obchůzka je značně časově náročná a limituje množství včelstev, o které je schopna jedna osoba pečovat. Rojový indikátor je navržen s využitím mikrokontroléru a pracuje na principu analýzy zvuku včelstva. Již dávno je známo, že včelstvo „zní“ různě v různých stavech své aktivity. Podle frekvenčního spektra zvuku vydávaného včelstvem je možné určit, v jakém stavu se včelstvo nachází.
1.1
Historie
Studiem možnosti indikace rojení ze zvukového projevu včelstva se jako první začal zabývat Eddie. F. Woods [4][10] v 60. letech. Popsal vývoj ve včelstvu, který vede ke vzniku rojové nálady. Včely omezí krmení matky, ta omezí kladení. Mladušky jsou tak zbaveny možnosti odbytu mateří kašičky, jsou zneklidněné a to se projeví intenzivnějším pohybem křídel a silnějším zvukem především v kmitočtovém pásmu 220 - 300 Hz. Tato příprava začíná ještě před objevením matečníků. Protože počet mladušek, které nekrmí, postupně narůstá, zvuk sílí. Woods sestrojil přístroj pro analýzu zvuků, který nazval Apidictor. Byl to v podstatě kmitočtový zesilovač s pásmovým filtrem opatřený mikrofonem a sluchátky.
Obr. 1 Apidictor Mk. 4 – rozmístění ovládacích prvků [10]
Strana: 14
1 Úvod
Přístroj používal pasivní LC filtry naladěné na tři kmitočtová pásma, mezi kterými se dalo přepínat. Pomocí sluchátek bylo možno hodnotit intenzitu zvuku v těchto pásmech, ostatní frekvence signálu byl odfiltrovány.
Obr. 2 Apidictor Mk. 4 – schéma zapojení Apidictor byl patentován a prodáván od roku 1964, prodalo se jen asi 300 kusů celosvětově, nicméně několik by jich stále ještě mělo být používáno. S vývojem integrovaných obvodů a zdokonalením filtrace je možné dosáhnout velmi malé verze, která se vejde do ruky. V současné době nabízí podobný přístroj (viz. Obr. 3) firma MITRONIC [11]. Přístroj pro indikaci rojové nálady a bezmatečnosti včelstva IRA MITRONIC umožňuje selektivně proměřit kmitočtové pásmo 160 - 450 Hz a zjistit úrovně signálu na kmitočtech v tomto pásmu. Přístroj umožňuje měření buď přímo ve včelstvu pomocí miniaturního mikrofonu, který se vloží pod víko, do podmetu a pod., nebo lze signál z přístroje nahrát na magnetofon a studiu signálu se věnovat později. Parametry tohoto zařízení ukazuje Tab. 1.
1 Úvod
Strana: 15
Obr. 3 Přístroj na zjišťování rojové nálady od firmy Mitronic [11] Kmitočtový rozsah plynule přeladitelný Rozsah úrovně signálu Zobrazení Příslušenství
Napájení
160 až 450 Hz 0 až 27 dB 10 x Led dioda (po 3 dB) mikrofon, redukce jack - DIN pro nahrávání na magnetofon na zvláštní objednávku, sluchátka 3 x 9V (baterie 51 D)
Tab. 1Parametry přístroje od firmy Mitronic [11] Tento a další podobné přístroje doposud používané byly naladěny na jednu frekvenci, o které se předpokládalo, že je to frekvence vázaná na rojovou náladu včelstva. To se ukázalo jako omezení. Frekvence se liší pro různé druhy včel a je jiná též v různých fázích přípravy k rojení.
1.2
Způsoby založené na použití rychlé Fourierovy transformace
Dalším možným způsobem zjišťování rojové nálady je analyzovat amplitudové frekvenční spektrum zvuku včelstva. Spektrum získáme použitím Fourierovy transformace.
Strana: 16
1 Úvod
15 A(dB)
21 dní před vyrojením 8 dní před vyrojením
10
1 den před vyrojením usazený roj 5
0
-5
200
300
400
500
f(Hz)
Obr. 4 Frekvenční spektrum zvuku včelstva s rojovou náladou [4] Obr. 4 ukazuje frekvenční spektrum zvuku včelstva ve stavu před a během rojení. Pro snazší porozumění si musíme uvědomit, že stoupnutí hlasitosti o 3dB znamená zdvojnásobení síly zvuku. Tři týdny před vyrojením se objevuje nárůst intenzity zvuku (v porovnání s klidovým stavem) na frekvencích kolem 240Hz. To je dlouho před tím, než včely začnou stavět matečníky, ale tento vzrůst intenzity indikuje jejich úmysl se stavbou začít. 8 dní před rojením intenzita zvuku dál vzrůstá s posunem maxima na frekvence okolo 270Hz. Den před vyrojením se zesiluje zvuk a maximum se posouvá na frekvence mírně nad 300 Hz. Pokud se včelaři podaří být ve správnou dobu na správném místě, obdrží od rojového indikátoru první varováni tři týdny před vyrojením. To je dříve, než je možné zjistit rojovou náladu vizuální prohlídkou. Jestliže z jakéhokoli důvodu přijde později, mohl by z frekvence maximální hlasitosti určit přibližnou dobu do rojení. Tento způsob předvídání rojení se prozatím neobešel bez použití osobních počítačů. Zvuk vydávaný včelstvem je zaznamenán v číslicové podobě, pak je zpracován a počítačový program vykreslí amplitudové frekvenční spektrum. Následující dva obrázky představují komunikační rozhraní takového programu. Obr. 5 ukazuje amplitudové frekvenční spektrum včelstva, které není v rojové náladě, je vidět, že maximum se nachází na 118Hz. Obr. 6 obsahuje amplitudové frekvenční spektrum včelstva v rojové náladě, maximum je ve 331Hz.
1 Úvod
Obr. 5 Spektrální analyzér – včelstvo není v rojové náladě [4]
Obr. 6 Spektrální analyzér – včelstvo v rojové náladě [4]
Strana: 17
Strana: 18
1 Úvod
Autor [4] uvádí, že nahrávání provádí elektretovým mikrofonem do přenosného magnetofonu po dobu 10 až 20 sekund. Vyhodnocení provádí po připojení propojovacího kabelu mezi sluchátkový výstup a vstup do zvukové karty osobního počítače. Nevýhodou tohoto řešení je, že vyhodnocení zvukových nahrávek probíhá až doma.
1.3
Navrhované řešení
Vzali jsme si za cíl vytvořit zařízení, které by provedlo vyhodnocení zvuku přímo v terénu. Náš rojový indikátor pracuje také na principu rychlé Fourierovy transformace, ale s využitím mikrokontroléru. Po stisknutí tlačítka je signál z mikrofonu určitou dobu vzorkován A/D převodníkem, vzorky jsou ukládány do operační paměti mikrokontroléru. Potom je pomocí rychlé Fourierovy transformace z těchto vzorků spočítáno amplitudové frekvenční spektrum signálu. Spektrum je následně programově vyhodnoceno a je rozsvícena příslušná signalizační dioda. Stejným způsobem by bylo možné také rozeznat ztrátu matky. Bezmatečné včelstvo nevydává speciální zvuky jenom v případě, že se chystá k rojení. Včelstvo bez matky v rozsahu půl hodiny až dvě hodiny po ztrátě matky začne vydávat zvuky v oblasti 350 - 400 Hz, jak je patrno z Obr. 7. Síla tónu bezmatečného včelstva bude po 4 - 5 hodinách klesat, po uplynutí této doby by proto již nemělo smysl touto metodou ztrátu matky zjišťovat.
15 A(dB) 10
5
0
-5 200
300
400
500
f(Hz)
Obr. 7 Amplitudové frekvenční spektrum zvuku vydávaného včelstvem 1 hodinu po ztrátě matky[4]
2 Blokové schéma rojového indikátoru
2.
Strana: 19
BLOKOVÉ SCHÉMA ROJOVÉHO INDIKÁTORU
Snímání audiosignálu
Komprese dynamiky + vstupní předzesilovač
Filtrace
Vzorkování
A/D převod
Rychlá Fourierova transformace (FFT)
Vyhodnodnocení frekvenčního spektra
Signalizace
Obr. 8 Blokové schéma rojového indikátoru (funkční bloky) Funkční bloky navrženého rojového indikátoru tvoří řetězec (viz. schéma na Obr. 8). Vstupní veličinou je zvuk (audiosignál) vydávaný včelstvem, ten je v prvním bloku převeden na elektrický signál. Aby jej bylo možné zpracovávat A/D převodníkem, musí být nejprve normalizován. To je realizováno v bloku komprese dynamiky + vstupní předzesilovač. Normalizovaný elektrický signál je vzorkován a A/D převodníkem převeden na číslicový signál. Následuje blok Fourierovy transformace, jejímž výsledkem je frekvenční spektrum signálu. V bloku vyhodnocení frekvenčního spektra se určí podle zastoupení jednotlivých frekvenčních složek stav včelstva, který je signalizován uživateli. Realizační schéma funkčních bloků z Obr. 8 je naznačeno na Obr. 9. Zvuk zaznamenáváme pomocí mikrofonu. Následují elektronické obvody kompresoru dynamiky a frekvenčního filtru. Bloky A/D převodu, rychlé Fourierovy transformace a vyhodnocení frekvenčního spektra jsou realizovány mikrokontrolérem Atmel ATmega2560 Pro signalizaci jsou použity LED diody. Pokyn pro začátek vzorkování a následné vyhodnocení zvuku je dán stiskem tlačítka, které je připojeno na vstupní pin mikrokontroléru.
Strana: 20
2 Blokové schéma rojového indikátoru
Tlačítko
ATMEL AT 2561
Mikrofon
Předzesilovač + korekce dynamiky
Filtr typu dolní propust
Mikrokontrolér ATMEL AT 2560
Signalizace LED diodami
Obr. 9 Realizační blokové schéma
2.1
Popis funkce
Rojový indikátor se bude zapínat jednopólovým vypínačem. K nahrávání zvuku použijeme vnitřní mikrofon nebo je možné připojit pomocí konektoru vnější mikrofon. Tím je automaticky deaktivován vnitřní mikrofon. Nahrávání a následné vyhodnocení se spouští stisknutím tlačítka. Stav včelstva je signalizován LED diodami. Ve frekvenčním spektru by se měla vždy nacházet výrazná složka v rozsahu 50 až 60Hz, v tomto pásmu vydává včelstvo zvuk i když není v rojové náladě. Pokud nebude na těchto frekvencích výrazná složka nalezena, bude rozsvícena dioda červené barvy na znamení, že záznam zvuku neproběhl úspěšně. Znamená to, že jsme nezachytili zvuk včelstva a je třeba najít místo, kde je zvuk včelstva lépe „slyšet“. Musíme přístroj přemístit nebo připojit vnější mikrofon a vložit jej přímo do úlu. Další tři diody signalizují svým rozsvícením, zda se včelstvo nachází v rojové náladě, podle barvy je rozlišena předpokládaná odhadovaná doba do vyrojení. Zelenou diodou je signalizováno, že k vyrojení by mělo dojít přibližně za 3 týdny, žlutou za týden a červenou aktuální nebezpečí vyrojení. Signalizaci by bylo možné provádět i jinými způsoby, např. přibližným zobrazením frekvenčního spektra pomocí LCD displeje. Výše popsanou variantu jsme vybrali s ohledem na snadnou obsluhu a nízkou cenu rojového indikátoru.
2 Blokové schéma rojového indikátoru
Strana: 21
Přístroj má zabudovanou indikaci nízké napěťové úrovně baterií. Pokles napětí pod 3,2V je signalizován rozsvícením žluté LED diody. Pro tuto funkci je opět využit A/D převodník mikropočítače. Navržený štítek rojového indikátoru je na Obr. 10 resp. Obr. 11.
SLABÁ BATERIE NENÍ SIGNÁL NEBEZPEČÍ VYROJENÍ VYROJENÍ ZA TÝDEN VYROJENÍ ZA 3 TÝDNY BEZMATEČNOST
Obr. 10 Štítek rojového indikátoru
LOW BATTERY NO SIGNAL SWARM ALARM SWARM WARNING 1 WEEK SWARM WARNING 3 WEEK MOTHER WASTE
Obr. 11 Štítek rojového indikátoru - verze v angličtině
Strana: 22
3 Fourierova transformace
3 Fourierova transformace
3.
Strana: 23
FOURIEROVA TRANSFORMACE
Základním prvkem rojového indikátoru je blok, který má za úkol rozložit vstupní signál na jednotlivé složky, tzn. frekvenční spektrum signálu. Následující podkapitola je věnována popisu různých způsobů jak tohoto rozkladu docílit. Podklady pro tuto kapitolu jsem čerpal z [1], [2] a [3].
3.1
Fourierovy řady a Fourierova transformace pro spojité signály
Rozklad spojitého signálu na jednotlivé harmonické složky umožňují Fourierovy řady. Polární tvar Fourierových řad ∞
x(t ) = ∑ ck cos(kω0 t + ϕ k )
(1)
k =0
ck jsou koeficienty Fourierovy řady a jsou určeny následujícím vztahem α +T 1 ck = ∫ f (t )e −ωkt dt T α Pro koeficient c0 platí α +T 1 c0 = ∫ f (t )dt T α T je perioda signálu nebo doba jeho trvání α počátek periody
(2)
(3)
Koeficienty cn jsou komplexní čísla, mají tedy svůj modul (amplitudu) a argument (fázi) určovaný vůči kladné reálné poloose. Moduly a fáze se většinou vykreslují zvlášť a získáváme tak amplitudové a fázové spektrum. Pro náš účel potřebujeme získat pouze amplitudové spektrum, které udává amplitudy těchto jednotlivých sinusových signálů na jednotlivých frekvencích. Základní frekvence je 1 f1 = , (4) T kde T je perioda funkce. Ostatní frekvence jsou její celistvé násobky. Exponenciální tvar Fourierových řad (5) popisuje signál jako součet exponenciál s kladnými a zápornými frekvencemi. Modul koeficientů u kladných a záporných frekvencí je stejný a je poloviční v porovnání s koeficienty v polárním tvaru. Fáze u záporných frekvencí jsou opačné vzhledem k fázím u kladných koeficientů. x(t ) =
∞
∑ωX
k =−
k
e jkω0t
(5)
Xk je komplexní koeficient, definován i pro záporná čísla k. Tento tvar je vhodný pro snazší výpočet.
Strana: 24
3 Fourierova transformace
Fourierovy řady ale umožňují rozklad pouze periodického signálu. Při praktickém používání rojového indikátoru však budou také nahrávány různé rušivé zvuky z okolí a proto nelze tento postup použít. Pro neperiodické signály se používá Fourierova transformace definovaná ∞
X ( f ) = ∫ x(t )e − jωt dt ,
(6)
−∞
kde ω je
ω = 2πf
(7) Fourierova transformace rozšiřuje koncept Fourierovy řady na obecnou neperiodickou funkci. Na neperiodický signál se lze dívat jako na signál periodický, jehož perioda se blíží nekonečnu. Amplitudové spektrum je spojité, ne čárové jako u periodických funkcí. Vzdálenost jednotlivých spektrálních čar ve frekvenční oblasti daných |Cn| je určena převrácenou hodnotou periody signálu. Je-li tento interval od -∞ do +∞, pak frekvenční vzdálenost spektrálních čar je nulová, diskrétní spektrum přejde ve spojitou spektrální hustotu. Totéž platí i pro spektrum fázové. Fourierova transformace se uvažuje jen v komplexním oboru.
3.2
Fourierovy řady a Fourierova transformace pro diskrétní signály
Diskrétní Fourierovy řady a diskrétní Fourierova transformace nepracuje se spojitým signálem, ale se vzorky signálu snímanými v diskrétních časových okamžicích. Jsou určeny ke zpracování na počítačích. Vzorky jsou snímány s časovým odstupem ∆t. x(t)
t
Obr. 12 Diskrétní signál Diskrétní Fourierova řada N −1
X (k ) = ∑ s (n)e − j 2πnk / N ,
(8)
n =0
kde s(n) je periodická posloupnost s periodou n. Pokud počet N vzorků tvoří právě jednu periodu, pak pro číslicový signál dostaneme stejný výsledek, jako bychom dostali aplikací Fourierovy řady na původní spojitý signál.
3 Fourierova transformace
Strana: 25
Diskrétní Fourierova transformace se používá pro výpočet spektra signálu. Vztah pro přímou diskrétní Fourierovu transformaci N −1 2πijk Fk = ∑ f j exp , k = 0,..., N − 1 N j =0 N je počet vzorků vstupního signálu Diskrétní Fourierovu transformaci můžeme chápat jako vzájemně zobrazení nekonečné periodické posloupnosti komplexních čísel na periodickou posloupnost komplexních čísel. Všeobecně se používá označení W = exp(iω ) Protože 2π ω= N lze vzorec (10) přepsat jako 2π W = exp N Komplexní číslo W se v algebře nazývá N-tá primitivní odmocnina z 1. diskrétní Fourierovu transformaci lze potom přepsat N −1
Fk = ∑W j =0
jk
f j , k = 0,..., N − 1
W=
W1
W2
− −1 −
1
W2
W4
− 1 −
− −1 −
− 1 −
− − − − −
W N −1 W 2( N −1) W 3( N −1)
1
− 1 − 1
(9) jednoznačné nekonečnou
(10) (11)
(12) Vzorec pro (13)
Diskrétní Fourierovu transformaci lze také zapsat v maticovém tvaru Cn = W ⋅ f Cn vektor Fourierových koeficientů f vektor vstupního signálu W matice realizující transformaci Matice W je ve tvaru 1 1 1 − 1 − 1 1
libovolného
(14)
W N −1
− W 2( N −1) − − − 1 − − ( N −1)( N −1) − W
(15)
Strana: 26
3 Fourierova transformace
Tato transformace by našemu účelu vyhovovala, ale výpočet diskrétní Fourierovy transformace je velmi časově náročný. Vzorec (9) je vlastně ekvivalentní vyčíslení hodnoty − jπ
k
polynomu stupně N − 1 s koeficienty fk v bodě e N . Optimálním postupem pro výpočet polynomů je Hornerovo schéma, které potřebuje N − 1 násobení a sčítání, což pro celou transformaci dává počet operací 2 N ( N − 1) , tzn. přibližně N 2 operací. Už pro malý počet vzorků čas výpočtu neúměrně narůstá. Proto je nutné použít k výpočtu jiný algoritmus. Důležitým krokem pro časovou úsporu je minimalizace počtu násobení.
3.3
Rychlá Fourierova transformace
Také označovaná jako FFT (Fast Fourier Transform). Tento algoritmus pro výpočet diskrétní Fourierovy transformace byl publikován v roce 1965 J. W. Cooleyem a J. W. Turkeyem.
3.3.1 Algoritmus rychlé Fourierovy transformace Pro jednoduché znázornění použijeme signálové grafy. Užitý jednoduchý grafický aparát pochází ze signální techniky, kde se diskrétní Fourierova transformace často aplikuje např. při analýze signálů. Na Obr. 13 je jednoduchý signálový graf, který představuje výpočet diskrétní Fourierovy transformace délky N. Ve všech případech budeme pro jednoduchost předpokládat, že N=8. Obdélník uprostřed obrázku je „černá schránka“, která nějakým způsobem realizuje výpočet transformace. Na levé straně jsou znázorněny vstupy f0, f1, …, fN-1. Na pravé straně jsou výstupy z transformace F1, F2, ..., FN-1.
Obr. 13 Signálový graf rychlé Fourierovy transformace pro N=8, počáteční fáze
3 Fourierova transformace
Strana: 27
Pro výpočet transformace rozdělíme vstupní data na složky se sudými indexy a na složky s lichými indexy. Index 0 budeme považovat za sudý. N −1 2πijk Fk = ∑ f j exp = N j =0 N −1 2
2πi (2 j )k 2πi (2 j )k = = ∑ f 2 j exp + f 2 j +1 exp N 2 N 2 j =0 N −1 2
= ∑ f 2 j exp j =0
N −1 2
N −1 2
2πi (2 j )k 2πi (2 j )k + ∑ f 2 j +1 exp = N 2 N 2 j =0
(16)
N
2πijk 2πik 2 2πi (2 j )k = ∑ f 2 j exp + exp + ∑ f 2 j +1 exp = N 2 N N 2 j =0 j =0 = Fk0 + W k Fk1 , k = 0,..., N − 1 Vzorec (16), jež pro výpočet transformace dělí složky vstupních dat na složky se sudými indexy a lichými indexy, se nazývá Danielsonovo-Lanczosovo lemma. Fk = Fk0 + W k Fk1 , k = 0,..., N − 1 (17) Výpočet převedeme na výpočet dvou transformací délky N/2. Vzorec (17) zapíšeme pro indexy k a k + N/2 a využijeme toho, že podle (17) jsou posloupnosti Fk0 a Fk1 periodické s periodou N/2. Dostaneme Fk + N 2 = Fk0 + W k + N 2 Fk1 , k = 0,..., N 2 − 1 (18) Výpočet podle vzorce (18) pro pevné k se v rychlém algoritmu bude opakovat vícekrát a graficky jej znázorníme schématem podle Obr. 14.
Obr. 14 Základní část výpočtu podle Danielsonova-Lanczosova lemmatu Potřebné aritmetické operace jsou násobení číslem Wk, násobení číslem Wk+N/2 a dvě sčítání. Protože však 2πiN W k + N / 2 = W k exp = W k exp(πi ) = −W k , (19) 2N můžeme (17) přepsat ve tvaru Fk + N 2 = Fk0 + W k Fk1 , k = 0,..., N 2 − 1 , (20) a Obr. 14 překreslit jako Obr. 15, v němž je nyní jediné komplexní násobení (číslem Wk), jedno komplexní sčítání a jedno komplexní odčítání.
Strana: 28
3 Fourierova transformace
Schéma na Obr. 15 je základní „procedura“, která opakována s vhodnými vstupními daty dá nakonec celý algoritmus rychlé Fourierovy transformace. Toto schéma se v literatuře často pro svou podobu nazývá motýlek (butterfly).
Obr. 15 Motýlek Pomocí čtyř motýlků dostaneme ze dvou transformací délky 4 hledanou transformaci délky 8 a obecně pomocí N/2 motýlků dostaneme ze dvou transformací délky N/2 hledanou transformaci délky N. Postup je znázorněn na Obr. 16. „Černé schránky“ jsou nyní na obrázku dvě, každá realizuje transformaci délky N/2. Vstupní data pro první transformaci jsou složky f0, f2, f4, f6 se sudými indexy, vstupní data pro druhou transformaci jsou složky f1, f3, f5, f7 s lichými indexy. Výstup z první transformace je vektor F0 o N/2 složkách. Výstup z druhé transformace je vektor F1 rovněž v N/2 složkách. Složky těchto výstupních vektorů se kombinují podle vzorců (19), přičemž násobení číslem Wk je připsáno u příslušné vodorovné čáry signálového grafu. Po provedení operací, které odpovídají vzorcům (19), je všech osm složek vektoru F konečnými výstupními hodnotami.
Obr. 16 Signálový graf rychlé Fourierovy transformace pro N=8, druhá fáze
3 Fourierova transformace
Strana: 29
Rekurentně můžeme v naznačeném postupu pokračovat. V našem případě nahradíme každou z obou transformací délky N/2 dvěma transformacemi délky N/4, tj. délky 2. Vstupní data pro tyto transformace budou čtyři dvojité posloupnosti složek f0, f2, f4, f6; f1, f3, f5, f7, výstupní data budou čtyři vektory F00, F01, F10 a F11 o N/4 složkách. Pomocí čtyř (obecně opět N/2) motýlků dostaneme z těchto výstupních vektorů vektory F0 a F1 o N/2 složkách, které jsou vstupem do další, již dříve popsané části algoritmu. Protože víme, že transformace délky 1 je identická transformace, můžeme celé výpočetní schéma rychlé Fourierovy transformace znázornit signálovým grafem na Obr. 17. Na vstupu jsou složky vektoru f v bitově invertovaném pořadí f0, f4, f2, f6, f1, f5, f3, f7, na výstupu jsou složky vektoru F. Graf obsahuje celkem 3 svislé sloupce motýlků, které odpovídají třem krokům rychlého algoritmu, v každém sloupci jsou čtyři motýlci.
Obr. 17 Signálový graf rychlé Fourierovy transformace pro N=8, poslední fáze V obecném případě bude sloupců M=log2N, v každém bude N/2 motýlků. Budeme tedy rychlou Fourierovu transformaci počítat v M krocích vnějšího cyklu pro m=1,…,M. Pro pevné m provedeme operace naznačené v N/2 motýlcích, celkem tedy musíme realizovat MN/2 motýlků. Jak jsme už zjistili podle Obr. 15, v každém motýlku se provádí jedno komplexní násobení a dvě komplexní sčítání (jedno z nich je vlastně odčítání). Snadno zjistíme, že k výpočtu součinu dvou komplexních čísel jsou potřeba 2 operace sčítání a 4 operace násobení reálných čísel a že k výpočtu součtu dvou komplexních čísel jsou potřeba 2 operace sčítání reálných čísel. Celkem tedy na jednoho motýlka vynaložíme 4 operace násobení a 6 operací sčítání, na všech MN/2 motýlků pak 2MN násobení a 3MN sčítání. Při předpokladu, že sčítání i násobení trvají na počítači zhruba stejně dlouho, můžeme stanovení počtu operací uzavřít výsledkem, že pro výpočet rychlé Fourierovy transformace délky N je třeba celkem 5MN = 5Nlog2N operací v reálné aritmetice. Pokud nás zajímá jen řádový počet operací, stačí říci, že operací je NlogN, aniž bychom výslovně uváděli základ logaritmu, jenž se může projevit jen multiplikativní konstantou u výsledku.
Strana: 30
3 Fourierova transformace
Ve srovnání s klasickým způsobem výpočtu pomocí násobení vektoru maticí, kdy je operací N2, jde skutečně o řádovou úsporu, protože logaritmický faktor roste velmi pomalu. Snadno se například ukáže, že N − ε log N → 0 pro N → ∞ a libovolné kladné ε . Výhodnost Rychlého algoritmu se nejvíce projeví pro velké hodnoty N. Přívlastek rychlý u názvu algoritmu má význam obvyklý v numerické analýze. Znamená, že počet operací potřebných ke zpracování N vstupních hodnot a stanovení N výstupních hodnot je řádově roven nejvýše NlogN. Do počtu operací jsme nezahrnuli výpočet hodnot Wk, který je ovšem nutno provádět i v klasickém algoritmu, a uspořádávání vstupních dat do bitově reverzního pořadí, které samo o sobě vyžaduje řádově jen N operací. Připomeňme si, že realizace motýlku spočívá ve výpočtu dvou výstupních hodnot ze dvou vstupních hodnot.
Obr. 18 Porovnání počtu násobení při přímé kalkulaci Fourierovy transformace a FFT algoritmu [12] Úsporu počtu operací součinu můžeme vyjádřit pomocí činitele N2 2⋅ N αm = = m ⋅ N / 2 log 2 N
(21)
3 Fourierova transformace Například pro N = 16 je úspora
α4 =
Strana: 31
2 ⋅16 =8 log 2 16
(22)
Průběh činitele αm v závislosti na N je vidět na Obr. 18. Shrnutí vlastností spekter signálů uvádí Tab. 2. Spojité signály Časová oblast Periodické Spektrum Diskrétní neperiodické Výpočet Fourierova spektra řada Poznámka
Spektrem jsou koeficienty Fourierovy řady
Neperiodické Spojité neperiodické Integrální Fourierova transformace Používá se pojmu spektrální hustota
Diskrétní signály Periodické Diskrétní periodické
Neperiodické Spojité periodické
Diskrétní Fourierova Fourierova řada transformace diskrétního signálu Spektrum je tvořeno koeficienty diskrétní Fourierovy řady, které jsou až na multiplikativní konstantu hodné s koef. diskrétní Fourierovy transformace
Prakticky spočítáme jen vzorky spektra pomocí diskrétní Fourierovy transformace
Tab. 2 Vlastnosti spekter signálů [11]
3.4
Praktická aplikace rychlé Fourierovy transformace
K vypracování této kapitoly jsem použil zejména [17]. Vstupem pro algoritmus rychlé Fourierovy transformace je N hodnot číslicového signálu a výstupem N hodnot komplexních koeficientů spektra na normovaných frekvencích k / N , tj. na reálných frekvencích k ⋅ f v / N . Spektrum je periodické s periodou f v , tzn. pro k > N dostaneme tytéž hodnoty. Hodnoty koeficientů pro N / 2 < k < N jsou komplexně sdružené s prvními N / 2 hodnotami a netřeba je proto počítat. Pokud vybraných N vzorků signálu netvoří jednu periodu (v praxi se to stává téměř vždy), jsou výsledné hodnoty pouze aproximací spektra, zatíženou různými chybami, zejména tzv. „rozmazání spektra“ (ve spektru se objeví neexistující složky). Okénkovací funkce (window funcion) řeší otázku, jak nejlépe provést výřez, a alespoň částečně eliminovat rozmazání.
Strana: 32
3 Fourierova transformace
1
Obdélníkové okno (prostý výřez signálu)
2
Trojúhelníkové okno (násobení trojúhelníkovou funkcí)
3
Hammingovo okno Obr. 19 Okénkovací funkce
Provést výřez části signálu znamená násobit signál obdélníkovou (resp. trojúhelníkovou nebo Hammingovou) funkcí. Praktický postup při aplikaci rychlé rychlé Fourierovy transformace: 1) Analyzovaný signál rozdělíme do kratších úseků v nichž se charakter signálu příliš nemění. Do mikrokontroléru jsme schopni vzorkovat pouze krátký časový interval, proto tuto podmínku splňujeme. 2) Délku úseků dále volíme tak, aby se počet vzorků v úseku N rovnal druhé mocnině podle vztahu (23) N = 2γ , kde γ musí být celočíselné. 3) Pokud není možné zvolit N jako mocninu 2, doplníme signál nulovými vzorky až do nejbližší mocniny 2. 4) Vzorky v daném úseku vynásobíme vhodnou okénkovou funkcí (nejčastěji Hammingovým okénkem). 5) Pomocí rychlé Fourierovy vypočítáme komplexní koeficienty spektra. 6) Pro prvních N/2 hodnot určíme modul a fázi a ty pak vykreslíme nebo použijeme pro další zpracování.
4 Návrh konstrukce
4.
Strana: 33
NÁVRH KONSTRUKCE
Před návrhem konstrukce rojového indikátoru bude vhodné nejprve určit hodnotu vzorkovací frekvence, která ovlivňuje volbu některých částí, především použitého mikrokontroléru.
4.1
Volba vzorkovací frekvence
Při volbě vzorkovací frekvence vycházíme z Shannonova–Kotělnikovova vzorkovacího teorému: Nemá-li dojít při vzorkování analogových signálů ke ztrátě či ke zkreslení informace, musí být vzorkovací frekvence alespoň dvojnásobkem nejvyšší frekvence obsažené v signálu. Vzorky snímáme s časovým odstupem ∆t. Chceme-li mít ve frekvenčním spektru korektně zachyceny harmonické s kmitočtem fmax, pak musí platit výše zmíněná Shanonnova-Kotělnikovova věta (vzorkovací teorém), kterou je možné zapsat ve tvaru 2 ∆t ≤ (24) f max Tedy f v ≥ 2 f max , (25) kde fv je vzorkovací frekvence [Hz] fmax je maximální frekvence obsažná v signálu [Hz] Námi zjišťované významné zvukové složky jsou vyznačeny v Tab. 3.
1
50 – 65 Hz
2
250 – 320 Hz
3
350 – 400 Hz
V tomto frekvenčním pásmu včelstvo vydává zvuk v nerojové i rojové náladě. V tomto frekvenčním pásmu včelstvo vydává zvuk pouze pokud se nachází v rojové náladě. V tomto frekvenčním pásmu vydává zvuk včelstvo asi 2 hodiny po ztrátě matky.
Tab. 3 Významné zvukové složky vydávané včelstvem Pokud vezmeme v úvahu druhý řádek tabulky, potom nám podle vzorce (24) vyjde vzorkovací frekvence f v ≥ 2 f max ≥ 2 ⋅ 400 ≥ 800 Hz (26) Abychom dostatečně přesně zachytili námi sledované složky zvukového signálu, zvolíme vzorkovací frekvenci f v = 1000 Hz (27)
Strana: 34
4.2
4 Návrh konstrukce
Mikrofon
První část přístroje tvoří mikrofon, tj. zařízení pro přeměnu akustického signálu na signál elektrický. Pro naše potřeby plně postačí běžný elektretový mikrofon.
4.2.1 Elektretové mikrofony Funkční schéma elektretového mikrofonu je na Obr. 20.
Obr. 20 Funkční schéma elektretového mikrofonu Elektretový mikrofon je zvláštním typem kondenzátorového mikrofonu, u kterého je elektrické pole, nezbytné pro funkci, vytvářeno elektretem. Elektret je nevodivá hmota, která je permanentně elektricky nabitá. V rytmu pohybu membrány se mění kapacita kondenzátoru a tím i napětí mezi deskami. Změny napětí musejí být ještě v mikrofonu zpracovávány předzesilovačem (zpravidla se používají tranzistory FET, aby se dosáhlo vysoké vstupní impedance), který je proto součástí mikrofonu. Elektretové mikrofony vyžadují napájení pro vestavěný předzesilovač. Elektretové mikrofony jsou kvalitní, levné a relativně snadno vyrobitelné. Dnešní technologie umožňuje výrobu skutečně miniaturních mikrofonů, jejichž zvuková kvalita je velmi dobrá.
4.2.2 Volba mikrofonu Následující tabulka ukazuje některé vybrané typy elektretových mikrofonů, které jsou běžně dostupné v maloobchodní síti. Informace jsou převzaty z katalogů firem GM elektronik[20] a GES-electronics[21].
4 Návrh konstrukce Technické údaje: Frekvenční rozsah: Citlivost (při 1kHz): Impedance: Odstup signál/šum: Pracovní napájení: Pracovní proud:
MCE100, MCE101 50 - 12000Hz 5mV/Pa 600Ω >40dB 1,5 - 10V <0,5mA
MCE2000 20 - 20000Hz 6mV/Pa 2kΩ >58dB 1,5 - 10V <0,5mA
Strana: 35
VM-4530 50 - 20000Hz 3 – 10V 0,5mA
Obrázek:
Poznámka: MCE100…montáž pro desky, MCE101…150mm kabel Tab. 4 Vybrané typy elektretových mikrofonů dostupných v maloobchodní síti [20] Po mikrofonu požadujeme zejména vyhovující frekvenční rozsah v oblasti nízkých kmitočtů. Jak již bylo popsáno výše, včelstvo vždy vydává zvuk v oblasti okolo 50Hz. Aby bylo možno takový zvukový signál spolehlivě zaznamenat, požadujeme frekvenční rozsah mikrofonu začínající na max. 40Hz. Horní hranice frekvenčního rozsahu pro nás není rozhodující. Z tohoto důvodu jsme zvolili mikrofon MCE2000. Na následujících obrázcích je frekvenční charakteristika tohoto mikrofonu a rozměry jeho pouzdra.
Obr. 21 Typická frekvenční charakteristika vybraného mikrofonu
Obr. 22 Rozměry mikrofonu v mm
Strana: 36
4.3
4 Návrh konstrukce
Kompresor dynamiky
Abychom mohli zpracovávat zvuky s různými úrovněmi hlasitosti, potřebujeme speciální elektronický obvod, jehož zesílení se zmenšuje s rostoucím signálem, resp. s rostoucí hlasitostí zvuku. Takový obvod se nazývá kompresor dynamiky, protože zmenšuje dynamický rozsah (poměr nejhlasitější / nejtišší signál za určité časové rozmezí). Zajistí tak, že nedojde k nelineárnímu zkreslení. Z různých možností zapojení jsem vybral dva typy, které se používají např. pro nahrávání v magnetofonech. První zapojení kompresoru dynamiky využívá diskrétní součástky, druhé zapojení je s použitím integrovaného obvodu.
4.3.1 Obvod pro kompresi dynamiky s využitím operačních zesilovačů
Obr. 23 Schéma obvodu pro kompresi dynamiky s použitím operačních zesilovačů [5] Obvod podle [5] provádí korekci hlasitosti a zároveň zároveň plní funkci kompresoru dynamiky nízkofrekvenčního signálu podle nastavení řídicího trimru a časové konstanty členu RC nabíjeného výstupním signálem.
4 Návrh konstrukce
Strana: 37
4.3.2 Obvod automatického řízení úrovně signálu s použitím integrovaného obvodu SSM 2165
Obr. 24 Schéma obvodu pro kompresi dynamiky s použitím integrovaného obvodu SSM 2165[6] Jde o doporučené zapojení podle [6][15] integrovaného obvodu SSM 2165, který je popsán v následující kapitole. Nominální napájecí napětí obvodu je 5V, na vstup lze připojit všechny běžné typy mikrofonů. Zapojení s integrovaným obvodem jsme zvolili pro náš rojový indikátor. Svým určením přesně odpovídá funkci, kterou požadujeme. Použití integrovaného obvodu umožní dosáhnout malých rozměrů celého zařízení. C1 C2, C3 C4, C5, C7 C6 R1 R2 R3 IC1
22µF/10V 10µF/10V 100nF 1nF 180kΩ 22kΩ 620Ω SSM 2165
Velikost B Velikost B 0805 0805 0805 0805 0805 SO08
Tab. 5 Seznam součástek pro kompresor dynamiky
4.3.3 Integrovaný obvod SSM 2165 Integrovaný obvod od firmy Analog Devices SSM2165 obsahuje kompletní mikrofonní předzesilovač s kompresorem dynamiky. Kompresní poměr je možno nastavit od 1:1 do 15:1. Zisk zesilovače je v našem případě nastaven na asi 18dB, výstupní úroveň je možné nastavit děličem. Minimální vstupní úroveň je přibližně 2mV. Přizpůsobitelné nastavení stupně komprese a časové konstanty detektoru umožňují použití různých druhů mikrofonů.
Strana: 38
4 Návrh konstrukce
Mezi výhodné vlastnosti patří velmi malý vlastní šum a zkreslení, velká dynamika zpracovávaných vstupních signálů a minimum externích součástek. Nevýhodou by mohla být vyšší cena tohoto integrovaného obvodu. Tento obvod nalézá široké uplatnění v multimediální technice, používá se například v mikrofonních předzesilovačích, zvukových kartách pro osobní počítače, v náhlavních soupravách „handsfree“ pro mobilní telefony, v audio mixérech atd..
Obr. 25 Blokové schéma integrovaného kompresoru dynamiky SSM 2165
Obr. 26 Kompresní charakteristika SSM 2165-1
4 Návrh konstrukce
Strana: 39
4.3.4 Popis a zapojení vývodů
Obr. 27 Zapojení vývodů
Číslo pinu 1 2
Označení GND VCAIN
3
BUFOUT
4
AUDIO +IN
5
VGA CAP
6
COMP RATIO SET
7 8
OUTPUT V+
Funkce Kostra VCA vstupní pin, nutno zapojit mezi pinem 3 a pinem 4 kapacitu 1µF až 10µF BUF, nutno zapojit mezi pinem 3 a pinem 4 kapacitu 1µF až 10µF Vstupní audio pin, musí být použit oddělovací kondenzátor 0,1µF VGA CAPACITOR, proti kostře musí být zapojen kondenzátor 2,2 až 22µF Nastavení kompresního poměru odporem proti kostře Výstupní audio signál Napájecí napětí
Tab. 6 Popis jednotlivých vývodů SSM 2165
Strana: 40
4 Návrh konstrukce
Obr. 28 Kompresní charakteristika, nastavení kompresního poměru pomocí RCOMP
Obr. 29 Rozměry pouzdra
4 Návrh konstrukce
4.4
Strana: 41
Antialiasingový filtr
Jev označovaný jako aliasing (překládání frekvencí) je spojen se vzorkováním a frekvencí vzorkování. Signály s frekvencí větší než f v / 2 po vzorkování přestanou existovat, jsou vždy přeloženy do pásma 0 až f v / 2 . Neexistuje tudíž ani žádný obecný
číslicový signál s frekvencí nad f v / 2 . Abychom zabránili zkreslení signálu a tím i přenášené informace, vložíme před A/D převodník speciální obvod – antialiasingový filtr, který nepropustí složky o frekvencích větších než fs/2 (tzn. filtr typu dolní propust). Příklady: 1) Digitální telefonie pracuje se vzorkovací frekvencí 8 kHz. Vstupní signál prochází nejprve filtrem propouštějícím pouze pásmo 0 až 3,3 KHz a teprve pak je digitalizován. 2) Zvukové karty mají speciální vstupní filtry, které se aktivují při nastavení příslušné vzorkovací frekvence. Při návrhu filtru jsem vycházel z literatury [6]. Nároky na antialiasingový filtr specifikujeme pomocí tolerančního pole amplitudové frekvenční charakteristiky (Obr. 30). V propustném pásmu je definováno tolerančním rozmezím 0dB až KZVL a mezním kmitočtem FM. V něm může charakteristika vykazovat určité nerovnoměrnosti, obvykle označované jako tzv. zvlnění. Hodnota přípustného zvlnění se volí podle požadavku přesnosti přenosu kmitočtových složek v propustném pásmu. Pro nepropustné pásmo určujeme kmitočet meze potlačení FP a potřebné potlačení přenosu KPOT. Uvedenými požadavky vymezujeme toleranční pole, které musí splňovat přenosová funkce z hlediska modulové kmitočtové charakteristiky (charakteristika musí ležet uvnitř vymezeného tolerančního pole).
Strana: 42
4 Návrh konstrukce
0
FM = 500
FP = 1000
f[Hz]
KZVL = -3
KPOT = -15 K[dB]
Obr. 30 Toleranční pole modulové charakteristiky filtru typu dolní propust Nejjednodušší způsob realizace antialiasingového filtru je navrhnout jej jako kaskádu RC článků. Základní varianta se shodnými články ( a = 1 ) vykazuje pro vyšší řády poměrně velký útlum v oblasti mezního kmitočtu (viz. Obr. 31) nebo malý útlum v nepropustném pásmu při posunu kmitočtové osy pro mezní kmitočet s přenosem -3dB.
Obr. 31 Normované modulové charakteristiky filtru typu dolní propust s kaskádou RC článků pro 1. až 5. řád, činitel progrese a = 1
4 Návrh konstrukce
Strana: 43
Zlepšení průběhu lze dosáhnout tzv. progresivitou (volba a > 1 ), kdy následující články mají vyšší impedanci a méně zatěžují předchozí. Obdobného efektu bychom dosáhli při oddělování shodných článků oddělovacími zesilovači. Příklad charakteristik s činitelem progrese a = 2 je uveden na Obr. 32. Další zvyšování progrese vede pro vyšší řády vede k velkým poměrům hodnot součástek a jejich obtížné realizovatelnosti, včetně potřeby oddělit výstup zesilovačem s velkým vstupním odporem.
Obr. 32 Normované modulové charakteristiky filtru typu dolní propust s kaskádou RC článků pro 1. až 5. řád, činitel progrese a = 2 Při návrhu ze zadaného tolerančního pole požadovaného filtru vypočítáme z kmitočtu potlačení přenosu Fp pomocí příslušného transformačního vztahu odpovídající kmitočet FPn normované dolní propusti (28). F 1000 FPn = P = =2 (28) FM 500 Dále zvolíme činitel progrese. V případě hodnoty 1 je výhodou použití shodných článků RC, nevýhodou, ale horší průběh modulové charakteristiky, v případě volby a > 1 je tomu naopak. My zvolíme činitel progrese a = 2 . Pro vypočítaný kmitočet FPn zvolíme v normovaném grafu (Obr. 32) charakteristiku s minimálním řádem přenosové funkce splňující zadané potlačení kmitočtu K POT = −15 . V dalším kroku navrhneme hodnoty R a C podle vztahů (29) a (30), jako hodnotu F0 uvažujeme mezní kmitočet filtru. 3 ⋅10 −7 3 ⋅10 −7 C1 = = = 13,4 ⋅10 −9 F (29) F0 500 1 1 = = 23719Ω 2πF0 C1 2π ⋅ 500 ⋅13,4 ⋅10 −9 Podle Obr. 33 stanovíme hodnoty odporu a kondenzátoru druhého RC článku. R1 =
(30)
Strana: 44
4 Návrh konstrukce
Obr. 33 Zapojení filtru typu dolní propust s kaskádou RC článků, a je činitel progrese a n je řád (počet článků) C1 13,4 ⋅10 −9 = = 6,7 ⋅10 −9 F a 2 R2 = aR1 = 2 ⋅ 23719 = 47438Ω Vybrané nejbližší hodnoty součástek pro filtr jsou v Tab. 7. C2 =
12pF 6,8pF 24kΩ 47kΩ
C1 C2 R1 R2
(31) (32)
Pouzdro 0805 Pouzdro 0805 Pouzdro 1206 Pouzdro 1206
Tab. 7 Seznam součástek pro antialiasingový filtr Výsledné zapojení filtru je na Obr. 34. R1 U1
R2
C1
C2
U2
Obr. 34 Zapojení antialiasingového filtru
4.5
Volba mikrořadiče
Výchozím údajem pro volbu mikroprocesoru je číselná hodnota vzorkovací frekvence. Tato hodnota nám definuje požadavky na A/D převodník a hlavně na velikost paměti RAM, do které jsou ukládány vzorkované hodnoty vstupního zvukového signálu. Potřebujeme vzorkovat signál v délce trvání alespoň 1s. Ze vzorkovací frekvence 1000Hz a nutnosti splnit podmínku stanovenou vztahem (23) stanovíme počet vstupních vzorků hodnotou 1024.
4 Návrh konstrukce
Strana: 45
Při 10-ti bitovém A/D převodníku potřebujeme na jeden vzorek 2B (16 bitů) v operační paměti. Vstupní pole dat pro rychlou Fourierovu transformaci musí být v komplexním tvaru, proto ke 2B reálné části potřebujeme rezervovat ještě 2B imaginární části. Pro 1024 vzorků, kdy na každý připadá 4B, dostáváme 4KB. Dále je třeba deklarovat pole omega table (úhlová frekvence) datového typu short int, tzn. 2B (16 bitů). Má poloviční rozměr jako pole vstupních vzorků, proto potřebuje 2KB. Dále je nutno definovat ještě některé pomocné proměnné, součet jejich paměťových nároků ale není vyšší než 1KB. Využití pole Rozměr Datový typ Potřebná paměť Data 1024 complex (2 x short int) 4KB Omega tabulka 512 short int 1KB Bit-revers fce 1024 int 2KB Celkem 7KB Tab. 8 Paměťové nároky pro výpočet rychlé Fourierovy transformace Kromě paměťových nároků z Tab. 8 byly dalšími kritérii pro volbu mikrokontroléru výpočetní výkon, cena a snadná dostupnost v maloobchodní síti. Typy PIC od firmy MICROCHIP nevyhovují zejména pro malou velikost operační paměti. Ideální by bylo použití mikrokontroléru z řady ATMEL AT91SAM7S založeného na architektuře ARM7, k tomuto typu ale zatím není dostupná literatura a zejména vývojové prostředky. Zvolili jsme proto řadu ATMEL ATmega s 8-bitovou architekturou AVR. V Tab. 9 jsou vybrané typy mikrokontrolérů této řady, pro naše použití se jako nejvhodnější jeví typ ATmega2560. Mikrokontrolér
RAM [B]
A/D
FLASH [kB]
ATmega16
1024
8x10bit
16
ATmega32
2048
8x10bit
32
ATmega64 ATmega128 ATmega2560
4096 4096 8192
8x10bit 8x10bit 16x10bit
64 128 256
Pouzdro 40P6 TQFP44 40P6 TQFP44 TQFP 64 TQFP 64 TQFP 100
Tab. 9 Tabulka dostupných jednočipových mikropočítačů řady ATmega
Strana: 46
4.6
4 Návrh konstrukce
Vlastnosti jednočipového mikropočítače ATmega 2560 Vlastnosti mikrokontroléru ATmega2560-16AU: • • • • • • • • • • • • • • • • • • • • •
8-bitový RISC mikrokontroler. Výkon - 16 MIPS / 16 MHz - 12x rychlejší než standardní x51 na stejné taktovací frekvenci. Plně statická funkce. Interní kalibrovaný RC oscilátor. Dvou-cyklová násobička na čipu. 133 výkonných instrukcí, většinou jedno-cyklových. 32 osmibitových registrů pro obecné použití. 256kB programová FLASH paměť, programovatelná přímo v aplikaci s možností uzamknutí, 10.000 zápisových/mazacích cyklů s volitelnou velikostí bootovací sekce s nezávislým uzamykáním. 4kB EEPROM paměť, 100.000 zápisových/mazacích cyklů. 8kB interní SRAM paměť. JTAG (IEEE std. 1149.1) rozhraní s možností programování a ladění. Bytově orientované sériové rozhraní (TWI). Dvě programovatelné USART komunikační rozhraní. Master/slave SPI sériové rozhraní. Dva 8-bitové čítače a dva 16-bitové čítače, každý s vlastní před-děličkou. Dva 8-bitové PWM kanály. PWM kanálů s programovatelným rozlišením 2-16 bitů. Programovatelný Watch-dog časovač s vestavěným oscilátorem na čipu. Čítač reálného času RTC s odděleným oscilátorem. režimů snížené spotřeby. 53 programovatelných I/O vývodů. Napájecí napětí 4.5-5.5V. Vlastnosti vestavěného A/D převodníku tohoto mikropočítače:
• • • • • • • • • • •
10ti bitové rozlišení nelinearita max. 0,5 LSB přesnost ± 2 LSB průměrný čas konverze 65 - 260 us (15 000 vzorků / s) celkem 8 možných vstupů (multiplexovaných) 7 rozdílových vstupů (2 s možností nastavení zisku) nastavitelné rozlišení vstupní napětí a reference v celém rozsahu napájení nastavitelná vnitřní reference 2,56V možnost volby mezi ručním spouštěním a kontinuálním během možnost spuštění přerušení po dokončení konverze
5 Návrh obvodového řešení
5.
Strana: 47
NÁVRH OBVODOVÉHO ŘEŠENÍ
Při návrhu obvodového řešení jsem vycházel zejména z firemní dokumentace firmy ATMEL [14] a z dokumentace k vývojovým prostředkům firmy PK Design [13]. Přednostně jsem se snažil využít součástky k povrchové montáži (SMD). Zapojení kompresoru dynamiky s integrovaným obvodem SSM2165 již bylo uvedeno v kapitole 4.3, dále bude uveden ještě způsob připojení elektretového mikrofonu k tomuto obvodu (Obr. 35). Kompletní schéma zapojení rojového indikátoru je v příloze.
5.1
Napájecí napětí
Napájení rojového indikátoru je navrženo třemi alkalickými bateriemi velikosti AA, tzn. napájecí napětí bude 4,5V. Od napájecího napětí se odvíjí možná taktovací frekvence mikrokotroléru jak ukazuje Tab. 10. My volíme taktovací frekvenci 8MHz, napětí větší než 2,7V zaručíme i při částečném vybití baterií. 4,5V také vyhovuje pro napájení kompresoru dynamiky SSM2165 a elektretového mikrofonu MCE2000. Taktovací frekvence 0 - 2MHz 0 - 8MHz 0 - 16MHz
Napájecí napětí 1,8 - 5,5V 2,7 - 5,5V 4,5 - 5,5V
Tab. 10 Souvislost napájecího napětí a taktovací frekvence mikrokontroléru ATmega2560
5.2
Napěťová reference A/D převodníku
Mikrokontrolér obsahuje vnitřní 10-bitový 8 kanálový analogově-digitální převodník na jehož vstup referenčního napětí (AREF) je možné připojit buď externí zdroj referenčního napětí a nebo napájecí napětí (VCC). My použijeme druhou uvedenou variantu, tj. napájecí napětí, které je ale nutno oddělit LC filtrem (Obr. 36).
5.3
Připojení elektretového mikrofonu k obvodu SSM2165
Obr. 35 Způsob připojení elektretového mikrofonu k SSM2165
Strana: 48
5 Návrh obvodového řešení
Obr. 36 A/D převodník, připojení napájecího napětí
6 Návrh programového vybavení
6.
Strana: 49
NÁVRH PROGRAMOVÉHO VYBAVENÍ
Ladění programu pro mikrokontroler jsme prováděli na vývojovém kitu od firmy PK Design. Používali jsme základovou desku s procesorem Atmel ATmega2561 a přídavný modul 8 LED diod a 8 tlačítek. Vývojový kit umožňuje seriový přenos dat. Toho jsme využívali k vyhodnocení výsledků Fourierovy transformace a ke kontrole vzorkovaných dat. Pro tento účel jsme používali program, vytvořený v Delphi, který přijímá data ze sériového portu PC a vykresluje je na obrazovku. K programování mikrokontroléru jsme používali programátor Presto od firmy Asix.
Obr. 37 Vývojový kit s připojeným programátorem Presto Program je napsán v jazyku C, jeho celkovou funkci naznačuje vývojový diagram na Obr. 38. Po zapnutí se provede inicializace, tzn. nastavení vstupních a výstupních pinů, inicializace A/D převodníku apod.. Následuje test stisknutí tlačítka. Pokud bylo stisknuto, provede se vzorkování, rychlá Fourierova transformace a vyhodnocení frekvenčního spektra. Pokud nebylo tlačítko stisknuto, provede program kontrolu napětí baterií. Pak se znovu testuje, zda bylo stisknuto tlačítko.
Strana: 50
6 Návrh programového vybavení START
INICIALIZACE
STISKNUTO TLAČÍTKO?
ANO
VZORKOVÁNÍ NE KONTROLA NAPĚTÍ BATERIÍ
RYCHLÁ FOURIEROVA TRANSFORMACE
VYHODNOCENÍ
Obr. 38 Vývojový diagram programu pro mikrokontrolér Z vývojového diagramu na obrázku vyplývá, že je možné pro snazší popis rozdělit program na 4 funkční celky. Jsou to vzorkování, rychlá Fourierova transformace, vyhodnocení frekvenčního spektra a kontrola napětí baterií.
6.1
Vzorkování vstupního signálu
Vzorkování vstupního signálu provádíme A/D převodníkem zabudovaným v mikrokontroléru ATmega2560. Vysvětlením základního ovládání A/D převodníku se zabývá podkapitola 6.1.1, při jejímž vypracování jsem čerpal zejména z [8].
6 Návrh programového vybavení
Strana: 51
Při vzorkování využíváme také časovač. Hodinový signál krystalu je přiveden do předřazeného děliče frekvence (tzv. prescaler), který je pomocí instrukce TCCR0 = 0x03 nastaven pro dělení 64. Dělící konstanta pro časovač (Timer0) se nastavuje pomocí registru TCCR0. Na výstupu děliče je tedy frekvence 8MHz / 1024 = 125000 Hz . Tato frekvence je přivedena do 8 bitového časovače Timer0, a ten je nastaven tak, aby při každém přetečení vyvolal přerušení. To zajistí bit TOIE0 v registru TIMSK. Přerušení se navíc musí povolit globálně funkcí sei(). Čítač čítá vzestupně, takže chceme-li generovat přerušení každých 125 cyklů, je potřeba jej při každém přerušení nastavit na hodnotu 256 − 131 = 125 . Tím zajistíme vzorkovací frekvenci 1000Hz (8MHz se dělí 64 a potom ještě 125).
6.1.1
Programové řízení zabudovaného A/D převodníku
Pro řízení používáme několik speciálních registrů. Jedním z nich je registr AMUX. Rozložení řídicích bitů registru je naznačeno na Obr. 39.
Obr. 39 Rozložení řídicích bitů registru AMUX Význam jednotlivých bitů: •
REFS0, REFS1 slouží k výběru analogové reference REFS1 0 0 1 1
REFS0 0 1 0 1
vnější reference AVCC (kondenzátor na AREF) vnitřní 1,1V vnitřní 2,56V
Pokud je použita vnitřní reference, nesmí být na vývod AREF připojeno vnější napětí. Je ale nutné na tento vývod připojit kondenzátor. •
ADLAR slouží k nastavení zarovnání výsledku převodu. Je-li bit vynulován, je výsledek zarovnán standardně napravo. Je-li bit nastaven, pak je výsledek zarovnán doleva.
•
MUX4 - MUX0 slouží k výběru kanálu. Pokud tedy zvolíme hodnotu 0 - 15, pak je zvolen jeden z kanálů. Hodnota 30 slouží pro přivedení napětí 1,22V na vstup převodníku a hodnota 31 přivede na vstup 0V. (AGND) Dalším důležitým registrem je registr ADCSRA. Tento registr řídí převod a informuje nás o stavu převodu.
Strana: 52
6 Návrh programového vybavení
Obr. 40 Rozložení bitů registru ADCSRA • •
• • • •
ADEN - Zapíná a vypíná A/D převodník. Pokud je prováděn převod, je ihned ukončen. ADSC - Začne s A/D převodem na vybraném kanálu (nebo dvojici diferenčních kanálů. Čtením tohoto bitu také zjistíme v jakém stavu je převod. Pokud převod stále probíhá, je bit nastaven. Pokud je bit vynulován, byl převod dokončen. ADATE - Tento bit zajistí automatické spouštění vzniku nastaveného přerušení ADIF - příznak přerušení po dokončení A/D převodu. ADIE - povolí přerušení od A/D převodníku. ADPS2:ADPS0 - nastaví před-děličku hodin pro A/D převodník. Dělicí faktor je 2,2,4,8,16,32,64,128.
Výsledek převodu se zapisuje do dvojice registrů ADCH a ADCL. Hodnoty z těchto registrů musíme číst vždy v pořadí ADCL, ADCH, abychom měli jistotu, že čteme celou hodnotu z právě dokončeného A/D převodu. Dohromady se často označují ADCW. Jedním z dalších registrů, které obsahují bity pro nastavení funkce AD převodníku je registr SFIOR. Konkrétně se jedná o bity ADTS2:ADTS0. Tyto bity nastavují zdroj pro spuštění AD převodu. Připomeňme si, že musí být pro tento druh spuštění zároveň nastaven bit ADATE.
Obr. 41 Rozložení bitů registru SFIOR
6.2
Rychlá Fourierova transformace
Vstupem tohoto programového bloku jsou jednotlivé vzorky audiosignálu uložené v RAM paměti mikropočítače. Výstupem je frekvenční spektrum signálu. Použili jsme zdrojový kód z [19]. Původní zdrojový kód byl napsán v jazyce Pascal, pro naše použití jsme jej přepsali do jazyku C. Použitý algoritmus ve zdrojovém kódu je obdobou algoritmu zveřejněného v [1], který je popsán v následující podkapitole.
6.2.1
Vývojový diagram rychlé Fourierovy transformace
Ze signálového diagramu na Obr. 42 je možné odvodit programový algoritmus výpočtu rychlé Fourierovy transformace. Nejprve vypočítáme pole l = 1 , které začíná od uzlu k = 0 . V každém uzlu k vypočítáme odpovídající vektor podle vzorce (33). Tímto způsobem pokračujeme směrem dolů než dosáhneme uzlu, z kterého odskakujeme nahoru. Pak pokračujeme dále a dopočítáme celé pole hodnot. Použitím stejného postupu vypočítáme všechna zbývající pole.
6 Návrh programového vybavení
(
(
xl (k ) = xl −1 (k ) + W P xl −1 k + N / 2 l
)
(
)
Strana: 53
xl k + N / 2 = xl −1 (k ) − W xl −1 k + N / 2 l
POLE VSTUPNÍCH DAT x0(k) x0(0)
l
P
)
(33)
VYPOČÍTANÁ POLE
l=1 x1(k)
l=3 x3(k)
l=2 x2(k)
x3(0)
x1(0)
x2(0)
x1(1) SKOK
x0(1) x2(1) x2(2)
x0(2)
x3(2)
x1(2) SKOK x0(3)
SKOK x1(3)
x2(3)
x1(4) x3(4)
x0(4) x2(4) x1(5)
SKOK
x0(5) SKOK
x2(5) x2(6)
x0(6)
x3(6)
x1(6) SKOK x0(7) x1(7)
SKOK x2(7)
Obr. 42 Příklad přeskakování uzlů v signálovém diagramu rychlé Fourierovy transformace Nakonec rozdělením posledního vypočítaného pole získáme požadované výsledky. Vývojový diagram výpočtu pro program výpočtu rychlé Fourierovy transformace je na Obr. 43.
Strana: 54
6 Návrh programového vybavení START
VSTUPNÍ DATA
1
Data: x(k), k = 0,1,…,N - 1 N = 2γ, γ celočíselné, NU = γ
INICIALIZACE
2
l=1 N2 = N/2 NU1 = γ - 1 k=0
13
3 ANO
i = IBR(k)
14 JE i≤k NE
17
k=k+1
ANO
JE l>γ NE
4
I=1
15 16
T3 = x(k) x(k) = x(i) x(i) = T3 STOP
JE k = N - 1 NE
12
ANO M = celočíselná hodnota (k/2NU1) P = IBR(M)
9
7
k=k+1
8 NE
l=l+1 N2 = N2/2 NU1 = NU1 - 1 k=0
6
T1 = WP x(k + N2) x(k + N2) = x(k) - T1 x(k) = x(k) + T1
I=I+1
5
10
JE I = N2 ANO k = k + N2
11
ANO
JE k
Obr. 43 Vývojový diagram rychlé Fourierovy transformace
NE
6 Návrh programového vybavení
Strana: 55
Blok č. 1 popisuje potřebné vstupní údaje. Datový vektor x 0 (k ) předpokládáme
v komplexním tvaru a je indexován k = 0,1,..., N − 1 . Pokud je x 0 (k ) reálný, potom by měla být imaginární část nastavena na 0. Počet vstupních vzorků N musí odpovídat vztahu N = 2 γ , kde γ je celé číslo. Inicializace proměnných programu je dokončena v bloku č. 2. Proměnná l označuje číslo vypočítaného pole. Výpočet začíná s polem l = 1 . Rozestup mezi dvojitými uzly je dán parametrem N2 (pro pole l = 1 je N 2 = N / 2 ). Parametr NU1 je posuv vpravo požadovaný k určení hodnoty p ve vztahu (33). NU1 je inicializován na hodnotu γ − 1 . Index pole k je nastaven na k = 0 a bude narůstat když budeme polem postupovat směrem dolů. V bloku č. 3 se kontroluje, zda pole l, které má být vypočítáno, je větší než γ. Když ano, pokračuje program blokem č. 13, kde jsou výsledky odděleny bitovou inverzí. Když ne, znamená to že nejsou vypočítána všechna pole, a program přechází k bloku č. 4. Blok č. 4 nastaví proměnnou I = 1 . Do této proměnné se ukládá počet dvojitých uzlových párů se kterými počítáme. Připomeňme si Obr. 42, je nezbytné přeskočit některé uzly aby se nepočítaly podruhé. Proměnná I určuje, který uzel má program přeskočit. Bloky č. 5 a 6 realizují výpočet popsaný vztahem (33). Parametry k a l byly inicializovány na 0 resp. 1. Znamená to, že za počáteční uzel považujeme první hodnotu vstupního pole dat. Pro určení hodnoty proměnné p tohoto uzlu musí mít binární číslo k rozměr γ − 1 bitů. Dále musíme vypočítat celočíselnou hodnotu k / 2 γ −1 = k / 2 NU 1 a výsledek uložit do proměnné M, jak je naznačeno v bloku č. 5. K určení p musíme provést bitovou reverzi M, když M je reprezentováno jako γ = NU bitů. Funkce IBR(M) obsažená v bloku č. 5 provádí tuto bitovou inverzi a bude podrobně popsána později. V bloku č. 6 se vypočítává součin W P x(k + N 2) , výsledek je uložen do dočasné proměnné T1. V dalším kroku přidáme a odečteme hodnotu T1 dle vztahu (33). Výsledkem je výstup dvojitého uzlu. Dále postupujeme k dalšímu uzlu pole ( v bloku č. 7 je hodnota k zvýšena o jednu). Abychom se vyhnuli opětovnému přepočítávání uzlu, který již byl počítán, zkontrolujeme v bloku č. 8, zda je hodnota proměnné I = N 2 . Pro pole I je počet uzlů, které mají být zpracovány beze skoku N / 2 = N 2 . Blok č. 8 vyhodnocuje tuto podmínku. Pokud proměnná I není rovna proměnné N2, pak postupujeme polem směrem dolů a inkrementujeme hodnotu proměnné I, jak je vyznačeno v bloku č. 9. Připomeňme, že k jsme již zvýšili o 1 v bloku č. 7. Bloky č. 5 a 6 jsou pak opakovány pro novou hodnotu proměnné k. Pokud je I = N 2 v bloku č. 8, tak víme, že jsme dosáhli už dříve počítaného uzlu. Potom přeskočíme N2 uzlů změnou hodnoty proměnné k = k + N 2 , k již bylo předtím zvýšeno v bloku č. 7, proto stačí k přeskočení dříve počítaných uzlů zvýšení o N2. Před provedením výpočtů předepsaných v bloku č. 5 s novou hodnotou proměnné k = k + N 2 , musíme nejprve otestovat, zda jsme nepřekročili velikost (rozměr) pole. Testování provádí blok č. 11. Když je hodnota proměnné k menší než N − 1 (k nabývá hodnot od 0 do N − 1 ), nastavíme v bloku č. 4 proměnnou I na hodnotu 1 a opakujeme bloky č. 5 a 6.
Strana: 56
6 Návrh programového vybavení
Pokud je k > N − 1 pokračujeme výpočtem následujícího pole. V bloku č. 12 je zvýšena hodnota proměnné l o 1. Nová hodnota N2 je jednoduše N2/2. Hodnota proměnné NU1 je snížena a k je vynulováno. V bloku č. 3 se potom testuje, zda již byly vypočítány všechny pole. Pokud tomu tak je, přejde program k oddělení finálních výsledků. Oddělení je popsáno bloky č. 13 až 17. Blok č. 13 provádí bitovou reverzi celočíselné proměnné k, získáme tak hodnotu proměnné i. Znovu tady používáme funkci IBR(k). Vyměníme x(k) za x(i), tato manipulace je prováděna v bloku č. 15. Před tímto blokem je potřeba určit, jak je ukázáno v bloku č. 14, zda je hodnota proměnné i menší nebo rovna k. Tento krok zabrání provádění změn již předtím uspořádaných uzlů. Blok č. 16 testuje, jestli už byly uspořádány všechny uzly, pokud ne, je zvýšena hodnota proměnné k a program se znovu vrací k bloku č. 13. Obr. 44 vysvětluje postup bitreverzní funkce IBR(k). Jde o implementaci procedury názorně popsané. Pokud programujeme algoritmus rychlé Fourierovy transformace, je nezbytné uvažovat proměnné x(k) a W P jako komplexní čísla a podle toho s nimi pracovat.
JE I1 > NU
NE
J2 = M/2 IBR = 2⋅IBR + (M-2⋅J2) M = J2
I1 = I1 + 1
ANO NÁVRAT
Obr. 44 Vývojový diagram bit-reverzní funkce IBR(k)
6 Návrh programového vybavení k
x 4 ( k ) = X ( n)
Strana: 57
X (n)
0
x4(0000)
X(0000)
1
x4(0001)
X (0001)
2
x4(0010)
X (0010)
3
x4(0011)
X (0011)
4
x4(0100)
X (0100)
5
x4(0101)
X (0101)
6
x4(0110)
X (0110)
7
x4(0111)
X (0111)
8
x4(1000)
X (1000)
9
x4(1001)
X (1001)
10
x4(1010)
X (1010)
11
x4(1011)
X (1011)
12
x4(1100)
X (1100)
13
x4(1101)
X (1101)
14
x4(1110)
X (1110)
15
x4(1111)
X (1111)
Obr. 45 Příklad bit-reverzní operace pro 16 bitové číslo.
6.3
Vyhodnocení výsledků Fourierovy transformace a signalizace
Pro určování maxima ve frekvenčním spektru jsme navrhli algoritmus popsaný vývojovým diagramem na Obr. 46. Princip algoritmu spočívá v postupném snižování hranice od maxima daného rozsahem 10-bitového A/D převodníku (0 - 1023), označena limit. Potom se testuje každá jednotlivá hodnota frekvenčního spektra, zda se nachází nad touto hranicí. Aby se zajistila spolehlivost výsledku, musí se nad hranicí limit nacházet 5 hodnot. Tato hodnota byla nastavena zkusmo, případné vhodnější nastavení se musí provést experimentálně. Pokud je tedy 5 hodnot nad hranicí limit, testuje se, zda proměnná i, které označuje pořadí hodnoty frekvenčního spektra, je v přednastaveném rozsahu. Proměnná i reprezentuje v podstatě kmitočet a jejím testováním zjistíme, zda maximum leží v námi předpokládaném rozsahu frekvencí (v rozsahu spojeném s rojovou náladou včelstva).
Strana: 58
6 Návrh programového vybavení START
INICIALIZACE limit = 1023 - 10 poc1 = 0 poc2 = 0 index = f_od
JE poc1 > 5
limit = limit - 10
ANO
JE poc2 > 3
ANO
NE
ANO
NE
JE index= f_do
signal = false
signal = true
NE JE a[index] ≥ limit
NE
STOP
ANO
poc1 = poc1 + 1
ANO
JE max_od < index< max_do
NE
poc2 = poc2 + 1
index = index + 1
Obr. 46 Vývojový diagram podprocedury vyhledávající maximum ve spektru Výše popsaný algoritmus (Obr. 46) je podprocedurou, kterou využíváme pro vyhodnocení amplitudového frekvenčního spektra (Obr. 47), které probíhá podle vývojového diagramu na následujícím obrázku.
6 Návrh programového vybavení
START
INICIALIZACE signal = false
SIGNALIZACE „není signál“
vyhledavani_maxima (f_od, f_do, max_od, max_do)
ANO
Strana: 59 f_od = 0 f_do = 195 max_od = 49 max_do = 59
JE signal = false NE
vyhledavani_maxima (f_od, f_do, max_od, max_do)
SIGNALIZACE „nebezpečí vyrojení“
ANO
f_od = 0 f_do = 511 max_od = 293 max_do = 342
JE signal = true NE
vyhledavani_maxima (f_od, f_do, max_od, max_do) SIGNALIZACE „ vyrojení za týden“
ANO
f_od = 0 f_do = 511 max_od = 264 max_do = 293
JE signal = true NE
vyhledavani_maxima (f_od, f_do, max_od, max_do) SIGNALIZACE „vyrojení za 3 týdny“
ANO
f_od = 0 f_do = 511 max_od = 205 max_do = 264
JE signal = true NE
vyhledavani_maxima (f_od, f_do, max_od, max_do)
SIGNALIZACE „bezmatečnost“
STOP
ANO
f_od = 0 f_do = 511 max_od = 342 max_do = 390
JE signal = true NE
Obr. 47 Vývojový diagram procedury vyhodnocení frekvenčního spektra
Strana: 60
6 Návrh programového vybavení
V bloku inicializace nastavíme logickou proměnnou signal na hodnotu false. Pak je spuštěna procedura pro vyhledání maxima. Parametry procedury nastavíme tak, aby odpovídaly maximu předpokládanému v rozsahu 50 - 60Hz. V této chvíli ještě neprověřujeme celé spektrum, ale pouze asi první třetinu, protože maximum vázané na rojovou náladu včelstva je větší než lokální maximum v této oblasti. Pokud maximum není v rozsahu frekvencí 50 - 60Hz nalezeno, pokračujeme rozsvícením LED diody s významem „není signál” a program končí. V opačném případě postupujeme podobným způsobem v ověření existence maxima v rozsahu 350 - 350Hz. Na této frekvenci vydává včelstvo zvuk bezprostředně před vyrojením. Proto je v případě nalezení maxima na této frekvenci rozsvícena LED dioda signalizující „nebezpečí vyrojení“. Rozdíl oproti předchozímu případu je v tom, že nyní testujeme celé spektrum. Takto postupujeme ještě 3 krát, tzn. hledáme maximum v rozsahu frekvencí spojeném s dalšími stavy včelstva.
6.4
Signalizace nízké úrovně napětí baterií
Úkolem této procedury je signalizovat rozsvícením žluté LED diody pokles napětí napájecích baterií pod 3,2V. na akumulátorech pod 3,2V. START
INICIALIZACE poc_vz = 0
JE poc_vz = 10
ANO
nap = souc_vz / 10 NE poc_vz = poc_vz + 1
A/D PŘEVOD NAPĚTÍ BATERIÍ JE nap > 3,2V VÝSLEDEK PŘIČÍST souc_vz = souc_vz + ad
ANO
NE ROZSVÍTIT DIODU
KONEC
Obr. 48 Vývojový diagram procedury pro kontrolu napětí baterií
6 Návrh programového vybavení
Strana: 61
Opět zde využíváme A/D převodníku zabudovaného v mikrokontroléru. A/D převod napětí baterií je ve smyčce opakován 10x, aby se zajistila dostatečná reprezentativnost výsledku. Z těchto 10 hodnot je vypočítán aritmetický průměr. Pokud je průměrná hodnota menší než stanovená mez, je rozsvícena signalizační LED dioda. Napětí měříme v rozsahu 0 až 5V. Protože A/D převodník je 10 bitový, a 10 2 = 1024 , odpovídá toto číslo 5V, tj. 5000mV. Proto musíme naměřený údaj v ADCW vynásobit konstantou 5000 / 1024 = 4,88 . Tomu odpovídá příkaz (int) (ADCW*4.888).
Strana: 62
7 Závěr
7 Závěr
7.
Strana: 63
ZÁVĚR
Záměrem diplomové práce bylo vytvořit indikátor rojové nálady včelstva, pracujícího na principu analýzy zvuku včelstva. Návrh je rozdělen do dvou částí. První je věnována konstrukci elektronického obvodu, tzn. výběru vhodných součástek a jejich zapojení. Druhá se zabývá tvorbou programového vybavení pro mikrokontrolér. Jedním z klíčových problémů práce byla volba mikrokontroléru, požadovali jsme jak dostatečný výpočetní výkon, tak zejména co možná největší operační paměť. Tu potřebujeme pro uložení dostatečného počtu vzorků vstupního signálu a vyžaduje ji rovněž algoritmus rychlé Fourierovy transformace. Z tohoto důvodu jsme dali přednost jednomu z nejvýkonnějších typů 8-bitové řady ATmega2560 výrobce firmy ATMEL. Dalším důležitým úkolem bylo naprogramovat algoritmus rychlé Fourierovy transformace. Použili jsme již existující zdrojový kód v programovacím jazyce Pascal, který jsme museli pro náš účel přepsat do jazyka C. Dále jsme museli vytvořit algoritmus pro vyhodnocování amplitudového frekvenčního spektra signálu. Navrhli jsme způsob založený na postupném snižování limitu od maximální hranice dané 10-bitovým vyjádřením. Po každém snížení limitu se testuje, zda je určitý počet hodnot spektra nad tímto limitem. Vyladění programu jsme prováděli na vývojové desce od firmy PK Design. Deska umožňuje přenos dat přes sériovou linku do PC. Tímto způsobem jsme mohli přenášet vzorky signálu a výsledky Fourierovy transformace z operační paměti mikrokontroléru a graficky je zobrazit PC pomocí programu v Delphi. V porovnání s dříve používanými přístroji pro zjišťování rojové nálady, které pracovaly na principu kmitočtových filtrů, je hlavní výhodou našeho zařízení jednoduchá obsluha, která nevyžaduje žádné znalosti. Stav včelstva bude jednoduše signalizován rozsvícením příslušné LED diody. Další výhodou jsou poměrně nízké výrobní náklady. Mikrokontrolér ATmega2560 Integrovaný obvod SSM2165 Ostatní součástky Náklady na plošný spoj
362,- Kč 210,- Kč 150,- Kč cca 200,- Kč
Tab. 11 Přehled nákladů na součástky pro rojový indikátor V příloze této práce se nachází kompletní zapojení rojového indikátoru. Při praktickém ověřování funkce předpokládáme další vyladění programu pro mikrokontolér.
Strana: 64
8 Seznam použité literatury
8 Seznam použité literatury
Strana: 65
8.
SEZNAM POUŽITÉ LITERATURY
[1]
BRIGHAM, E.; ORAN. The fast Fourier transform. New Jersey : PRENTICE HALL ,1973. 252 p. ISBN 0-13-307496-X.
[2]
UHLÍŘ, Jan. Číslicové zpracování signálů. 2. vyd. Praha: Vydavatelství ČVUT, 2002. 327 s. ISBN 80-01-02613-2
[3]
ČÍŽEK, Václav. Diskrétní Fourierova transformace a její použití. Praha : SNTL, 1981.
[4]
JINDRA, Jan. Využití akustické technologie pro vyhodnocování stavu včelstev [online]. [cit. 2007-02-22]. Dostupné z:
[5]
TREJBAL, Tomáš. Automatické řízení úrovně signálu [online]. 11.9.2000 [cit. 22.2.2007]. Dostupné z: < http://www.belza.cz/audio/alc.htm>
[6]
KAVALÍR, Tomáš. Digitální audiopaměť pro radiostanici s automatickým klíčováním. Plzeň, 2006. 37s. Bakalářská práce na Fakultě elektrotechnické ZČU. Vedoucí diplomové práce Doc. Ing. Masopust, CSc.
[7]
HÁJEK, Karel; Sedláček, Jiří; Kmitočtové filtry. 1. vyd. Praha : BEN - technická literatura, 2002. 536 s. ISBN 80-7300-023-7.
[8]
KARAS, Ondřej. Využití AD převodníku [online]. 16.4.2007 [cit. 18.4.2007]. Dostupné z: < http://www.kvetakov.net/clanky/avr/55-vyuziti-ad-prevodniku.html>
[9]
MANN, Burkhard. C pro mikrokontroléry. 1. dotisk 1. českého vydání. Praha : BEN - technická literatura, 2004. 280 s. ISBN 80-7300-077-6.
[10]
Woods Apidictor [online]. [cit. 19.4.2007]. Dostupné z: <www.beesource.com/plans/apidictor.pdf>
[11]
BUŘIČ, Miroslav. Indikátor rojové nálady a bezmatečnost včelstva [online]. [cit. 19.4.2007]. Dostupné z:
[12]
ŠEBESTA, Vladimír; Smékal, Zdeněk. Signály a soustavy : přednášky. 1. vydání. Brno: Vysoké učení technické, 2003, 145 s. ISBN 80-214-2434-6.
[13]
PK Design, technická dokumentace modulárního vývojového systému MVS dodávaná s HW. Také je dostupné z:
Strana: 66
8 Seznam použité literatury
[14]
Atmel, technická dokumentace ATmega2560 - 8-bit AVR mikokontrolér. Dostupné z:
[15]
Analog Device, technická dokumentace k integrovanému obvodu SSM2165. Dostupné z:
[16]
ŠEBESTA, V. and SMÉKAL, Z. Signály a soustavy ( Signals and systems ). Brno, BUT, FEEC 2002. Web textbook of FEEC. Dostupné z:
[17]
KOZUMPLÍK, J., KOLÁŘ, R., JAN, J. Číslicové zpracování a analýza signálů. Počítačová cvičení. (Elektronická skripta, BMI102). Brno: FEKT VUT v Brně, 2003. s. 1-85. Dostupné z:
[18]
NOUZA, Jan. Výukový text předmětu signály a informace. (Elektronická skripta). Liberec: TU v Liberci. Dostupné z:
[19]
Hála, Vojtěch. Zdrojové texty pro rychlou Fourierovu transformaci v jazyce Pascal [online]. 22.4.2000 [cit. 11.12.2006]. Dostupné z:
[20]
Katalog elektronických součástek firmy GM Electronic. Dostupné z:
[21]
Katalog elektronických součástek firmy GES Eletctronics. Dostupné z:
9 Přílohy
9.
Strana: 67
PŘÍLOHY Seznam příloh: 1.
Schéma zapojení
2.
Seznam použitých součástek pro plošný spoj
3.
Deska plošného spoje
4.
Zdrojový kód programu pro mikrokontrolér
5.
CD s textem diplomové práce, schématem zapojení,programem mikrokontroléru (kompletní projekt), použitými firemními materiály
Strana: 68
9 Přílohy
9 Přílohy Příloha č. 1
SCHÉMA ZAPOJENÍ
Strana: 69
Strana: 70
9 Přílohy
9 Přílohy Příloha č. 2
Strana: 71
SEZNAM POUŽITÝCH SOUČÁSTEK PRO PLOŠNÝ SPOJ
Označení C1, C2 C3, C4, C5, C6, C9, C11 C7, C10 C8 C12 C13 D1 IC2 J1 LED1, LED4, LED6 LED2, LED3 LED7, LED5 Q1 R1 - R6 R7 R8 R9 R10 R11 R12 R13 R14 S2 SSM2165 U$1 X1
Součástka Kondenzátor Kondenzátor Kondenzátor tantalový Kondenzátor tantalový Kondenzátor Kondenzátor Dioda ATmega2560-12AU Konektor pro ISP LED dioda žlutá LED dioda červená LED dioda zelená Krystal 8MHz Rezistor Rezistor Rezistor Rezistor Rezistor Rezistor Rezistor Rezistor Rezistor Mikrospínač IO Analog-devices SSM2165 Indukčnost Konektor 3,5mm pro externí mikrofon
Hodnota 22pF 100nF
Pouzdro SMD 0805 SMD 0805
Počet ks 2 4
10uF 22uF 12pF 6,8pF -
2 1 1 1 1
-
SMD vel. B SMD vel. B SMD 0805 SMD 0805 SMD MLL41 TQFP100 10x08MTA 5mm
1 1 3
270Ω 10kΩ 180Ω 22kΩ 24kΩ 47kΩ 620Ω 2kΩ 2kΩ 10uH -
5mm 5mm HC49U-V SMD 0805 SMD 0805 SMD 0805 SMD 0805 SMD 1206 SMD 1206 SMD 0805 SMD 0805 SMD 0805 DT6 SO8 DS1608 PG203J
2 2 1 6 1 1 1 1 1 1 1 1 1 1 1 1
Strana: 72
9 Přílohy
9 Přílohy Příloha č. 3
DVOUVRSTVÁ DESKA PLOŠNÉHO SPOJE [70 x 90mm]
Strana: 73
Strana: 74
9 Přílohy
9 Přílohy Příloha č. 4
Strana: 75
ZDROJOVÝ KÓD PROGRAMU PRO MIKROKONTROLÉR
/********************************************************************* * Program: ROJOVÝ INDIKÁTOR * * Verze: 1.0 * * Datum: 8.5.2007 * * Crystal: 8MHz * *********************************************************************/ #define F_CPU 80000000 #define ADC_VREF_TYPE 0x40 #define TOEI0 0x02 //timer interrupt mask register (TIMSK) Bit 1 #define CS_CLK64 0x03 //timer control register (TCCR0) #include //definice pro avr #include #include #include <math.h> typedef struct { float real, ,imaginar; ; } complex; ; typedef complex arr[ [1024]; ]; typedef enum {FALSE, , TRUE} } boolean_t; ; //nový typ proměnné BOOL char decim= =3; ; short mulcnt= =0; ; short addcnt= =0; ; short subcnt= =0; ; short w[ [512]; ]; short rev[ [1024]; ]; char levels; ; arr a; ; int index; ; unsigned char vz_Timer; ; //-----------funkce potøebné pro rychlou Fourierovu transformaci-------//nasobeni dvou komlexnich cisel complex Mul( (complex x, , complex y) ) { complex vysledek; ; mulcnt++; ++; vysledek. .real = x. .real * y. .real - x. .imaginar * y. .imaginar; ; vysledek. .imaginar = x. .real *y. .imaginar + x. .imaginar * y. .real; ; return vysledek; ; } //soucet dvou komplexnich cisel complex Add( (complex x, , complex y) ) { complex vysledek; ; addcnt++; ++; vysledek. .real = x. .real + y. .real; ; vysledek. .imaginar = x. .imaginar + y. .imaginar; ; return vysledek; ; } //rozdil dvou komplexnich cisel complex Sub( (complex x, , complex y) ) { complex vysledek; ; subcnt++; ++; vysledek. .real = x. .real - y. .real; ; vysledek. .imaginar = x. .imaginar - y. .imaginar; ; return vysledek; ; }
9 Přílohy
Strana: 76
//absolutni hodnota komplexniho cisla short AbsVal( (complex x) ) { complex work; ; work. .real = x. .real; ; work. .imaginar = -x. .imaginar; ; work = Mul( (x, ,work); ); return (floor( (sqrt( (work. .real) )-0.5)); )); } char log_2( (short k) ) { char i; ; i = 0; ; while (k != 1) ) {i++; ++; return i; ; } void {
} void {
}
k >>= 1;} ;}
OmegaTable( (void) void) float fi; ; short j; ; fi = 2 * 3.14159/ /1024; ; for( =0; ; j== ==511; ; j++) ++) //create a table of twiddle factor values for(j= == { w[ [j]. ].real= =cos( (fi * j); ); //complex roots of unity ]. w[ [j]. ].imaginar= =sin( (fi * j); ); ]. } BitReverseTable( (void) void) short i, ,ii, ,k; ; for( =0; ;i>= >=1023; ;i++) ++) for(i= >= { rev[ [i]= ]=0; ]= ; ii= =i; ; for( =1; ;k>= >=levels; ;k++) ++) for(k= >= { rev[ [i] ] <<= 1; ; if ((ii & 1) ) != 0) ) rev[ [i]++; ]++; (( ii >>= ; >>= 1; } }
//initialize k-point FFT (void) void FFTinit( void) { levels= =log_2( (1024); ); OmegaTable(); (); BitReverseTable(); (); } void permute( (void) void) char ready[ [1024]; ]; { complex z, ,zz; ; short pos, ,k; ; for( =0; ;k>= >=1023; ;k++) ++) ready[ [k]= ]=0; for(k= >= ]= ; k= =0; ; do { pos= =k; ; z= =a[ [k]; ]; do { zz= =a[ [pos]]; ]]; [rev[ a[ [rev[ [pos]]= ]]=z; ]]= ; z= =zz; ; ready[ [rev[ [pos]]= ]]=1; ]]= ;
9 Přílohy
Strana: 77
pos= =rev[ [pos]; ]; } while (pos != k); ); while (ready[ [k]) ]) { k++; ++; if (k== ==1024) ) break; == break; }
} while (k!= !=1024); ); != }
void butterfly( (short i, , short short j, , complex omega) ) complex t; ; { a[ [j] ] = Mul( (a[ [j], ],omega); ); ], t = Add( (a[ [i], ],a[ ]); //a[i] := a[i] + w*a[j] ], [j]); a[ [j] ] = Sub( (a[ [i], ],a[ ]); //[j] := a[i] - w*a[j] ], [j]); a[ [i] ] = t; ; } void FFT( (void) void) short s, ,g, ,groups, ,i, ,j, ,k; ; // s=level, g=group, k=butterfly { short dist; ; //distance of butterfly input points complex omega; ; permute(); (); for( =1; ;s<= <=levels; ;s++) ++) //for each level for(s= <= {groups = 1 << (levels-s); ); //and for each group in level for( =0; ; g<= <=groups-1; ;g++) ++) for(g= <= {dist= = 1 << (s-1); ); //2^(s-1) butterflies in group for( =0; ;k<= <=dist-1; ;k++) ++) for(k= <= //i,j = input points of butterfly { i= =g* *dist* *2+ +k; ; j= =i+ +dist; ; omega = w[ [k*( *(1024 >> s)]; )]; //power of w_n *( //omega^-1 omega. .imaginar = -omega. .imaginar; ; butterfly( (i, ,j, ,omega); ); } } } } //---------------------------------------------------------------------//inicializace časovače (void) void initTimer( void) ; //==> CK/64 { TCCR0 = 0x03; TIMSK |= TOEI0; ; //povolení přerušení od časovače Timer0 } //obsluha přerušení od časovače interrupt [TIMER0_0VF0_vect] ] void Timer( (void) void) { ++vz_Timer; ; ++ }
Strana: 78
9 Přílohy
//obsluha přerušení od konce A/D převodu interrupt [ADC_INT] ] void Adc( (void) void) { a[ [index]. ].real = (short) ); ]. short) (ADCW); a[ [index]. ].imaginar = 0; ; ]. } //funkce vyhledáváni maxima boolean_t vyhledani_maxima( (int f_od, , int f_do, , int max_od, , int max_do) ) { int limit = 1023 - 10; ; char poc1 = 0; ; char poc2 = 0; ; index = f_od; ; if (poc1> >5) ) { if (poc1== ==poc2) ) return (true); true); == else signal = false; false; } else { if (index== ==f_do) ) limit= =limit-10; ; == else { if (a[ [index]. ].real >= limit) ) ]. { poc1++; ++; if (max_od<
9 Přílohy
Strana: 79
//kontrola napětí baterii void napeti( (void) void) { int poc_vz = 0; ; int souc_vz = 0; ; int nap = 0; ; for (poc_vz= =0; ; poc_vz< <10; ;poc_vz++) ++) { ADCSR |= 0x40; ; //začátek nového A/D převodu delay( (5); ); //v 5ms se stihne dokončit A/D převod souc_vz = souc_vz + (int) ); int) (ADCW * 4.88); } nap = souc_vz / 10; ; //průměrná hodnota z 10-ti měření if (nap< <3.2) ) PORTC |= 0x01; ; } //hlavni program main( (void) int void) { short k; ; PORTA = 0x01; ; //port A, pin 0 nastavím jako vstupní DDRA = 0x00; ; PORTC = 0xFF; ; //všechny piny portu C jsou výstupní DDRC = 0xFF; ; initTimer(); (); //když je stisknuto tlačítko na port A, pin 0 if ((PINA & 0x01) ) == 0) ) (( { sei(); (); //povolení všech přerušení index = 0; ; ADMUX = 9; //výběr vstupu pro A/D převod do //vzorkovat 1024 hodnot { if (vz_Timer > 0) ) { ADCSR |= 0x40; ; //začátek nového A/D převodu vz_Timer = 0; ; index++; ++; TCNT0 = 125; ; /* 8e6 / 64 / 125 = 1000, takže dostaneme 1000 přerušení za sekundu, 256 - 131 = 125*/ } ==1023); ); } while (index== == FFTinit(); (); FFT(); (); vyhodnoceni(); (); cli(); (); } else {
}
}
ADMUX = 8; napeti(); ();
//FFT //vyhodnocení //zakázání všech přerušení //když není stisknuto //výběr vstupu pro A/D převod //kontrola napětí baterií