29 september 2013 Flyttande medelvärde genom convolution Vad rör sig i genomsnitt och vad är det bra för Hur flyttas 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: För att spela runt 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äknar man med 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 är för 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 som inkluderar divisionen: Men skulle det inte vara optimalt att göra uppdelningen under convolution 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 utgång: 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: Jag letar efter lite vägledning om att använda CONVN för att beräkna glidande medelvärden i en dimension på en 3d-matris. Jag blir lite gripen på kärnans vändning under huven och hoppas att någon kan klargöra beteendet för mig. En liknande post som fortfarande har mig lite förvirrad är här: Jag har dagliga flod - och väderflödesdata för en vattendrag på olika källor. Så matrisen är som så, dim 1 (raderna) representerar varje plats dim 2 (kolumnerna) representerar datum dim 3 (sidorna) representerar olika typer av mätning (flodhöjd, flöde, nederbörd etc.) Målet är att försöka använda CONVN för att ta ett 21 dagars glidande medelvärde vid varje ställe, för varje observationspunkt för varje variabel. Som jag förstår det, borde jag bara kunna använda en kärna som: Jag försökte leka och skapa en annan kärna som också skulle fungera (tror jag) och ställa in ker2 som: Resultaten matchar inte riktigt och jag undrar om jag har dimensionerna är felaktiga här för kärnan. Någon vägledning är mycket uppskattad. BTW, du har en symmetrisk kärna, och så bläddring ska inte ha någon effekt på konvolutionsutgången. Det du har angett är en standard rörlig medelkärnan, och så skulle konvertering fungera för att hitta det rörliga genomsnittet som du förväntar dig. men jag är lite förvirrad för att du sa det ovanstående fungerar inte ndash rayryeng 31 maj kl 15:17 Det är helt upp till dig :). Frågan du har är en giltig (ingen ordsprog avsedd) som springer upp många människor. Om du vill att den ska stanna kan jag skriva ett svar som sammanfattar vad vi pratat om. Om du vill dra tillbaka ta bort ditt svar är det inget problem alls. Låt mig veta vad du vill göra ndash rayryeng 31 maj 15 kl 20:39 Med utgångspunkt från din fråga har du en 3D-matris och du vill hitta det rörliga genomsnittet för varje rad oberoende över alla 3D-skivor. Koden ovan ska fungera (det första fallet). Den giltiga flaggan returnerar emellertid en matris vars storlek är giltig med avseende på konvolutionens gränser. Ta en titt på den första punkten i det inlägg som du länkade till för mer information. Specifikt saknas de första 21 inmatningarna för varje rad på grund av den giltiga flaggan. Dess enda när du kommer till den 22: e posten i varje rad blir konvolutionskärnan helt inne i en rad av matrisen och dess från den punkten där du får giltiga resultat (ingen ordsprog är avsedd). Om du vill se dessa poster vid gränserna måste du använda samma flagga om du vill behålla samma storlek matris som inmatning eller full flagga (som är standard) som ger dig storleken på utgången från och med de mest extrema ytterkanterna, men tänk på att det glidande medlet kommer att göras med en massa nollor och så de första 21 posterna inte skulle vara vad du förväntar dig ändå. Men om jag tolkar vad du frågar är den giltiga flaggan vad du vill, men kom ihåg att du kommer att ha 21 poster som saknas för att rymma för kantfall. Sammantaget bör din kod fungera, men var försiktig med hur du tolkar resultaten. BTW, du har en symmetrisk kärna, och så bläddring ska inte ha någon effekt på konvolutionsutgången. Vad du har angett är en standard rörlig medelkärnan, och så ska konvertering fungera för att hitta det rörliga genomsnittet som du förväntar dig. Använd MATLAB, hur kan jag hitta 3-dagars glidande medelvärde för en viss kolumn i en matris och lägga till glidande medelvärde Till den matrisen försöker jag beräkna 3-dagars glidande medelvärde från botten till toppen av matrisen. Jag har angivit min kod: Med tanke på följande matris a och mask: Jag har försökt implementera kommandot conv men jag får ett fel. Här är conv kommandot jag har försökt använda på 2: a kolumnen i matris a: Utgången jag önskar ges i följande matris: Om du har några förslag, skulle jag verkligen uppskatta det. Tack För kolumn 2 i matris a, beräknar jag 3-dagars glidande medelvärde enligt följande och placerar resultatet i kolumn 4 i matris a (jag byttes matris a som 39desiredOutput39 bara för illustration). 3-dagarsgenomsnittet 17, 14, 11 är 14 3-dagarsgenomsnittet 14, 11, 8 är 11 3-dagarsgenomsnittet 11, 8, 5 är 8 och 3-dagarsgenomsnittet 8, 5, 2 är 5. Det finns inget värde i botten 2 rader för den 4: e kolumnen eftersom beräkningen för 3-dagars glidande medel börjar längst ner. Den 39valid39-utmatningen visas inte förrän minst 17, 14 och 11. Förhoppningsvis är det här meningsfullt Aaron Jun 12 13 at 1:28 Generellt skulle det hjälpa om du skulle visa felet. I det här fallet gör du två saker fel: Först måste din konvolver delas av tre (eller längden på det glidande medlet) För det andra märker du storleken på c. Du kan inte bara passa c till en. Det typiska sättet att få ett glidande medelvärde skulle vara att använda samma: men det ser inte ut som vad du vill ha. Istället är du tvungen att använda ett par rader: Scientist och Engineers Guide till Digital Signal Processing av Steven W. Smith, Ph. D. Som namnet antyder verkar det glidande medelfiltret genom att medelvärda ett antal punkter från ingångssignalen för att producera varje punkt i utsignalen. I ekvationsformen skrivs detta: Var är ingångssignalen, utsignalen, och M är antalet punkter i medelvärdet. Till exempel, i ett 5-punkts glidande medelfilter, anges punkt 80 i utsignalen av: Som ett alternativ kan gruppen av punkter från ingångssignalen väljas symmetriskt runt utgångspunkten: Detta motsvarar att ändra summeringen i ekvation . 15-1 från: j 0 till M-1, till: j - (M-1) 2 till (M-1) 2. Till exempel, i ett 10-punkts glidande medelfilter, indexet, j. kan springa från 0 till 11 (ensidans medelvärde) eller -5 till 5 (symmetrisk medelvärde). Symmetrisk medelvärde kräver att M är ett udda tal. Programmeringen är lite lättare med punkterna på endast en sida, men detta ger en relativ växling mellan ingångs - och utsignalerna. Du bör känna igen att det glidande medelfiltret är en konvolvering med en mycket enkel filterkärna. Ett 5-punktsfilter har till exempel filterkärnan: 82300, 0, 15, 15, 15, 15, 15, 0, 08230. Dvs. det rörliga medelfiltret är en konvolvering av ingångssignalen med en rektangulär puls som har en område av en. Tabell 15-1 visar ett program för att implementera det glidande medelfiltret.
Comments
Post a Comment