Filtrace signálu - v reálném čase extrahovat střední hodnotu

Ahoj pánové,

aktuálně řeším poměrně zajímavý problém týkající se digitální filtrace. Potřebuji z naměřeného signálu vyextrahovat střední hodnotu a to v reálném čase a hlavně, co nejrychleji. Samozřejmě jsem zkoušel plovoucí průměr, jeho modifikace apod. Výsledek nic moc. Také na kaskádní bikvad - IIR filtr s nízkou zlomovou f došlo, sice pracoval relativně nejlépe, ale ne úplně dokonale. Vím, že se snažím skloubit dohromady dva požadavky, které si navzájem odporují: přesnost a rychlost, ale taková je prostě situace.
Ještě mě napadl Kalmanův filtr, ale s tímto způsobem filtrace nemám téměř žádné zkušenosti…

Pro ilustraci problému jsem vložím dva obrázky, na prvním se nachází originální signál (zelený) a jeho filtrace pomocí IIR druhého řádu (červený). Žádná sláva. Na druhém už pracuje IIR filtr 4. řádu realizovaný kaskádní formou. Tady už vypadá situace lépe, i když odezva na skok je stále pomalá.

Kdyby měl někdo nějaký tip, jak fofrem vyzískat střední hodnotu, tak bych to velice uvítal.

Děkuji moc.

:arrow_right: administrator: přejmenováno z “Filtrace signálu”


Medián jsi zkoušel? cs.wikipedia.org/wiki/Medi%C3%A1n Sice Kalmanovi konkurovat nemůže, ale na to jak je jednoduchý mívá o dost lepší výsledky než běžný průměr.

Střední hodnota je definovaná jako 1/n integrálu číselné řady 0-(n-1). Pokud tohle uděláš jako plovoucí tak máš FIR s konstantními koeficienty.
Možná bys mohl napsat o co ti primárně jde, jestli zatlouc nějakej rušivej kmitočet, získat trend signálu nebo co já vím…

Pic pánové. Děkuji velice moc za rady, ale medián i FIRko jsem již zkoušel, bohužel s ne zrovna vynikajícím výsledkem.
Cílem mého snažení je vpodstatě zjistit trend naměřeného a zpracovaného signálu - síťového napětí. Celý řetězec zpracovávání sestává z několika bloků, výstupy dostávám dva: absolutní hodnotu amplitudy napětí v reálném čase a její derivaci. No a s tou právě nastává problém, překvapivě :slight_smile:. Její hodnoty kmitají kolem její střední hodnoty, která mě zajímá. Např. se stane, že se napětí mění o 2V/s, ale ze systému leze toto: 2,2 2,1 2 2,4 1,7 1,9 atd. Kdybych si to nachytal do bufferu a zprůměroval, tak pohoda, dostanu cca. ty dva volty. Bohužel potřebuji pracovat v reál. čase a s rychlou odezvou - cca. za 0.1 s musím dostat novou hodnotu po skokové změně derivace.

Dneska jsem se pustil do Kalmana, bohužel jsem ho nestihl implementovat do DSP, zatím jsem ho zkusil odsimulovat v Matlabu a vypadá to, že by se mohl stát řešením mého problému. V pondělí uvidím :slight_smile:.

Mějte se pěkně.

Tak záleží jaké největší skupinové zpoždění si můžeš dovolit , pak jak je signál zarušený a jakou míru šumu akceptuješ po zpracování. Princip neurčitosti při měření jistě znáš…

Tak dej pak vědět jak moc bude Kalman lepší. Také mě asi čeká (na filtraci kompasu), jen se mi do něj zatím nechtělo kvůli složitosti.