Navrhujeme odolný detektor tříštění skla – 1.část
Algoritmus
Na obr. 4 vidíme vývojový diagram pro algoritmus, použitý na vyšší úrovni navrhovaného softwaru. V časové posloupnosti zde detekujeme a vyhodnocujeme tři důležité okamžiky: Aktivitu, náraz a také tříštění. Přibližně každé 2,5 ms dochází k aktivaci mikrofonu, OA1 a nezbytné detekci jakéhokoli akustického projevu. Není – li zaznamenána žádná výraznější aktivita, dochází k opětovnému vypnutí a přechodu MCU do nízkopříkonového režimu. V opačném případě pak software začíná zkoumat přítomnost nárazu – aktivuje se A/D převodník a následně také algoritmus, vyhodnocující získaný signál s ohledem na přítomnost výchozího úderu. Pouze v případě, bude – li taková složka zaznamenána, přistoupí program k současné detekci rozbíjejícího se skla, jinak se vrátí zpět a začne znovu testovat aktivitu. Bude – li detekce rozbití skla úspěšná, zapracovaná indikační LED nebo rovnou výstražná siréna vyhlásí poplach. Poté se GBD opět vrátí k testování aktivity.
Obr. 4: Vývojový diagram pro detekci tříštění skla
Při detekci aktivity jen porovnáváme hodnoty na vstupu A/D převodníku s předem stanovenými prahovými úrovněmi na obou stranách od nuly s cílem odlišit opravdový signál od šumu. Jak již bylo řečeno dříve, v případě nárazu hovoříme o nízkofrekvenční složce s kmitočtem okolo 300 Hz. Protože se však tento spouštěcí jev vyskytuje pouze na začátku, budeme filtrovat jen několik prvních vzorků vstupujícího signálu. Činíme tak prostřednictvím číslicového, dolnopropustného filtru LPF s mezním kmitočtem 350 Hz. Filtrované vzorky akumulujeme, průměrujeme a porovnáváme s předem stanoveným energetickým prahem. Překročí – li energie stanovenou mez, můžeme spustit samotný algoritmus pro detekci nárazu a následné roztříštění. Aby mohl být číslicový filtr LPF menší a stále ještě účinný, volíme vzorkovací kmitočet pro tyto výchozí vzorky mnohem nižší, jen na 4 kHz. Pro tuto část algoritmu tedy nasazujeme AAF s mezním kmitočtem 2 kHz místo obvyklých 20 kHz.
Algoritmus pro detekci rozbíjejícího se skla je však mnohem složitější a neomezuje se pouze na zaznamenání prvotního úderu. Dělíme jej na dvě části – analýzu signálu č. 1 (Signal Analysis 1, dále jen SA1) a analýzu signálu č. 2 (Signal Analysis 2, dále jen SA2). SA1 tvoří první stupeň zpracování. Vyskytuje se v rámci každého vzorku, jakmile je detekován náraz. Během SA1 dochází k výběru 20 kHz AAF, přičemž vzorkovací frekvence A/D převodníku vzroste na 40 kHz. Činnosti, vyhrazené pro SA1, zahrnují průměrování signálu, detekci průchodu nulou a také detekci špiček. Vše se odehraje během periody s délkou okolo 60 ms, obnášející přibližně 2 400 vzorků. Po zdárném ukončení části SA1 startuje navazující SA2 s cílem dokončit analýzu celého signálu. Signály během jejich fáze SA1 zachycuje obr. 5. Na obr. 6 zase vidíme aktuální vývojový diagram.
Obr. 5: Analýza signálu č. 1 a příslušné průběhy
Obr. 6: Analýza signálu č. 1 a související vývojový diagram
Vstupní vzorky, označené jako p(n) nejprve prochází jednoduchým filtrem (klouzavý průměr) pro redukci šumu a získání s(n). Integrace signálu p(n) s cílem stanovit energii signálu (označení integ_total, bude ještě využito v SA2) pak probíhá jen v případě kladných vzorků. Počet špiček a také průchodů nulou zase vyhodnocujeme na základě s(n). Abychom mohli získat vf (HF) složky vstupujícího průběhu, nasazujeme filtr typu horní propusti (High-Pass Filter, HPF) s mezním kmitočtem Fs/4, přičemž se této filtrace účastní každý vzorek p(n). Pouze a jen kladné vzorky filtrovaného výstupu budou zároveň akumulovány do výsledku, který označíme integ_HPF_total a ještě použijeme v SA2. Celý postup SA1 bude prováděn s každým vzorkem, přičemž jej musíme z hlediska provozu v reálném čase zdárně ukončit ještě před příchodem dalšího samplu p(n+1). V praxi to pak znamená, že celkový počet dostupných cyklů CPU bude určen jen jako kmitočet CPU / 40 kHz. Samotná filtrace je přitom zpravidla časově náročná. Abychom tedy dosáhli potřebné účinnosti, použili jsme v případě LPF pro detekci nárazu a také HPF v rámci SA1 Lattice Wave Digital Filters (LWDF) a Hornerovo schéma. Jakmile se naplní 60 ms dlouhé zpracování dat SA1, přistupuje algoritmus k druhému stupni, SA2, který již nevyžaduje činnost v reálném čase. Přehled činností jsme zachytili na obr. 7. To, zda ve skutečnosti došlo k rozbití skla se přitom dozvíme až na konci SA2.
Obr. 7: Analýza signálu č. 2 a související vývojový diagram
Nyní určíme poměr celkové energie signálu vůči energii signálu, který prošel horní propustí, a následně porovnáme s prahovými úrovněmi. Výsledek vykazuje poměr mezi 1,75 a 14, platný pro celou paletu zvuků, vydávaných v souvislosti s rozbíjením skla. V případě špiček zase podobným způsobem kontrolujeme jejich počet, který by měl ležet mezi 160 a 320, resp. četnost průchodů nulou, pohybující se mezi 95 a 300. Budou – li všechny tři zmíněné podmínky splněny, můžeme konečně vyhlásit platné rozbití skla. K tomu, aby se detektor rozbití skla znovu inicializoval a vrátil zpět ke sledování aktivity, stačí selhání pouze jediné z podmínek. V otázce prahových úrovní a souvisejících rozsahů budeme možná muset provést minimální úpravy, odrážející akustické poměry v místnosti, polohu detektoru, ruchy okolí apod.
Realizace s MCU
Platforma MCU MSP430™ od Texas Instruments (TI) má ve své nabídce k dispozici různé druhy obvodů. Tak třeba strukturou MSP430F2274 rozumíme 16bitový mikrokontrolér rodiny 2xx i její nízkopříkonové platformy MSP430. MCU dokáže pracovat na kmitočtech až do 16 MHz, přičemž dále nabízí vnitřní, nízkofrekvenční oscilátor s velmi malou spotřebou (VLO), pracující při pokojové teplotě na 12 kHz. Dále zde najdeme dva 16bitové timery spolu s vestavěným, 10bitovým A/D převodníkem (ADC10), podporujícím rychlost převodu až do 200 kHz. ADC10 přitom můžeme nechat pracovat spolu se zabudovanými operačními zesilovači (OA0 a OA1), určenými ke zpracování analogového signálu. Znamenitost volby pro bateriově napájené systémy umocňuje proudová spotřeba 0,7 μA, vykazovaná během režimu standby (LPM3), resp. 250 μA pro režim aktivní.
Na obr. 8 vidíme blokový diagram celého systému, založeného na MSP430F2274 a jeho integrovaných perifériích. Protože použitý mikrofon má pásmo propustnosti mezi 20 Hz a 20 kHz a obvod MSP430F2274 nabízí jen dva integrované operační zesilovače, můžeme si v takovém případě dovolit vynechat 20 kHz AAF. Třebaže tím zcela jasně porušíme teoretické předpoklady v souvislosti se vzorkováním, na dosahované výsledky to, jak se zdá, nebude mít vliv. Bude – li však k dispozici další operační zesilovač, doplníme naše zapojení přídavným, 20 kHz AAF.
Obr. 8: Blokový diagram struktury GBD, založené na MSP430
MSP430F2274 má k dispozici dva, softwarově konfigurovatelné operační zesilovače, označené jako OA0 a OA1. OA0 přitom využíváme jako invertující stupeň se ziskem rovným sedmi, zajišťující potřebné zesílení signálu z mikrofonu. OA1 zase slouží jako dolnopropustný filtr druhého řádu s aproximací dle Butterwortha, jednotkovým zesílením a architekturou Sallen-Key. Mezní kmitočet filtru, platný při poklesu o 3 dB, činí 2 kHz. Výstupy OA0 a OA1 jsou pak interně propojeny s kanály A1, resp. A13.
Proudový odběr
Proudová spotřeba celého GBD bude záviset na zvolených, nízkopříkonových režimech, zapracovaných během provozu, a také selektivní aktivaci / deaktivaci příslušných periférií. Profily proudového odběru v souvislosti s MSP430 a příslušnými třemi režimy činnosti zachycujeme na obrázcích 9, 10 a 11.
Obr. 9: Proudový odběr při detekci aktivity
Na obr. 9 vidíme znázornění proudové spotřeby během detekování aktivity. Součástka se probouzí v intervalu 2,5 ms aby mohla zkontrolovat činnost, přičemž na 20 μs přechází do aktivního režimu (AM1), během kterého budou hodiny CPU nastaveny na 12 MHz. Pokud díky připojenému mikrofonu nedochází k žádnému vnějšímu podnětu, vrací se sturuktura zpět do módu standby, resp. nízkopříkonového režimu č. 3 (LPM3). Periodického probouzení z režimu standby přitom dosahujeme díky zabudovanému timeru a jeho hodinám, nastaveným při pokojové teplotě na ~12 kHz.
Obr. 10: Proudový odběr při detekci nárazu
Na obr. 10 vidíme proudovou spotřebu v případě, kdy vnější mikrofon detekoval výraznou aktivitu a použitý algoritmus přistoupil k detekci nárazu. Součástka na 18 μs přechází do aktivního režimu AM1 a spouští se analýza úderu. CPU nyní běží na 8 MHz a obvod vstupuje do aktivního režimu AM2. V tomto stavu bude ADC konfigurován tak, aby pracoval se vzorkovacím kmitočtem 4 kHz. O analýze signálu přitom hovoříme v souvislosti s každým samplem po dobu periody 32 ms, což odpovídá 128 vzorkům. Nebude – li platný úder zaznamenán, vrací se součástka na 12 μs zpět do AM1, kde dochází k opětovné inicializaci a konfiguraci s ohledem na zpětný návrat k detekci aktivity.
Obr. 11: Proudový odběr při detekci tříštění skla
Na obr. 11 vidíme proudové poměry v případě potvrzení úderu do skla a následujícího vstupu do režimu, detekujícího samotné tříštění. Během detekce rozbití skla bude takt CPU změněn zpět na 12 MHz a struktura vstoupí do aktivního režimu AM3 s A/D převodníkem, vzorkujícím na 40 kHz. Po dobu 60 ms pak analyzujeme každý vzorek, kterých je zde 2 400. Nebude – li detekováno platné rozbití skla, vracíme se na 4,6 μs do AM1, přičemž dochází k opětovné inicializaci a také konfiguraci pro návrat ke sledování aktivity s periodickým probouzením co 2,5 ms. V případě potvrzeného narušení skla systém na tři vteřiny aktivuje příslušnou LED či sirénu a pak se opět vrací k vyhodnocování aktivity.
V tab. 1 vidíme seznam všech periférií a také taktů, aktivovaných během různých provozních režimů. Zmíněné periférie jsou výraznými podílníky na celkové proudové spotřebě během každé detekční fáze.
Tab. 1: Významné faktory v otázce proudového odběru a časování
Deska detektoru rozbití skla, založená na MSP430, bude napájena dvěma bateriemi typu AAA (800 mAh). Ikdyž není jednoduché předvídat životnost baterie v takové aplikaci, přesto, předpokládejme provoz bez rozbíjení skla s celkovou proudovou spotřebou okolo 80 μA, která umožní nepřetržitý provoz v přibližné délce 416 dnů. Dalšího prodloužení pak můžeme dosáhnout úpravou periody probouzení k detekci aktivity (2,5 ms), jen musíme počítat s tím, že bude narůstat pravděpodobnost ztrát v souvislosti s případnou poplašnou událostí.
Závěr:
Článek se zamýšlel nad jednoduchým a přesto odolným řešením detektoru rozbití skla, přičemž názorně dokumentoval akustické složky signálu tříštícího se skla včetně metod, napomáhajících jejich odhalení. Rovněž byly zmíněny HW i SW požadavky spolu se související implementací na MCU, zaměřenou na velikost proudového odběru takové aplikace, pracující v reálném čase.
Něco o autorovi
Kripasagar Venkat v současné době pracuje v Texas Instruments (Dallas, TX) jako systémový aplikační inženýr. Od roku 2006 působí ve skupině, zaměřené na mikrokontroléry MSP430, přičemž již publikoval několik specifických dokumentů typu White Paper, věnovaných optimalizované číslicové filtraci, měření energie nebo dalším aplikacím. Je držitelem magisterského titulu na UTD (The University of Texas at Dallas) se zaměřením na komunikace a zpracování signálu. Předmět jeho zájmu nyní tvoří měření energie, digitální filtry aj.