close
Vážení uživatelé,
16. 8. 2020 budou služby Blog.cz a Galerie.cz ukončeny.
Děkujeme vám za společně strávené roky!
Zjistit více

Vážení uživatelé,
16. 8. 2020 budou služby Blog.cz a Galerie.cz ukončeny.
Děkujeme vám za společně strávené roky!

Matematika v robotice 12. Numerické filtry

11. srpna 2013 v 5:49 | Petr |  Roboti a Matematika
Pokud jste podrobně studovali odkazy z minula, jistě jste zjisili, že mezi mnou a matematiky je jistý rozpor - klouzavý průměr dvou sousedních hodnot, který jsem označoval za N=2 označují matematici za filtr prvního stupně a označují jej N=1 - doufám že přežijete když zůstaneme u toho že moje čísla jsou o jedničku větší. Mimochodem další důvod nevykládat ve škole, co jste se zde dočetli.

Ačkoliv jsem matematiku kolem toho nikdy nestudoval, tak pokud máte prostý klouzavý průměr N sousedních prvků a máte vzorkovací frekvenci f tak tento filtr funguje jako dolní propust, který propouští frekvence menší než f/2N, pokud používáte exponenciální klouzavý průměr pak dělící frekvence je přibližně f/4N.
Když už jsem měl AVR assembler kolem těchto filtrů vypilovaný k naprosté dokonalosti, žačal jsem si s filtry hrát. nejenom že můžete prvky sčítat, ale taky odčítat a to nejenom sousední ale taky od sebe více vzdálené. K tomu pak potřebujete kruhové buffery. Pak jsem logicky odvodil jak udělat jednoduchou frekvenční propust - a to takto : Pokud hodnotu v bodě A odečteme od hodnoty v bodě B. - pokud je frekvence signálu rovná modré sinusovce, nebo jejím lichým násobkům - "vyšším harmonickým" (fialová sinusovka) - dostaneme signál s dvojnásobnou amplitudou, zatímco signály na jiných frekvencích jsou utlumené, nebo dokonce úplně potlačené (žlutá sinusovka). Kdybyste to potřebovali napsat matematicky takto:
Y (n) = X(n) - X(n-k)
kde k je polovina periody filtrovaného signálu v počtech vzorků. Tedy pokud potřebujeme při vrorkování 10 kHz filtrovat 1 kHz pak je to 10 vzorků na periodu a k=5 jasné ?
Vzhledem k tomu že na pravé straně rovnítka se nám nevyskytuje Y - tudíž výstup tohoto filtru neovlivňje jeho vstup - tudíž jste pochopili, že tento fitr je typu Finite impulse reponse.
Nicméně jeho filtrační účinnost není nic moc. A protože obecně exponenciální průměry / filtry (alias Infinite impulse response) jsou při jednodušší matematice účinnější než Finite impulse - tak jse začal experimentovat i s nimi a došel jsem ke "skoro geniálnímu" filtru jehož vstup vidíte modře a výsup fialově. Zde je vzoreček.
Y (n) = X(n) - X(n-k) - alfa * Y(n-k)
k je opět polovina periody. Všimněte si, že oproti minulé verzi tam přibyl jenom jeden člen navíc. Zajímavý je koeficient alfa - ten určuje míru přednosu "energie" z výstupu na vstup filtru. pokud je roven 1 - filtr se rozkmitá a nikdy nepřestane, pokud je menší než 1 - filtr se podobá analogovým filtrům ve starých rádiích "audionech", které pro zvýšení selektivity, taky malé množství signálu vracely na vstup - tak aby pracovaly "těsně pod bodem rozkmitání".
Že to funguje i pro zašumělé signály - vidíte na obrázku - amplituda šumu je stejná jako amplituda užitečného signálu, a přesto jej je filtr schopen detekovat. Protože u takto zašumělých signálů je výstpu filtru taky znešištěn šumem je za výstupem filtru ještě klasícký exponenciální klouzavý filtr, který modrou křivku pěkně "uhladí". Pokud byste si chtěli s filtry tohoto druhu hrát ZDE je původní excelový soubor, ze kterého jsem grafy generoval.

Jestli máte pocit, že jsme dneska nezabředli do žádné matematické teorie - není se čemu divit - toto vše jsem skoro jako Jára da Cimrman "objevil" sám. Pak jsem to použil pro filtraci signálů u mých pokusů s měřením vzdálenosti pomoci zvuku na slyšitelné frekvenci alias "Zvukarem" A pak ( konečně !!!) jsem zjistil, že matematici tyto filtry znají - jako tak zvané "hřebenové filtry". Případně jako tzv. CIC "cascaded integrator comb" filtry. První vrianta, kterou jsem popsal je tzv "feed forward" varianta, druhá "oscilující" varianta je "feed back" varianta - která má velmi úzká maxima propustnost - není div že dovede ze šumu ''vytěžit" signál i v nepříznivých podmínkách.

Samozřejmě je otázka, jestli bych se neměl stydět, že tohle je moje samo-domo pokusničení a né součást akademického vzdělání - osobně se za to nestydím - protože takhle jsem došel sice dosti daleko, ale nikoliv tak daleko aby se filtr tohoto typu nedal naprogramovat v AVR assembleru.

Jako obvykle dvě poznámky
1. čím více se koeficient "alfa" blíží 1 tím lépe filtr rozliší v šumu vlastní kmitočet, ale tím déle "dokmitává" - což je jenom čílsicová varianta koeficientu Q z klasických filtrů - filtry s vysokým Q dokonale rezonují, jsou vysoce selektivní, ale díky dlouhému "dozvuku" mají jen úzké pásmo propustnosti (dozvuk brání reagovat na rychlé změny signálu). Naopak filtry které mají nízké Q jsou daleko více "širokopásmové" propustí širší pásmo, ale na změny reagují rychleji.
přibližný vzoreček pro vztah Q a našeho koeficientu "alfa" je Q = 1/(1-alfa).
2. neuvádím žádné přiklady prográmků - protože předpokládám, že stejně budete všechno programovat v C a tudíž by můj AVR assembler nebyl pro vás zajímavý. Filtry jsou natolik nenáročné, že rozdíl výkonu mezi C a ASM nestojí většinou za tu práci. Místo progámků si prosdujte zmíněný příklad v XLS.

Zbývá už jenom rada paní Kubáčové novomanželkám - točí se váš mažel za cizími ženami a vás to štve ? Místo tichého zuření doporučuju úplně opačný postup - už z dálky musíte manželovi nahlas oznamovat: "Táto támhle jde fantastická kočka, žejo ?" Uvidíte, že mažel bude minimálně lehce zaražen ....
 

1 člověk ohodnotil tento článek.

Komentáře

1 Bystroushaak Bystroushaak | E-mail | 12. srpna 2013 v 17:22

Dobré, dobré. Měl jsem to ve škole, ale v paměti mi po tom zůstala jen jakási negativně okořeněná mlha s matematickou pachutí.

Což mi připomíná; protože tu neustále vidím mrtvé diskuze, rád bych oficiálně dal na vědomí, že jsem za tyhle články docela rád, i když posledních pár let na elektroniku nemám čas. Je to zajímavé čtení.

2 Vašek Vašek | E-mail | 12. srpna 2013 v 20:55

Velmi, dobré. Taky jsem před časem bádal nad numerickou filtrací svým typickým "zdravý selský rozum" přístupem a lecos zde zmíněného jsem objevil. Jen jsem jako vždy zůstal stát těsně pod vrcholem. Umět podat tyto věci tak aby je pochopil každý jen trochu motivovaný člověk je dar. Myslím, že ty ho Petře máš.

Komentáře jsou uzavřeny.


Aktuální články

Reklama