Glidande medelvärde signal matlab
29 september 2013 Flyttande medelvärde genom convolution Vad rör sig i genomsnitt och vad är det bra för Hur rör sig medelvärdet genom att använda konvoltering Flyttande medelvärde är en enkel operation som vanligtvis används för att undertrycka brus av en signal: vi ställer värdet på varje punkt till genomsnittet av värdena i dess grannskap. Med en formel: Här är x ingången och y är utsignalen, medan storleken på fönstret är w, skulle vara udda. Formeln ovan beskriver en symmetrisk operation: proven tas från båda sidor av den aktuella punkten. Nedan är ett verkligt exempel. Den punkt som fönstret ligger faktiskt är rött. Värden utanför x är tänkt att vara nollor: Att leka och se effekterna av glidande medelvärde, ta en titt på denna interaktiva demonstration. Hur man gör det genom konvoltering Som du kanske har insett är det att det enkla glidande medlet liknar konvolutionen: i båda fallen glider ett fönster längs signalen och elementen i fönstret sammanfattas. Så försök att göra samma sak genom att använda convolution. Använd följande parametrar: Den önskade utgången är: Som första tillvägagångssätt, låt oss försöka vad vi får genom att samla x-signalen med följande k-kärna: Utsignalen är exakt tre gånger större än den förväntade. Det kan också ses att utgångsvärdena är sammanfattningen av de tre elementen i fönstret. Det beror på att under fönstret glider fönstret, alla element i det multipliceras med en och sedan sammanfattas: yk 1 cdot x 1 cdot x 1 cdot x För att få önskade värden på y. utgången ska delas med 3: Med en formel inklusive divisionen: Men skulle det inte vara optimalt att göra uppdelningen under konvoltering Här kommer tanken genom att omordna ekvationen: Så vi ska använda följande k-kärna: På så sätt kommer vi att få önskad produktion: Generellt: om vi vill göra glidande medelvärde genom convolution som har en fönsterstorlek på w. vi ska använda följande k-kärna: En enkel funktion som gör det glidande medlet är: Ett exempel är: Vad är utjämning och hur kan jag göra det? Jag har en matris i Matlab som är magnitudspektrumet för en talssignal (storleken på 128 punkter i FFT). Hur glattar jag det här med ett glidande medelvärde Från vad jag förstår borde jag ta en fönsterstorlek på ett visst antal element, ta medeltal och det blir det nya 1: a elementet. Skift sedan fönstret till höger genom ett element, ta medelvärdet som blir det andra elementet och så vidare. Är det verkligen hur det fungerar, jag är inte säker på mig själv, eftersom om jag gör det, får jag i mitt slutresultat mindre än 128 element. Så hur fungerar det och hur hjälper det att släta datapunkterna Eller är det något annat sätt jag kan göra utjämning av data som frågades 15 okt 12 kl 6:30 migrerade från stackoverflow 15 okt 12 kl 14:51 Denna fråga kom från vår plats för professionell och entusiast programmerare. för ett spektrum vill du antagligen medelvärde (i tidsdimensionen) multipla spektra i stället för ett löpande medelvärde längs frekvensaxeln för ett enda spektrum ndash endolit 16 okt 12 vid 1:04 endolit båda är giltiga tekniker. Medelvärde i frekvensdomänen (ibland kallad Danielle Periodogram) är densamma som fönsterrutan i tidsdomänen. Medelvärdet av flera periodogram (quotspectraquot) är ett försök att efterlikna det genomsnittliga samlingsvärdet som krävs av det verkliga periodogrammet (detta kallas Welch Periodogram). Också, som en fråga om semantik, skulle jag hävda att quotsmoothingquot är icke-orsaklig lågpassfiltrering. Se Kalman filtrering mot Kalman utjämning, Wiener filtrering v Wiener utjämning, etc. Det är en nontrivial skillnad och det är genomförandeberoende. ndash Bryan Dec 12 12 på 19:18 Utjämning kan göras på många sätt, men i mycket grundläggande och allmänna termer betyder det att du ens ut en signal genom att blanda dess element med sina grannar. Du smörjer signalen lite för att bli av med ljud. Exempelvis skulle en mycket enkel utjämningsteknik vara att räkna om varje signalelement f (t) till som 0,8 av det ursprungliga värdet plus 0,1 av var och en av sina grannar: Observera hur multiplikationsfaktorerna eller vikterna lägger till en. Så om signalen är ganska konstant ändras inte utjämningen mycket. Men om signalen innehöll en plötslig jerky förändring, kommer bidraget från sina grannar att hjälpa till att rensa upp det bullret lite. De vikter du använder i denna omräkningsfunktion kan kallas en kärna. En endimensionell Gaussisk funktion eller någon annan grundläggande kärna borde göra i ditt fall. Trevligt exempel på en viss typ av utjämning: Ovan: osmoothad signal Nedan: Glatt signal Exempel på några kärnor: Förutom det snygga svaret på Junuxx skulle jag vilja släppa några noteringar. Utjämning är relaterad till filtrering (tyvärr ganska vag Wikipedia artikeln) - du borde välja en mjukare baserad på dess egenskaper. En av mina favoriter är medianfiltret. Detta är ett exempel på ett icke-linjärt filter. Det har några intressanta egenskaper, det bevarar kanterna och är ganska robust under stort buller. Om du har en modell hur din signal beter sig är ett Kalman-filter värt en titt. Dess utjämning är faktiskt en Bayesian maximal sannolikhetsbedömning av signalen baserat på observationer. svarat 15 okt 12 kl 11:07 1 för att nämna kalman-filteret ndash Diego dec 13 12 kl 18:48 Utjämning innebär att man använder information från närliggande prover för att ändra förhållandet mellan närliggande prover. För ändliga vektorer, i ändarna finns det ingen angränsande information till ena sidan. Dina val är: Do not smoothfilter ändarna, acceptera en kortare resulterande slät vektor, smink data och släta med det (beror på precisionen av eventuella förutsägelser utanför ändarna), eller kanske använda olika asymmetriska utjämningskärnor i ändarna (vilket hamnar förkorta informationsinnehållet i signalen ändå). svarat 15 okt 12 kl 19:44 Andra har nämnt hur du gör utjämning, jag gillar att nämna varför utjämning fungerar. Om du korrekt överskrider din signal, kommer den att variera relativt lite från ett prov till nästa (provtidpunkter, pixlar osv.) Och det förväntas ha ett övergripande jämnt utseende. Med andra ord innehåller din signal få höga frekvenser, dvs signalkomponenter som varierar med en takt som liknar din samplingsfrekvens. Ändå är mätningar ofta korrumperade av brus. I en första approximation betraktar vi vanligtvis bruset att följa en Gauss-fördelning med medel noll och en viss standardavvikelse som helt enkelt läggs ovanpå signalen. För att minska bruset i vår signal gör vi vanligtvis följande fyra antaganden: bruset är slumpmässigt, är inte korrelerat bland prover, har ett medelvärde av noll och signalen är tillräckligt överskattad. Med dessa antaganden kan vi använda ett glidande medelfilter. Tänk exempelvis tre sammanhängande prover. Eftersom signalen är mycket översamplad kan den underliggande signalen anses förändras linjärt, vilket innebär att medelvärdet av signalen över de tre proven skulle motsvara den sanna signalen vid mittenprovet. Däremot har bullret medelvärdet noll och är okorrelerat, vilket innebär att dess genomsnitt skulle vara noll. Således kan vi tillämpa ett treprov glidande medelfilter, där vi byter ut varje prov med genomsnittet mellan sig själv och dess två angränsande grannar. Självklart ju ju större vi gör fönstret, desto mer kommer bruset att bli genomsnittligt till noll, men ju mindre antar vi att den sanna signalen är linjär. Således måste vi göra en avvägning. Ett sätt att försöka få det bästa av båda världarna är att använda ett vägt genomsnitt, där vi ger längre bortprover mindre vikter, så att vi genomsnittliga bullerffekter från större områden samtidigt som vi inte väger sant signal för mycket där den avviker från vår linjäritet antagande. Hur du ska lägga vikterna beror på brus, signal och beräkningseffektivitet, och naturligtvis avvägningen mellan att bli av med bruset och skär in i signalen. Observera att det har gjorts mycket arbete under de senaste åren för att tillåta oss att koppla av några av de fyra antagandena, till exempel genom att utforma utjämningssystem med variabla filterfönster (anisotropisk diffusion) eller system som inte alls använder Windows alls (icke-lokalt medel). svarade dec 27 12 på 15: 10 Jag behöver beräkna ett glidande medelvärde över en dataserie, inom en för loop. Jag måste få det glidande genomsnittet över N9 dagar. Array Im computing in är 4 serier av 365 värden (M), som i sig är medelvärden för en annan uppsättning data. Jag vill räkna ut medelvärdena för mina data med glidande medelvärde i en plot. Jag googled lite om glidande medelvärden och conv kommandot och hittade något som jag försökte implementera i min kod .: Så i princip beräknar jag mitt medelvärde och plottar det med ett (fel) glidande medelvärde. Jag valde wts-värdet direkt utanför mathworks webbplats, så det är felaktigt. (källa: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mitt problem är dock att jag inte förstår vad det här är. Kan någon förklara om det har något att göra med värdena på värdena: det är ogiltigt i det här fallet. Alla värden är viktade samma. Och om jag gör det här helt fel, kan jag få lite hjälp med det mitt uppriktiga tack. frågade 23 sep 14 kl 19:05 Använda conv är ett utmärkt sätt att genomföra ett glidande medelvärde. I koden du använder är wts hur mycket du väger varje värde (som du gissade). Summan av den vektorn ska alltid vara lika med en. Om du vill vikta varje värde jämnt och göra ett N-rörligt filter så vill du göra Att använda det giltiga argumentet i conv resulterar i att få färre värden i Ms än du har i M. Använd samma om du inte har något emot effekterna av noll padding. Om du har signalbehandlingsverktygslådan kan du använda cconv om du vill prova ett cirkulärt glidande medelvärde. Något som Du borde läsa conv and cconv dokumentationen för mer information om du inte redan har. Du kan använda filter för att hitta ett löpande medelvärde utan att använda en för loop. I det här exemplet hittar du löpande medelvärdet för en vektor med 16 element, med en fönsterstorlek på 5. 2) Slät som en del av kurvanpassningsverktygslådan (som är tillgänglig i de flesta fall) yy släpper (y) data i kolumnvektorn y med ett glidande medelfilter. Resultat returneras i kolumnvektorn yy. Standardvärdet för det glidande medlet är 5.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 - slinga 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å 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 land
Comments
Post a Comment