Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Dobrý den
Už delší dobu se zabývám prací se senzory a mým hlavním cílem je eliminovat co nejvíce šum z jeho výstupu pro použití na RC modelech včetně spalovacích a elektrických motorů kde jsou otáčky až v řádech desítek tisíc.
Jsem si jist, že je možné za stejných možností programově vytvořit kvalitnější filtraci vibrací, tj. stejný jednočip a gyroskop je využit v komerčních produktech, se znatelně lepšími výsledky.
Mým požadavkem je co nejmenší zpoždění filtračního algoritmu a co nejvyšší účinnost.
Program píši v jazyku C. Filtr který potřebuji je ideální low-pass filtr, tedy nízkopásmová propust.
Tento typ filtru má implementován přímo v sobě samotný senzor, ale nedosahuje ani při nastavené 5Hz hranici odfiltrovat vše - na modelech v trochu horším stavu, kde jsou hůře vyvážené rotující části, apod se to projevuje nejčastěji rychlým kmitáním serv.
Další filtr, který jsem testoval je jednoduchý kalmanův filtr (pouze čtení dat z gyra), který dosahuje o málo lepších výsledků ale za to vnáší nepříjemný faktor, který znemožňuje provádět u PID regulace kvalitně D člen.
Posledním filtrem je low pass filtr využívající FFT algoritmus, jenž je z nich nejpokročilejší. Avšak tento algoritmus mi ze všech zmíněných kromě samotného zpoždění do regulační smyčky zanáší také větší zátěž procesoru - to by ale nebylo tak hrozné. Pro mne je přijatelná mez zpozdění 8ms a při vzorkovací frekvenci 1kHz jsem mohl použít nejvýše 16 vzorkový FFT, abych toto zpoždění dodržel. Po inverzní FFT musím totiž pro co nejlepší přesnost vzít vzorek přímo ze středu výsledného odfiltrovaného pole. Při takto malých vzorcích jsem byl na tom nakonec hůře než s low pass filtrem uvnitř senzoru.
Mým snem by byl filtr, který odfiltruje naprosto vše nad cca 30Hz.
K dispozici mám 32bit jednočip (bez hw podpory floatu), digitální (s 16bit A/D uvnitř) 3 osý gyroskop a 3 osý akcelerometr. Vzorkovací kmitočet gyra je max 8kHz, akcelerometru 1,6kHz
Myslím si, že cesta vede jedině přes ten FFT filtr, jen potřebuji vědět, jak snížit zpoždění, resp. jak správně kalkulovat s řekněmě 4. vzorkem v poli, neboť výstup se musí přepočítat jakousi transformací) a v tomto případě by se jednalo o zpoždění 4ms při vzorkovací frekvenci 1kHz.
Komerční produkt jsem delší dobu pozoroval a zjistil, že odfiltruje absolutně všechny vibrace. Jediný problém nastává při rezonančním kmitočtu, který má tento MEMS senzor kolem 30kHz - střed senzoru začne podle velikosti amplitudy ujíždět nějakým směrem což bez dalších senzorů nelze vyřešit to mi ale nevadí. Využívá pouze gyroskopu. Jinak odfiltruje naprosto vše a se zpožděním menším nežli 8ms !
Znáte lepší/jednodušší filtry? Zatím jsem experimentoval pouze s filtry využívající gyroskop, ale myslím že akcelerometr by zaváděl pouze dodatečnou chybu. Nepotřebuji eliminovat drift gyroskopu, ten je ve velmi přijatelném rozmezí - za dobu letu modelu téměř 0, pouze nežádoucí frekvence a ty jsou cca nad 30Hz.
Děkuji za každou radu, velmi mě toto téma zajímá a uvítám každou zkušenost.
Offline

Zda se mi to docela zajimave, jednu dobu jsem se zabyval podobnymi vecmi v souvislosti se zvukovym signalem, ale nevim, jak jsou delane RC modely, takze mam pro zacatek nejake dotazy (i kdyz nevim, jestli budu vedet, nemusis na ne odpovidat :-) )
- Ten cip by mel prefiltrovat ty data, a pak je poslat dal, nebo je rovnou zpracovava?
- S jakou frekvenci sbira data ten cip?
- Ten gyroskop/akcelerometr posila normalne "spojity" signal, nebo je to jako sinusoida s menici se amplitudou?
- V prispevku zminujes frekvence treba 30Hz, 5Hz, tak jsem se chtel zeptat, jestli je to preklep a ma to byt 30kHz a 5kHz, nebo jsou to opravdu Hz?
Nejake veci me k tomu napadaji, ale to jeste podle toho, jak pripadne odpovis, protoze nevim presne, co je potreba. Mozna budu mit akorat dalsi dotazy :-)
Offline
↑ Lumikodlak:
- Cip by mel prefiltrovat ziskane data ze senzoru a dale je zpracovat, vykonu na to ma urcite dostatek (90DMIPS 32bit)
- Cip sbira data frekvenci max 8kHz z gyra, 1,6kHz z acc - je to dano parametry obou senzoru, vice neumoznuje zrejme jejich interni A/D prevodnik (oba senzory musi mit vlastni, protoze vystup ze senzoru je digitalni - I2C)
- Gyroskop i akcelerometr mi dava rovnou hodnotu (16bit pro kazdou osu celociselne). Neni rotace, pak je vystup na dane ose 0, je rotace, pak je to cislo v zavislosti na jeji rychlosti. Podobne i u akcelerometru.
- Chyba to neni, opravdu potrebuji odfiltrovat vse nad 30Hz.
----
Prikladam graf, kdy jsem pomoci low pass FFT filtru vyfiltroval vse nad cca tech 35Hz.
Zjistil jsem, ze problem netkvi v tech symetrickych vibracich, ale v tech nesymetrickych, ktere pomoci FFT nejdou odfiltrovat. Tyto nesymetricke (vibrace o nahodnych kmitoctech a amplitudach) jsou videt krasne na tom grafu. Vystup je z gyra a to pri zapnutem motoru do otacek, ktere nevytvari zadne razantni vibrace, s modelem se nehybalo. Tyto vysokofrekvencni mechanicke vibrace, ktere projdou do senzoru maji za ucinek posouvani stredu dat (rychle driftovani) v tom pasmu pod 35Hz, ktere jsem odfiltroval. Takze zde se musi pouzit jiny filtr. Vedeli byste jaky? Problem je v tom, ze tyto zmeny jsou dokonce vetsi nez nejaky prumerny pohyb modelu a jde mi velmi o rychlost filtru a o skokovou zmenu.
Takto vypada klasicky pohyb modelu bez motoru a v idealnim pripade by mel vypadat i s nim po aplikovani kvalitniho filtru:
A takhle vypada filtrace pomoci pouheho Kalman filtru s optimalne nastavenymi parametry pro dostatecne rychlou skokovou zmenu (zapnuty motor, bez pohybu modelu):
Offline

Myslim, ze tomu zacinam lepe rozumet, ale asi nebudu vedet, zda se mi to docela slozite. Mam akorat dalsi dotazy :-)
Jaka jsou radove meritka tech grafu?
Jakym zpusobem jsi pouzival tu FFT k odfiltrovani tech frekvenci? Nevim, jakym presne zpusobem se k filtrovani bezne pouziva. Vezme se zakladni frekvenci priblizne 31 Hz (cili 8000/256), transformuje se 128 frekvenci, a vysledek odecte od puvodniho signalu? Kazdopadne pri pouziti FFT k odfiltrovani frekvenci nad 30Hz asi nepujde dosahnout zpozdeni mensiho nez 33ms, coz uz jsi vlastne naznacoval. V pripade, ze se posouva stred dat, nestacilo by pocitat dlouhodoby prumer a ten pak odecitat?
Abych odpovedel na otazku, tak lepsi filtr neznam, jedine nejaky vymyslet, anebo nekde zjistit, jak to dela ten komercni. Mozna, ze kdybych mel primo ty data z vystupu, neco bych vyzkousel, ale asi by to nikam nevedlo, zda se mi, ze tomu rozumis lip.
Offline
↑ Lumikodlak:
- Ten graf je jenom pro oko, nastavil jsem tam rozsah +- 300 pro "obor hodnot", tj. 1 jednotka odpovida 1 pixelu.
- FFT se da pouzivat velmi snadno k vytvoreni kvalitniho low pass, band pass, high pass, .. filtru tak, ze provedes FFT s napr. 64 vzorkama, samozrejme s nejakym oknem (napr. Hamming). Po teto transformaci jednoduse prepises vysledne pole nulama tam, kde chces dane "bin" eliminovat. Podle toho se pak jedna o dany typ filtru. Nasledne prevedes zpet pomoci inverzni FFT a dostanes priblizne original signal bez techto frekvenci. Pro lepsi latenci filtru se da namisto N/2 pozice brat data uz napr z N/8, vse zalezi na pouzitem okne. Ale pak se zhorsuje presnost a meni fazovy posuv, coz lze vhodnou transormaci taky eliminovat.
Ale jak jsem psal, FFT je na tento sum kratky.
- Jak to myslite s tim prumerem? Kdyz mam tento sum co mi posouva stred, tak v tomto sumu se nachazi i chteny signal. Otazkou je, jak mam poznat co je pohyb a co ne? Jedinou moznosti jak tohle resit je pomoci dalsiho senzoru a ten mam take k dispozici. Akcelerometr by nemel kvuli vibracim driftovat, coz pri odfiltrovani pomoci FFT by mohlo vest ke stabilni referenci stredu pro gyro. Zrejme zkusim rozsireny kalman filtr.
Offline

- To meritko jsem mel na mysli na sirku - v casove ose.
- Ok, nenapadlo me, ze by se tim zpusobem dala ta latence zkratit. Napadlo me, ze kdyby se s tema nizsima frekvencema nepocitalo, tak by se tim dala snizit latence, protoze by stacilo mene vzorku, ale vysledek bude asi stejny, jako tim zpusobem, jak pises.
- To jsem nejspis spatne pochopil, nevim jak je ten drift velky oproti normalnimu pohybu, ani jak je ten model zarizeny.
Uz se nebudu dal ptat :-) protoze mysim, ze by to nikam nevedlo a akorat te tim zdruzuju.
Offline
↑ Lumikodlak:
V casove ose trva asi 4 sekundy nez prejde bod ze zacatku do konce.
Vibrace vs pohyb jsou znazorneny na grafech 1. a 2. vyse.
Skoro se to zda, ze je to nemozne, opak je pravdou.
Offline
↑ pavelk:
Ahoj,
rovněž budu mít několik otázek, abych zjistil bližší informace o problému:
Jaký signál vystupuje ze senzoru - zvuk? Snímáš signál ve třech osách (x,y,z) nebo jen v jednom místě?
K čemu je dobrý gyroskop a akcelerometr? Aby dávaly "referenční" vzorek pohybu, který daná soustava (motor, apod.) provádí? Jak potom zapojíš výstupy z nich do daného filtru? Odečteš jejich výstup od zkoumaného signálu? Nebo používáš gyroskop/akcelerátor z jiného důvodu?
Co znamená poznámka, že "střed senzoru začne ujíždět" (používáš to tam, kde popisuješ komerční filtr)?
Co nazýváš "letem modelu" (v posledním odstavci)?
Děkuji za informace
Offline
↑ check_drummer:
- Signal z gyroskopu je v podobe dat, resp. hodnot v rozsahu 2^16 urovni, kde 0 je stred (senzor se neotaci kolem dane osy, tj. uhlove zrychleni je 0). Jak funguje gyroskop a akcelerometr asi popisovat nema smysl, o tom je spoustu materialu na webu. Signal snimam ve vsech 6 osach neustale - X, Y, Z akcelerometru a X, Y, Z gyra.
- Gyroskop ma velikou vyhodu v tom, ze je velmi presny na velmi male zmeny a neni temer zatizen jinymi silami, jako akcelerometr. Takze gyroskop mi rychle urci napr. uhel natoceni modelu. Kdezto akcelerometr mi urci jak je natoceny ten model vuci zemi, protoze snima mimo jine gravitacni zrychleni a prozmenu od gyra neni zatizeny driftem takze se muzou navzajem doplnovat v tom co kazdy dela nejlepe.
Gyro pouzivam k tomu, abych na zaklade nej urcil jak se pohybuje model za letu, data ze senzoru mi jdou do regulacni smycky, kde je dale zpracuji a poslou se na vystup servum na modelu. V konecnem vysledku to umoznuje ridit model s urcitymi vyhodami.
- Ujizdeni stredu, resp. drift je jev, kdy gyro zacne posilat hodnoty, jakoby senzor konal nejakou rotaci, i kdyz realna uhlova rychlost je 0. Takze namisto nuly zde mam napr 100 a v pripade pohybu by pak byl stejne rychly pohyb na jednu stranu 90, na druhou zase 110 namisto -10 a 10.
- Let modelu znamena, ze letadlo/vrtulnik leti spolu se senzory a elektronikou uvnitr, ta ma za cil jeho smer letu korigovat.
Offline
Napadla me takova uvaha - to co vadi modelu nejsou vysokofrekvencni vibrace, ale ty nizkofrekvencni.
Realne tam nizke frekvence nejsou, to znamena, ze jejich vinikem jsou ty vysokofrekvencni.
Da se vysledovat z toho zavibrovaneho signalu, ze podle otacek motoru se meni take ta nizkofrekvencni oscilace (je tam pekna sinusovka).
Ta frekvence zacina uz nad 0Hz a konci priblizne na tech 10Hz. V urcitych otackach, kdyz filtruji malo, jde videt jak serva na modelu "krouzi" presne do kola. Protoze lze zjistit jake vysokofrekvencni vibrace jsou realne na modelu, dalo by se je po jakemsi prevodu do nizkeho pasma "odecitat". Vypada to, ze jde jen o jeden ci dva nizke kmitocty (to mi posouva ten stred a kolem nej je ten sum).
Nevim zda se jedna o harmonicke rezonancniho kmitoctu senzoru, jenz se pohybuje kolem 30kHz ale musi se prijit na to, ktere to jsou a na zaklade toho pak filtrovat.
Co si o tom myslite?
Offline
↑ pavelk:
Ahoj, děkuji za vysvětlení. Abych si to tedy ujasnil:
Když se bavíme o senzoru, tak máš vždy na mysli senzor buď na gyroskopu nebo na akcelerometru. A nebo ještě nějaký jiný?
Tvým úkolem tedy je z těchto senzorů odfiltrovat vibrace (motoru apod.), abys získal co nejpřesnější signál říkající jakým směrem (a s jakým zrychlením) se model pohybuje?
Co vše přispívá k tvorbě "šumu"? Je to zejména motor nebo i něco jiného? Máš rovněž nějaký senzor, kterým bys snímal např. počet otáček motoru a na základě toho mohl upravit dynamicky parametry filtru?
Díky za informaci.
Offline
↑ check_drummer:
- Mam k dispozici jen gyro a akcelerometr, takze se bavime jen o nich. Uvedene grafy jsou pouze z jedne osy gyra ale dalsi vypadaji podobne, takze jsem je pro prehlednost nedaval.
- Ano presne tak to je, hlavne signal z gyroskopu, ten je pro me nejpodstatnejsi.
- K tvorbe sumu prispivaji vsechny rotujici casti na modelu. Jedna se o nevyvazene rotujici dily (rozdilna vaha rotorovych listu - vrtule), nevyvazeny motor, remeny ci ozubene kola. Hlavne to co je tedy nevyvazene, ale neni ve schopnostech pilota to vyvazit vetsinou lepe. Takze si s tim musi poradit senzor a filtrace.
Senzor otacek bohuzel nemam, ale pomoci FFT se daji frekvence zjistit.
Offline
Poridil jsem nove grafy, omlouvam se za ten prvni, ten graf byl z uplne nefiltrovaneho vystupu gyra.
Ted mam grafy z ruznych otacek motoru a FFT filtrem s cutoff 16Hz. Takze jde videt jak hezky driftuje gyro a presne tohoto driftu se musim zbavit.
http://forum.matweb.cz/upload3/img/2012 … 253A50.png
http://forum.matweb.cz/upload3/img/2012 … 253A14.png
http://forum.matweb.cz/upload3/img/2012 … 253A30.png
http://forum.matweb.cz/upload3/img/2012 … 253A41.png
http://forum.matweb.cz/upload3/img/2012 … 253A58.png
Offline
↑ pavelk:
Čemu říkáš drift? Tomu kolísání hodnoty? Přiložené grafy jsou grafy, kdy je model v klidu a tedy gyroskop by měl vracet konstantní "čáru", ale díky šumu se "vlní" a úkolem je tyto vlny odstranit? Jak vypadá Fourierův obraz (po FFT) těchto křivek? Docela by mě zajímalo, zda je v něm nějaká dominantní frekvence nebo zda jsou všechny frekvence "vyrovnané".
Díky
Offline
↑ check_drummer:
Ano to je drift. Model je celou dobu v klidu, bez pohybu. Mel by vracet caru. Jak vypada obraz jeste nevim, ale melo by smysl provadet takovou FFT v praxi? Vyfiltrovat takhle nizkou frekvenci by zabralo hodne casu a to je problem. Jedine, ze by existoval jednoduchy notch filter.
V nejhorsim koupim senzor za $150 a bude vystarano.
Existuje filtr, kterym by se dalo filtrovat vsechny periodicke signaly a neperiodicke propustit?
Offline
↑ pavelk:
K odfiltrování periodických signálů mě napadá ve FFT vynulovat ty frekvence, které mají dostatečně velkou amplitudu - tam je podezření na periodický signál. Ale je to jen nápad.
Otázkaje, zda máš dostatek informací, aby svůj úkol mohl provst - zda je vůbec možné odlišit situaci, kdy jde jen o šum a kdy jde opravdu o pohyb modelu... Možná by to šlo s pomocí akcelerometru - podle hodnot akcelerometru upravit hodnoty které vrací gyroskop...
Offline
Udelal jsem dalsi grafy, tentokrat z akcelerometru ze stejne osy.




Grafy zacinaji nulovymi otackami a konci ve vysokych. Jde videt, ze akcelerometr nijak nedriftuje, nulu ma porad ve stredu ale za to reaguje jako vibrometr. Jde videt ze se meni frekvence i amplituda a taky jde videt ve vyssich otackach pulzovani. Nejlepsi by asi bylo, kdyby se vibrace akcelerometru jednoduse "odecitaly" od signalu gyra nebo naopak by akcelerometr udaval stred pro gyro za predpokladu, ze by se vyfiltrovaly i takhle nizke frekvence coz by prineslo velike spozdeni (coz si nemohu dovolit).
Dalsi vec, ktera me napadla je, delat FFT pri velmi nizkych vzorkovacich frekvencich a znacit si, ktere frekvence se opakuji. Pokud se nektera opakuje, tak ji dopredu odfiltrovat - primo odecist inverzni FFT od puvodniho signalu tak, aby se zacatky periody shodovaly. Coz by znamenalo jak nulove spozdeni, tak uspesne vyfiltrovani. V nejhorsim pripade by sly poznat jen pri zmenach otacek nepatrne zakmity.
Offline
↑ pavelk:
A lze nějak z naměřených hodnot zjistit pro daný pevný počet otáček motoru, zda mají vibrace gyroskopu a akcelerometru nějaký vztah? Např. zda mají kladné "peaky" (nejde zde o politiku :-)) ve stejných bodech nebo třeba tam kde má jeden peak, tak druhý prochází nulou, apod.? Nebo obecně - zda kmitají oba stejnou frekvencí?
Offline
↑ check_drummer:
Tak jsem zjistil, ze hlavnim zdrojem vibraci bylo tlacitko. Bylo priblizne 2cm od senzoru a po tom co jsem ho pripevnil, tak se vibrace razantne snizily.
Pokud to nebude horsi, tak to snad je vyreseno :)
Dekuji mnohokrat za snahu. Nakonec to bylo jednodussi nez se zdalo.
Offline
Děkuji za zajímavé téma - i výsledek je pro praxi velmi poučný. :-)
Offline