Wednesday 13 December 2017

Glidande medelvärde eller låg pass filtret


Jag m kodar någonting för tillfället där jag mår en massa värden över tiden från en hårdvarukompass Denna kompass är mycket exakt och uppdateras mycket ofta, med det resultat att om det jiggles något slutar jag med det udda värdet som är vildt I motsats till sina grannar vill jag släta ut dessa värderingar. Jag har gjort lite läsning, det verkar som att jag vill ha ett högpassfilter, ett lågpassfilter eller ett glidande medelvärde. behåll en historia av de senaste 5 värdena eller vad som helst och använd medelvärdet av dessa värden nedströms i min kod där jag en gång bara använde det senaste värdet. Det borde jag, släpper ut dem jigglar snyggt, men det slår mig att Det är förmodligen ganska ineffektivt, och det här är förmodligen ett av de kända problemen med riktiga programmerare som det var en väldigt snygg kladdmatrislösning. Jag är dock en av de hemska självlärda programmörerna utan att ha en formell utbildning i någonting jämnt Vagt relaterat till CompSci eller Math Läs lite om att detta kan vara ett högt eller lågt passfilter, men jag kan inte hitta någonting som förklarar vad som är begripligt för ett hack som jag, hur effekten av dessa algoritmer skulle vara på en rad värden, låt Ensam hur matematiken fungerar Svaret som ges här till exempel svarar tekniskt min fråga, men bara i begrepp som är begripliga för dem som förmodligen redan vet hur man löser problemet. Det skulle vara en väldigt härlig och smart person som faktiskt kan förklara typ av problem det här är, och hur lösningarna fungerar, i termer av förståelse för en doktorsexamen. askad den 21 september 10 på 13 01. Om ditt rörliga medelvärde måste vara långt för att uppnå den nödvändiga utjämningen, och du behöver inte verkligen någon särskild form av kärnan, då blir du bättre om du använder ett exponentiellt förfallande rörligt medelvärde. Där väljer du liten för att vara en lämplig konstant, t. ex. om du väljer liten 1- 1 N, kommer den att ha lika mycket medelvärde som ett fönster Av storlek N, Men fördelas annorlunda över äldre punkter. Eftersom det nuvarande värdet av det rörliga genomsnittet bara beror på den tidigare och dina data behöver du inte behålla en kö eller något. Och du kan tänka på det som att göra något som, Jag har en ny punkt, men jag tror verkligen inte på det, så jag kommer att behålla 80 av min gamla uppskattning av mätningen och bara lita på den nya datapunkten 20 Det är ganska mycket detsamma som att säga, ja, jag Bara lita på den här nya punkten 20 och jag använder 4 andra punkter som jag litar på samma belopp, förutom att istället för att uttryckligen ta de 4 andra punkterna antar du att den genomsnittliga tiden du gjorde var förnuftig så att du kan använda din tidigare Work. answered 21 september 10 på 14 27.Hey, jag vet att det här är 5 år sent, men tack för ett fantastiskt svar jobbar jag på ett spel där ljudet ändras baserat på din hastighet, men på grund av att du kör spelet långsamt - as dator, hastigheten skulle fluktuera vildt, vilket var bra för styrning, men super irriterande i ter Ms of sound Detta var en väldigt enkel och billig lösning på någonting som jag trodde skulle vara ett väldigt komplext problem. Adam Mar 16 15 på 20 20. Om du försöker ta bort det enstaka udda värdet är ett lågpassfilter det bästa av Tre alternativ som du har identifierat lågpassfilter tillåter låghastighetsändringar som de som orsakas av att man roterar en kompass för hand, medan man avvisar höghastighetsförändringar, t. ex. de som orsakas av stötar på vägen, till exempel. Ett glidande medelvärde Kommer förmodligen inte vara tillräckligt eftersom effekterna av ett enda blip i dina data kommer att påverka flera efterföljande värden beroende på storleken på ditt glidande medelfönster. Om de odda värdena lätt kan detekteras kan du till och med vara bättre med en glitch - Borttagningsalgoritmen som fullständigt ignorerar dem. Här är ett gickdiagram för att illustrera. Det första diagrammet är ingångssignalen, med en obehaglig glitch. Det andra diagrammet visar effekten av ett 10-provets glidande medelvärde. Det slutliga diagrammet är en kombination av 10- Provmedel och th En enkel glitchdetekteringsalgoritm som visas ovan När glitchen upptäcks används 10-medelvärdet i stället för det faktiska värdet. Ansökat 21 sep 10 kl 13 38. Något förklarat och bonuspoäng för graven Henry Cooke 22 sep 10 vid 0 50.Vi såg sällan så bra svar Muis 4 juni 13 på 9 14.Rörande medelvärdet är ett lågpassfilter nomen okt 21 13 på 19 36.Tryck en löpande streamingmedian istället kert 25 april kl 22 09.Genomsnittet I Kan gå ner med men det slår mig att det är nog ganska ineffektivt. Det är verkligen ingen anledning att ett rörligt medelvärde borde vara ineffektivt. Du behåller antalet datapunkter du vill ha i en viss buffert som en cirkelkö. På varje ny datapunkt popar du Det äldsta värdet och subtrahera det från en summa och tryck på det nyaste och lägg till summan. Således innebär varje ny datapunkt bara en pop-push, ett tillägg och en subtraktion. Ditt rörliga medelvärde är alltid denna skiftande sum dividerad med antalet Värden i din buffert. Det blir lite svårare om du re Mottar data samtidigt från flera trådar, men eftersom dina data kommer från en hårdvarubutik som verkar mycket tveksamt för mig. Och även hemska självlärda programmerare förenar. Det rörliga genomsnittet verkade ineffektivt för mig eftersom du måste lagra en buffert av värden - Bättre att bara göra lite Clever Maths med ditt inmatningsvärde och nuvarande arbetsvärde Jag tror att det är så exponentiellt rörligt medelvärde fungerar En optimering jag har sett för denna typ av rörliga medelvärde innebär att du använder en fast längdskön en pekare till var du befinner dig i den köen och bara sätta in pekaren runt med eller en om Voila Inget dyrt tryck pop Kraft till amatörerna, bror Henry Cooke Sep 22 10 på 0 54. Henry För ett rakt glidande medel behöver du bufferten helt enkelt så att du Vet vad värdet blir poppat när nästa värde blir skjutet Med det sagt är den fasta köen en pekare du beskriver precis vad jag menade med cirkulär kö Det var därför jag sa att det inte är ineffektivt Vad tyckte du att jag Menat och om ditt svar är en matris som ändrar sina värden tillbaka på varje indexerad borttagning som stdvektor i C-brunn, då är jag så sårad jag vill inte ens prata med dig längre Dan Tao 22 september 10 på 1 58. Henry Jag vet inte om AS3, men en Java-programmerare har samlingar som CircularQueue till sitt förfogande. Jag är inte en Java-utvecklare så jag är säker på att det finns bättre exempel där ute, det är precis vad jag hittade från en snabb Google-sökning, vilka redskap precis den funktionalitet vi talar om är jag ganska säker på att majoriteten på mellannivå och lågnivå språk med standardbibliotek har något liknande, t. ex. där kö är Queue T Hur som helst, jag var filosofi själv, så allt är förlåtet Dan Tao 22 september 10 på 12 44. Ett exponentiellt nedbrytande glidande medelvärde kan beräknas för hand med endast trenden om du använder rätt värden. Se om en idé om hur man gör det snabbt med en penna och papper om du letar efter exponentiellt jämnt glidande medelvärde med 10 utjämning Men eftersom du har Ea-dator, vill du förmodligen göra binärväxling i motsats till decimalväxling. På så sätt är allt du behöver en variabel för ditt nuvarande värde och en för genomsnittsvärdet. Nästa genomsnitt kan sedan beräknas från that. answered 21 september 10 på 14 39. Där sa tekniken en intervallgate som fungerar bra med felaktiga prover med låg förekomst, förutsatt att användningen av en av de ovan nämnda filterteknikerna rör sig i genomsnitt, exponentiell, när du har tillräcklig historia en tidskonstant kan du testa den nya inkommande dataprov för rimlighet innan det läggs till i beräkningen. En del kunskap om den maximala rimliga hastighetsgraden av signalen är nödvändig, det råa provet jämförs med det senaste släta värdet och om det absoluta värdet av den skillnaden är Större än det tillåtna intervallet, provet kastas ut eller bytas ut med någon heuristisk, t. ex. en förutsägelse baserad på lutningsskillnad eller trendprognosvärdet från dubbel exponentiell utjämning. Svarad 30 april 16 vid 6 56.Moving Average Filter. MovingAverageFilter implementerar ett lågpass glidande medelfilter. MovingAverageFilter är en del av förbehandlingsmodulerna. Ett exempel på en signal sinusvåg slumpmässig brusfiltrerad med hjälp av ett glidande medelfilter. Den röda signalen är det ursprungliga signalbruset , Den gröna signalen är den filtrerade signalen med hjälp av ett glidande medelfilter med en fönsterstorlek på 5 och den blå signalen är den filtrerade signalen med ett glidande medelfilter med en fönsterstorlek på 20. MovingAverageFilter är bra för att avlägsna en liten mängd Högfrekvent ljud från en N-dimensionell signal. Den största nackdelen med MovingAverageFilter är att för att filtrera bort signifikant högfrekvent brus måste filtets fönsterstorlek vara stor. Problemet med att ha ett stort filterfönster är att detta kommer att inducera En stor latens i någon signal som passerar genom filtret, vilket kanske inte är fördelaktigt för realtidsprogram. Om du upptäcker att du behöver ett stort filterfönster till f Ilter ut högfrekventa ljud och latensen inducerad av denna fönsterstorlek är inte lämplig för din realtidsapplikation, då kanske du vill prova antingen ett dubbelrörande medelfilter eller ett lågpassfilter istället. Exempelkod. GRT MovingAverageFilter Exempel Detta exempel visar hur man skapar och använder GRT MovingAverageFilter PreProcessing Module. MovingAverageFilter implementerar ett lågpass glidande medelfilter. I detta exempel skapar vi en förekomst av en MovingAverageFilter och använder denna för att filtrera vissa dummy data genererade från en sinus Våg slumpmässigt ljud Testsignalen och filtrerade signaler sparas sedan i en fil så att du kan rita resultaten i Matlab, Excel, etc, om det behövs. Detta exempel visar hur du skapar en ny MovingAverageFilter-instans med en viss fönsterstorlek för en 1 Dimensionell signal - Filtrera några data med MovingAverageFilter - Spara MovingAverageFilter-inställningarna till en fil - Ladda MovingAverageFilter-inställningarna från en fil. inkludera GRT h med namnrymden GRT. int huvud int argc const char argv Skapa en ny instans av ett glidande medelfilter med en fönsterstorlek på 5 för en 1-dimensionell signal MovingAverageFilter filter 5 1. Skapa och öppna en fil för att spara data fstreamfilen Fil öppen fstream ut. Generera lite data sinusvågljud och filtrera det dubbelt x 0 const UINT M 1000 Slumpmässigt slumpmässigt för UINT i 0 I M jag dubbelsignal sint x slumpmässigt getRandomNumberUniform - 0 2 0 2.doublefilterValuefilterfilter signal. file signal t filteredValue endl. x TWOPI dubbel M 10. Stäng filfilen nära. Spara filterinställningarna till ett filfilter saveSettingsToFile. Vi kan sedan ladda inställningarna senare om det behövs. Filter loadSettingsFromFile. return EXITSUCCESS. MovingAverageFilter fungerar även med någon N-dimensionell signal. Skapa en ny instans av MovingAverageFilter med en fönsterstorlek på 10 för en tredimensionell signal MovingAverageFilter filter 10 3. Värdet du vill filtrera vektor dubbel data 3 data 0 0 Få värde från sensordata 1 0 Få värde från sensordata 2 0 Få värde från sensorn. Filtrera signalen vektor dubbelt filtreradValue filter filter data. Code Resources. Moving Average Filter MA filter. Lading Det glidande medelfiltret är ett enkelt Low Pass FIR Finite Impulse Response-filter som vanligtvis används för att utjämna en uppsättning samplad datasignal. Det tar M prover av ingångar I taget och ta medlet av de M-proverna och producerar en enda utgångspunkt. Det är en mycket enkel LPF Low Pass Filter-struktur som är användbar för att forskare och ingenjörer filtrerar oönskade bullriga komponenter från de avsedda dataerna. Om filterlängden ökar Parametern M ökar utjämnets jämnhet medan de skarpa övergångarna i data görs alltmer stupade. Detta innebär att detta filter har utmärkt tidsdomänsvar men ett dåligt frekvenssvar. MA-filtret utför tre viktiga funktioner.1 Det tar M-ingång poäng, beräknar medelvärdet av de M-punkterna och producerar en enda utgångspunkt 2. På grund av beräkningsberäkningarna involverar filtret en Bestämd mängd fördröjning 3 Filtret fungerar som ett lågpassfilter med dåligt frekvensdomänsvar och ett bra domänrespons. Matlab-kod. Följande matlab-kod simulerar tidsdomänsvaret för ett M-punkts rörande medelfilter och avbildar även frekvensresponsen För olika filterlängder. Tid Domain Response. Input till MA filter.3-punkts MA filter output. Input till Flyttande medelfilter. Response av 3 poäng Flytta genomsnittlig filter.51-punkts MA filter output.101-punkts MA filter output. Response Av 51-punkts Flyttande medelfilter. Response av 101-punkts Flyttande genomsnittligt filter.501-punkts MA filterutgång. Respons av 501 poäng Flyttande medelfilter. On den första tomten har vi ingången som går in i glidande medelfiltret The Ingången är bullriga och vårt mål är att minska bruset Nästa bild är utgångsvaret för ett 3-punkts rörligt medelfilter Det kan härledas från figuren att 3-punkts rörande medelfilter inte har gjort mycket för att filtrera ut bruset Vi ökar Filtrera kranarna till 51-punkter och vi kan se att bruset i utmatningen har minskat mycket, vilket avbildas i nästa figur. Frequency Response of Moving Average Filters av olika längder. Vi ökar kranarna vidare till 101 och 501 och vi kan Observera att även om bullret är nästan noll, övergår övergångarna drastiskt observera lutningen på vardera sidan av signalen och jämföra dem med den ideala tegelväggsövergången i vårt input. Frequency Response. From frekvensresponset kan det vara Hävdar att avrullningen är väldigt långsam och stoppbandets dämpning är inte bra. Med tanke på detta stoppbanddämpning kan det glidande medelfilteret tydligt inte separera ett frekvensband från en annan. Eftersom vi vet att en bra prestanda i tidsdomänen resulterar i Dålig prestanda i frekvensdomänen och vice versa Kort sagt är det rörliga genomsnittet ett exceptionellt bra utjämningsfilter, åtgärden i tidsdomänen, men ett utomordentligt dåligt lågpassfilter är åtgärden i Fr ekvivalensdomän. External Links. Recommended Books. Primary Sidebar.

No comments:

Post a Comment