Saturday 16 September 2017

Exponentiell Glidande Medelvärde Filter Design


Exponentiellt filter Denna sida beskriver exponentiell filtrering, det enklaste och mest populära filtret. Detta är en del av avsnittet Filtrering som ingår i En guide till feldetektering och diagnos. Översikt, tidskonstant och analog ekvivalent Det enklaste filtret är exponentiellt filter. Den har bara en inställningsparameter (annan än provintervallet). Det kräver att endast en variabel lagras - den tidigare utgången. Det är ett IIR (autoregressivt) filter - effekterna av en ingångsändring sönderfaller exponentiellt tills gränserna för bildskärmar eller datorräkningar döljer den. I olika discipliner benämns användningen av detta filter även som 8220exponentiell utjämning8221. I vissa discipliner, såsom investeringsanalys, kallas exponentiellt filter en 8220Exponentivt vägd rörlig Average8221 (EWMA), eller bara 8220Exponential Moving Average8221 (EMA). Detta missbrukar den traditionella ARMA 8220moving average8221-terminologin för tidsserieanalys, eftersom det inte finns någon inmatningshistorik som används - bara den aktuella ingången. Det är den diskreta tidsekvivalenten för 8220 första ordningens lag8221 som vanligtvis används vid analog modellering av kontinuerliga styrsystem. I elektriska kretsar är ett RC-filter (filter med ett motstånd och en kondensator) en första ordningens fördröjning. När man betonar analogi med analoga kretsar, är parametern för enstämmande inställning 8220time constant8221, vanligtvis skrivet som små bokstäver grekiska bokstaven Tau (). Faktum är att värdena vid de enskilda provtiderna exakt matchar den ekvivalenta kontinuerliga tidsfördröjningen med samma tidskonstant. Förhållandet mellan det digitala genomförandet och tidskonstanten visas i ekvationerna nedan. Exponentiella filterekvationer och initialisering Det exponentiella filtret är en viktad kombination av föregående uppskattning (utgång) med den nyaste inmatningsdata, med summan av vikterna lika med 1 så att utmatningen matchar ingången vid steady state. Följande filternotering har redan införts: y (k) ay (k-1) (1-a) x (k) där x (k) är den råa ingången vid tidsteget ky (k) är den filtrerade utgången vid tidsträcka ka är en konstant mellan 0 och 1, normalt mellan 0,8 och 0,99. (a-1) eller a kallas ibland 8220smonteringskonstanten8221. För system med ett bestämt tidssteg T mellan prover beräknas konstanten 8220a8221 och lagras endast för bekvämlighet när applikationsutvecklaren anger ett nytt värde av önskad tidskonstant. För system med dataprovtagning vid oregelbundna intervall måste exponentiell funktion ovan användas med varje tidsteg, där T är tiden sedan föregående prov. Filterutmatningen initieras vanligtvis för att matcha den första ingången. När tidskonstanten närmar sig 0, a går till noll, så det finns ingen filtrering 8211 utmatningen är lika med den nya ingången. Eftersom tidskonstanten blir väldigt stor, ett tillvägagångssätt 1, så att ny ingång nästan ignoreras 8211 mycket tung filtrering. Filterekvationen ovan kan omordnas i följande prediktorkorrigeringsekvivalent: Denna blankett gör det mer uppenbart att variabelestimationen (filterets utmatning) förutses som oförändrad från föregående uppskattning y (k-1) plus en korrigeringsperiod baserad på på den oväntade 8220innovationen8221 - skillnaden mellan den nya ingången x (k) och förutsägelsen y (k-1). Denna form är också resultatet av att det exponentiella filtret härledas som ett enkelt speciellt fall av ett Kalman-filter. vilken är den optimala lösningen på ett uppskattningsproblem med en viss uppsättning antaganden. Stegsvar Ett sätt att visualisera driften av det exponentiella filtret är att plotta sitt svar över tiden till en stegingång. Det vill säga, med utgångspunkt från filteringången och utgången vid 0, ändras ingångsvärdet plötsligt till 1. De resulterande värdena anges nedan: I ovanstående diagram delas tiden upp med filtertidskonstanten tau så att du lättare kan förutsäga resultaten för vilken tid som helst, för vilket värde som helst av filtertidskonstanten. Efter en tid som är lika med tidskonstanten stiger filterutgången till 63,21 av sitt slutvärde. Efter en tid som motsvarar 2 tidskonstanter stiger värdet till 86,47 av sitt slutvärde. Utgångarna efter tider lika med 3,4 och 5 tidskonstanter är 95,02, 98,17 och 99,33 av slutvärdet. Eftersom filtret är linjärt betyder det att dessa procentandelar kan användas för någon storlek av stegändringen, inte bara för värdet av 1 som används här. Trots att stegsvaret i teorin tar en oändlig tid, från en praktisk synpunkt, tänk på det exponentiella filtret som 98 till 99 8220done8221 svarar efter en tid som motsvarar 4 till 5 filtertidskonstanter. Variationer i det exponentiella filtret Det finns en variation av exponentiellt filter som kallas ett 8220-icke-linjärt exponentiellt filter8221 Weber, 1980. Avsett att tungt filtrera ljud inom en viss amplitude 8220typical8221, men svara sedan snabbare på större förändringar. Copyright 2010 - 2013, Greg Stanley Dela den här sidan: Dokumentation I det här exemplet visas hur man använder glidande medelfilter och resampling för att isolera effekten av periodiska komponenter på tiden av timmen vid timme temperaturavläsningar, samt ta bort oönskat linjeljud från en öppen - spänningsmätning. Exemplet visar också hur man släpper nivån på en klocksignal samtidigt som du håller kanterna genom att använda ett medianfilter. Exemplet visar också hur man använder ett Hampel-filter för att ta bort stora utjämnare. Motivationsutjämning är hur vi upptäcker viktiga mönster i våra data medan vi lämnar ut saker som är oväsentliga (dvs brus). Vi använder filtrering för att utföra denna utjämning. Målet med utjämning är att producera långsamma värdeförändringar så att det blir lättare att se trender i våra data. Ibland kan du, när du granskar inmatningsdata, glömma data för att se en trend i signalen. I vårt exempel har vi en uppsättning temperaturavläsningar i Celsius varje timme på Logans flygplats för hela januari månad 2011. Observera att vi visuellt kan se vilken effekt dagtid har på temperaturavläsningarna. Om du bara är intresserad av den dagliga temperaturvariationen under månaden, bidrar de timliga fluktuationerna bara med ljud, vilket kan göra det svårt att skilja de dagliga variationerna. För att ta bort effekten av tiden på dagen skulle vi nu vilja släta ut våra data genom att använda ett glidande medelfilter. Ett rörligt medelfilter I sin enklaste form tar ett glidande medelfilter med längd N genomsnittet av varje N på varandra följande prover av vågformen. För att tillämpa ett glidande medelfilter till varje datapunkt konstruerar vi våra koefficienter i vårt filter så att varje punkt är lika viktad och bidrar 124 till det totala genomsnittet. Detta ger oss medeltemperaturen över varje 24-timmarsperiod. Filterfördröjning Observera att den filtrerade utsignalen är försenad med cirka tolv timmar. Detta beror på att vårt glidande medelfilter har en fördröjning. Varje symmetriskt filter med längd N kommer att ha en fördröjning av (N-1) 2 prover. Vi kan redovisa denna försening manuellt. Extraherande medelskillnader Alternativt kan vi också använda det glidande medelfiltret för att få en bättre uppskattning av hur tiden på dagen påverkar den totala temperaturen. För att göra detta, dras först av de jämnda data från timme temperaturmätningarna. Därefter segmentera de olika uppgifterna i dagar och ta medeltalet över alla 31 dagar i månaden. Utdragning av toppkuvert Ibland vill vi också ha en jämn varierande uppskattning av hur höga och låga värdena på vår temperatursignal ändras dagligen. För att göra detta kan vi använda kuvertfunktionen för att ansluta extrema höjder och lågor som detekteras över en delmängd av 24-timmarsperioden. I det här exemplet ser vi till att det finns minst 16 timmar mellan varje extremt hög och extrem låg. Vi kan också få en känsla av hur höga och låga trender är genom att ta medelvärdet mellan de två ytterligheterna. Viktiga rörliga genomsnittsfiltre Andra typer av rörliga genomsnittliga filter viktar inte varje prov lika. Ett annat vanligt filter följer binomial expansion av (12,12) n Denna typ av filter approximerar en normal kurva för stora värden på n. Det är användbart för att filtrera ut högfrekventa ljud för små n. För att hitta koefficienterna för binomialfiltret, konvolvera 12 12 med sig själv och sedan iterativt konvolvera utgången med 12 12 ett föreskrivet antal gånger. I det här exemplet använder du fem totala iterationer. Ett annat filter som liknar det gaussiska expansionsfiltret är exponentiell glidande medelfilter. Denna typ av viktat glidande medelfilter är lätt att konstruera och kräver inte en stor fönsterstorlek. Du justerar ett exponentiellt viktat glidande medelfilter med en alfaparameter mellan noll och en. Ett högre värde på alfa kommer att ha mindre utjämning. Zooma in på avläsningarna för en dag. Välj ditt landDet är möjligt att implementera ett glidande medelvärde i C utan att det behövs ett fönster i prover. Jag 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 inte behöva 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 behöver alltid komma ihåg provet xn-N för att kunna 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 prov 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 glidande 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, IncFrequency Response av det löpande medelfiltret Frekvensresponsen hos ett LTI-system är DTFS för impulsresponset. Impulsresponsen av ett L-provrörande medelvärde är Eftersom glidande medelfilteret är FIR, frekvensresponsen minskar till den ändliga summan. Vi kan använda den mycket användbara identiteten för att skriva frekvensresponsen som där vi har låtit en e 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 varierar 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, har vi inte gjort det bra. Några av de högre frekvenserna dämpas endast med en faktor på cirka 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, Berkeley

No comments:

Post a Comment