Monday, 18 December 2017

Glidande medelvärde filter kod


Frekvensreaktion för löpande medelfilter Frekvensresponsen hos ett LTI-system är DTFS för impulsresponsen. Impulssvaret för ett L-provrörande medelvärde är Eftersom det glidande medelfiltret är FIR, minskar frekvensresponsen till den ändliga summen 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 fallen 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å ca 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) Upphovsrätt kopia 2000- - University of California, BerkeleyMoving Average Filter (MA filter) Laddar. Det rörliga genomsnittliga filtret är ett enkelt filter med lågt pass FIR (Finite Impulse Response) som vanligtvis används för att utjämna en rad samplade datasignaler. Det tar M prover av ingång i taget och tar medeltalet av de M-proverna och producerar en enda utgångspunkt. Det är en mycket enkel LPF (Low Pass Filter) struktur som kommer till nytta för forskare och ingenjörer att filtrera oönskade bullriga komponenter från de avsedda data. När filterlängden ökar (parametern M) ökar utjämnets jämnhet, medan de skarpa övergångarna i data görs alltmer stumma. 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ångspunkter, beräknar medelvärdet av de M-punkterna och producerar en enda utgångspunkt 2) På grund av beräknade beräkningskalkyler. filtret introducerar en bestämd mängd fördröjning 3) Filtret fungerar som ett lågpassfilter (med dåligt frekvensdomänsvar och ett bra domänsvar). Matlab-kod: Efter matlab-kod simuleras tidsdomänsvaret för ett M-punkts rörande medelfilter och avbildar även frekvensresponsen för olika filterlängder. Tid Domain Response: På den första tomten har vi inmatningen som går in i det glidande medelfiltret. Inmatningen är bullrig och vårt mål är att minska bruset. Nästa siffra är utgångsvaret för ett 3-punkts rörande 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 filterkranarna till 51-punkter och vi kan se att bruset i utmatningen har minskat mycket, vilket avbildas i nästa bild. 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år ingång). Frekvensrespons: Från frekvenssvaret kan det hävdas att avrullningen är väldigt långsam och stoppbandets dämpning inte är bra. Med tanke på detta stoppband dämpning, klart, det rörliga genomsnittliga filtret kan inte separera ett band med frekvenser från en annan. Som vi vet att en bra prestanda i tidsdomänen leder till 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 exceptionellt dåligt lågpassfilter (åtgärden i frekvensdomänen) Externa länkar: Rekommenderade böcker: Primär sidobarDokumentation I det här exemplet visas hur man använd glidande medelfilter och resampling för att isolera effekten av periodiska komponenter på tidstimmen vid timme temperaturavläsningar, samt ta bort oönskat linjeljud från en spänningsmätning med öppen slinga. 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å temperaturmätningarna. 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 våra data genom att använda ett glidande medelfilter. Ett rörligt medelfilter I sin enklaste form tar ett glidande medelfilter av 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 av vår temperatursignal ändras dagligen. För att göra detta kan vi använda kuvertfunktionen för att ansluta extrema höga och låga detekterade ö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 medeltalet mellan de två ytterligheterna. Viktiga rörliga genomsnittliga filter 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 landAnomsnittSimple glidande medelvärden GenomsnittligaSimple moving average Du uppmanas att lösa denna uppgift enligt uppgiftsbeskrivningen, med vilket språk du kanske känner. Beräknar det enkla glidande medlet av en serie siffror. Skapa en stateful funktionsklassinstans som tar en period och returnerar en rutin som tar ett tal som argument och returnerar ett enkelt glidande medelvärde av dess argument hittills. Ett enkelt glidande medelvärde är en metod för att beräkna ett medelvärde av en ström av siffror genom att bara medge de senaste 160 P 160-talen från strömmen 160, var 160 P 160 är känd som perioden. Det kan implementeras genom att anropa en initialiseringsrutin med 160 P 160 som sitt argument 160 I (P), 160, som då ska returnera en rutin som när man kallar individuella, successiva medlemmar i en ström av tal, beräknar medelvärdet av (upp till), de senaste 160 P 160 av dem, kan ringa denna 160 SMA (). Ordet 160 stateful 160 i arbetsbeskrivningen hänvisar till behovet av 160 SMA () 160 för att komma ihåg viss information mellan samtal till den: 160 Perioden, 160 P 160 En beställd behållare med minst de senaste 160 P 160 numren från var och en av dess enskilda samtal. Stateful 160 betyder också att successiva samtal till 160 I (), 160 initieraren, 160 ska returnera separata rutiner som gör 160 inte 160 delade sparade tillstånd så att de kunde användas på två oberoende dataströmmar. Pseudokod för en implementering av 160 SMA 160 är: Denna version använder en ihållande kö för att hålla de senaste p-värdena. Varje funktion som returneras från init-moving-genomsnittet har sitt tillstånd i en atom som håller ett kövärde. Denna implementering använder en cirkulär lista för att lagra siffrorna i fönstret i början av varje iterationspekare hänvisar till listcellen som håller värdet bara förflyttning ur fönstret och att ersättas med det tillförda värdet. Använda en Closure-redigering För närvarande kan denna sma vara nogc eftersom den allokerar en stängning på högen. Några flyktanalyser kunde ta bort heapfördelningen. Använda en strukturredigering Den här versionen undviker hålfördelningen av stängningen och håller data i stapelramen för huvudfunktionen. Samma utmatning: För att undvika att de flytande punkts approximationerna fortsätter att växa upp och växer, kan koden utföra en periodisk summa på hela cirkulärkön. Denna implementering producerar två (funktion) objekt delningstillstånd. Det är idiomatiskt i E att separera inmatning från utgång (läs från skriv) istället för att kombinera dem i ett objekt. Strukturen är densamma som implementeringen av Standard DeviationE. Elixirprogrammet nedan genererar en anonym funktion med en inbäddad period p, som används som perioden för det enkla glidande medlet. Körningsfunktionen läser numerisk ingång och skickar den till den nyupprettade anonyma funktionen och inspekterar sedan resultatet till STDOUT. Utgången visas nedan, med medelvärdet, följt av den grupperade ingången, som utgör grunden för varje glidande medelvärde. Erlang har stängningar, men oföränderliga variabler. En lösning är då att använda processer och ett enkelt meddelande som passerar baserat API. Matrisspråken har rutiner för att beräkna glidningsbilden för en given sekvens av objekt. Det är mindre effektivt att slinga som i följande kommandon. Ständigt uppmanar till en ingång I. som läggs till i slutet av en lista L1. L1 kan hittas genom att trycka på 2ND1, och medel kan hittas i ListOPS Tryck på ON för att avsluta programmet. Funktion som returnerar en lista som innehåller den genomsnittliga data för det medföljande argumentet Program som returnerar ett enkelt värde vid varje tillkännagivande: Listan är listan som medelvärde: p är perioden: 5 returnerar den genomsnittliga listan: Exempel 2: Använd programmet movinav2 , 5) - Initialisering av glidande medelberäkning, och definiera perioden 5 movinav2 (3, x): x - nya data i listan (värde 3) och resultatet lagras på variabel x och visas movinav2 (4, x) : x - ny data (värde 4), och det nya resultatet lagras på variabel x och visas (43) 2. Beskrivning av funktionen movinavg: variabel r - är resultatet (den genomsnittliga listan) som kommer att returneras variabel i - är indexvariabeln, och den pekar på slutet av dellistan som listan är medeltal. variabel z - en hjälparvariabel Funktionen använder variabel i för att bestämma vilka värden i listan som ska beaktas i nästa genomsnittliga beräkning. Vid varje iteration pekar variabel I till det sista värdet i listan som kommer att användas i medelberäkningen. Så vi behöver bara ta reda på vilka som kommer att vara det första värdet i listan. Vanligtvis måste man överväga p-element, så det första elementet kommer att vara det som indexeras av (i-p1). Men vid de första iterationerna kommer denna beräkning vanligen att vara negativ, så följande ekvation undviker negativa index: max (i-p1,1) eller ordnar ekvationen max (i-p, 0) 1. Men antalet element på de första iterationerna kommer också att vara mindre, det korrekta värdet kommer att vara (slutindex - startindex 1) eller, ordna ekvationen, (i - (max (ip, 0) 1) 1) och sedan , (i-max (ip, 0)). Variabel z har det gemensamma värdet (max (ip), 0) så startindex kommer att vara (z1) och nummervärdena kommer att vara (iz) mitt (lista, z1, iz) returnera listan över värde som kommer att vara medelvärde ( .) summerar dem summan (.) (iz) ri kommer att genomsöka dem och lagra resultatet på lämpligt ställe i resultatlistan fp1 skapar en partiell applikation som fastställer (i detta fall) andra och tredje parametrar

No comments:

Post a Comment