Wednesday 4 October 2017

Glidande Medelvärde Filter Nedir


Är det möjligt att implementera ett glidande medelvärde i C utan att det behövs ett fönstersamtal Ive har funnit att jag kan optimera lite genom att välja en fönsterstorlek som är en kraft av två för att tillåta bitskiftning istället för att dela men behöver inte en buffert skulle vara trevligt. Finns det ett sätt att uttrycka ett nytt glidande medelresultat endast som en funktion av det gamla resultatet och det nya provet Definiera ett exempel glidande medelvärde, över ett fönster med 4 prov att vara: Lägg till nytt prov e: Ett glidande medel kan implementeras rekursivt , men för en exakt beräkning av glidande medelvärde måste du komma ihåg det äldsta inmatningsprovet i summan (dvs. a i ditt exempel). För ett längd N rörligt medelvärde beräknar du: var yn är utsignalen och xn är ingångssignalen. Eq. (1) kan skrivas rekursivt som Så du måste alltid komma ihåg provet xn-N för att beräkna (2). Som påpekat av Conrad Turner kan du använda ett (oändligt långt) exponentiellt fönster istället, vilket gör det möjligt att beräkna utmatningen endast från tidigare utmatning och aktuell ingång: men det här är inte ett vanligt (obetydligt) glidande medelvärde men exponentiellt viktade glidande medelvärde, där prov i det förflutna får en mindre vikt, men (åtminstone teoretiskt) glömmer du aldrig någonting (vikterna blir bara mindre och mindre för prover långt ifrån). Jag implementerade ett glidande medelvärde utan individuellt objektminne för ett GPS-spårningsprogram som jag skrev. Jag börjar med 1 prov och dela med 1 för att få nuvarande avg. Sedan lägger jag till ett exempel och delar upp med 2 till den nuvarande avg. Detta fortsätter tills jag når längden på medeltalet. Varje gång efteråt lägger jag till i det nya provet, får medelvärdet och tar bort det genomsnittet från summan. Jag är inte matematiker men det verkade som ett bra sätt att göra det. Jag tänkte att det skulle vända på magen på en riktig matte kille men det visar sig att det är ett av de accepterade sätten att göra det. Och det fungerar bra. Kom bara ihåg att ju högre längden desto långsammare följer du vad du vill följa. Det kan inte ha betydelse för det mesta, men när du följer satelliter, kan du vara långsiktig, om det är långt ifrån det faktiska läget och det kommer att se dåligt ut. Du kan ha ett mellanrum mellan mitten och de efterföljande prickarna. Jag valde en längd på 15 uppdaterad 6 gånger per minut för att få tillräcklig utjämning och inte komma för långt från den faktiska lätta positionen med de släta spårpunkterna. svarat 16 november 16 kl 23:03 initialisera totalt 0, count0 (varje gång vi ser ett nytt värde) Då en inmatning (scanf), en lägg till totalnevValue, en ökning (räkning), en delningsgenomsnitt (totalantal) Detta skulle vara ett glidande medelvärde över alla ingångar För att beräkna medelvärdet över endast de senaste 4 ingångarna, skulle det behöva 4 ingångsvariabler, kanske kopiering av varje ingång till en äldre ingångsvariabel och sedan beräkning av det nya glidande medlet. Som summan av de fyra ingångsvariablerna dividerad med 4 (höger skift 2 skulle vara bra om alla ingångar var positiva för att få den genomsnittliga beräkningen besvarad 3 feb 15 kl 4:06 som faktiskt kommer att beräkna det totala genomsnittet och INTE det rörliga genomsnittet. När räkningen blir större blir effekten av ett nytt ingångsprov försvinnande liten ndash Hilmar Feb 3 15 kl 13:53 Ditt svar 2017 Stack Exchange, IncThe Moving Average som ett filter Det rörliga genomsnittet används ofta för att utjämna data i närvaro av brus. Det enkla glidande medlet är inte alltid känt som Finite Impuls Response (FIR) filter som det är, medan det faktiskt är ett av de vanligaste filtren i signalbehandling. Att behandla det som ett filter gör det möjligt att jämföra det med, till exempel, fönsterfönster med synkronisering (se artiklarna om lågpass, högpass och bandpass och bandavvisningsfilter för exempel på dem). Den stora skillnaden med dessa filter är att det rörliga medlet är lämpligt för signaler för vilka den användbara informationen finns i tidsdomänen. varav utjämning av mätningar med medelvärde är ett utmärkt exempel. Windowed-sinc-filter är å andra sidan starka utövande inom frekvensområdet. med utjämning i ljudbehandling som ett typiskt exempel. Det finns en mer detaljerad jämförelse av båda typerna av filter i Time Domain vs Frekvensdomänprestanda för filter. Om du har data där både tid och frekvensdomän är viktiga, kanske du vill titta på variationer på rörlig genomsnittsnivå. Vilket presenterar ett antal viktade versioner av det glidande medlet som är bättre på det. Det rörliga genomsnittet av längd (N) kan definieras som skrivet som det typiskt implementeras, med det aktuella utgångsprovet som medelvärdet av de tidigare (N) - proverna. Sett som ett filter utför det rörliga medlet en konvolvering av ingångssekvensen (xn) med en rektangulär puls längd (N) och höjd (1N) (för att göra pulsens område och därmed förstärkningen av filtret , ett ). I praktiken är det bäst att ta (N) udda. Även om ett glidande medelvärde också kan beräknas med ett jämnt antal prover, har fördelen med att fördröjningen av filtret är ett heltal antal prover, eftersom fördröjningen av ett filter med (N) proverna är exakt ((N-1) 2). Det rörliga genomsnittet kan sedan justeras exakt med de ursprungliga uppgifterna genom att flytta det med ett heltal antal prover. Tidsdomän Eftersom det rörliga medlet är en konvolvering med en rektangulär puls, är dess frekvensrespons en sinc-funktion. Detta gör det något som det dubbla av windowed-sinc-filtret, eftersom det är en konvolvering med en sinc-puls som resulterar i ett rektangulärt frekvenssvar. Det är detta sinc-frekvensrespons som gör det rörliga genomsnittet en dålig performer i frekvensdomänen. Det fungerar dock mycket bra i tidsdomänen. Därför är det perfekt att släta data för att ta bort brus samtidigt som du fortfarande håller ett snabbt stegsvar (Figur 1). För det typiska Additiv White Gaussian Noise (AWGN) som ofta antas, har medelvärden (N) prover effekten av att öka SNR med en faktor (sqrt N). Eftersom bruset för de enskilda proverna är okorrelerat finns det ingen anledning att behandla varje prov på olika sätt. Därför kommer det rörliga medelvärdet, vilket ger varje prov samma vikt, att bli av med den maximala mängden brus för en given stegresponsskärpa. Genomförande Eftersom det är ett FIR-filter kan det glidande medlet implementeras genom konvolvering. Det kommer då att ha samma effektivitet (eller brist på det) som alla andra FIR-filter. Det kan emellertid också genomföras rekursivt, på ett mycket effektivt sätt. Det följer direkt av definitionen att denna formel är resultatet av uttrycken för (yn) och (yn1), dvs där vi märker att förändringen mellan (yn1) och (yn) är att en extra term (xn1N) visas vid Slutet, medan termen (xn-N1N) tas bort från början. I praktiska tillämpningar är det ofta möjligt att lämna uppdelningen av (N) för varje term genom att kompensera för den resulterande vinsten av (N) på en annan plats. Detta rekursiva genomförande kommer att bli mycket snabbare än konvolvering. Varje nytt värde av (y) kan beräknas med endast två tillägg, i stället för (N) tillägg som skulle vara nödvändiga för en enkel implementering av definitionen. En sak att se efter med en rekursiv implementering är att avrundningsfel kommer att ackumuleras. Det kan vara ett problem för din ansökan, men det innebär också att denna rekursiva implementering faktiskt kommer att fungera bättre med ett heltal implementering än med flytande punktnummer. Detta är ganska ovanligt, eftersom en flytande punktimplementering vanligtvis är enklare. Slutsatsen av allt detta måste vara att du aldrig ska underskatta nyttan av det enkla glidande medelfiltret i signalbehandlingsapplikationer. Filtrera designverktyg Denna artikel kompletteras med ett filterdesignverktyg. Experimentera med olika värden för (N) och visualisera de resulterande filteren. Prova det nuFrekvensrespons för det löpande medelfiltret Frekvensresponsen hos ett LTI-system är DTFS för impulsresponset. Impulsresponsen av ett L-provrörande medelvärde är Eftersom det glidande medelfiltret är FIR, minskar frekvensresponsen till den ändliga summa Vi kan använda den mycket användbara identiteten för att skriva frekvensresponsen som där vi har låt oss minus jomega. N 0 och M L minus 1. Vi kan vara intresserade av storleken på denna funktion för att bestämma vilka frekvenser som går igenom filtret obetydligt och vilka dämpas. Nedan är en plot av storleken på denna funktion för L 4 (röd), 8 (grön) och 16 (blå). Den horisontella axeln sträcker sig från noll till pi radianer per prov. Observera att frekvensresponsen i alla tre fall har en lowpass-egenskap. En konstant komponent (nollfrekvens) i ingången passerar genom filtret obetydligt. Vissa högre frekvenser, såsom pi 2, elimineras helt av filtret. Men om avsikt var att designa ett lågpassfilter, så har vi inte gjort det bra. Några av de högre frekvenserna dämpas endast med en faktor om 110 (för 16-punkts glidande medelvärdet) eller 13 (för det fyrapunkts glidande medlet). Vi kan göra mycket bättre än det. Ovanstående plot skapades av följande Matlab-kod: omega 0: pi400: pi H4 (14) (1-exp (-iomega4)) (1-exp (-iomega)) H8 (18) iomega8)) (1-exp (-iomega)) H16 (116) (1-exp (-iomega16)) (1-exp (-iomega)) plot (omega, abs (H4) H16)) axel (0, pi, 0, 1) Copyright kopia 2000- - University of California, BerkeleyMoving Genomsnitt i R Såvitt jag vet har R inte en inbyggd funktion för att beräkna glidande medelvärden. Med hjälp av filterfunktionen kan vi dock skriva en kort funktion för glidmedel: Vi kan sedan använda funktionen på alla data: mav (data) eller mav (data, 11) om vi vill ange ett annat antal datapunkter Än standard 5-plottningen fungerar som förväntat: plot (mav (data)). Förutom antalet datapunkter över vilka i genomsnitt kan vi också ändra sidoperspektivet för filterfunktionerna: sides2 använder båda sidor, sides1 använder endast tidigare värden. Dela detta: Postnavigering Kommentarnavigering Kommentarnavigering

No comments:

Post a Comment