Matlab Bevegelig Gjennomsnitt Matrise
Jeg må beregne et glidende gjennomsnitt over en dataserie, innenfor en for-løkke. Jeg må få glidende gjennomsnitt over N9 dager. Array Im computing in er 4 serier av 365 verdier (M), som i seg selv er gjennomsnittsverdier for et annet sett med data. Jeg vil plotte gjennomsnittverdiene av dataene mine med det bevegelige gjennomsnittet i en tomt. Jeg googled litt om å flytte gjennomsnitt og conv kommandoen og fant noe som jeg prøvde å implementere i min kode .: Så i utgangspunktet beregner jeg mitt gjennomsnitt og plotter det med et (feil) glidende gjennomsnitt. Jeg plukket wts verdien rett utenfor mathworks nettstedet, så det er feil. (kilde: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mitt problem er imidlertid at jeg ikke forstår hva dette wts er. Kan noen forklare om det har noe å gjøre med verdiene i vektene: det er ugyldig i dette tilfellet. Alle verdier er vektet det samme. Og hvis jeg gjør dette helt feil, kan jeg få litt hjelp med det Min oppriktige takk. spurte 23 september klokken 19:05 Bruk av conv er en utmerket måte å implementere et bevegelig gjennomsnitt på. I koden du bruker, er wts hvor mye du veier hver verdi (som du gjettet). summen av den vektoren skal alltid være lik en. Hvis du vil vektere hver verdi jevnt og gjøre et N-bevegelig filter, så vil du gjøre det. Ved å bruke det gyldige argumentet i conv, vil det føre til at du har færre verdier i Ms enn du har i M. Bruk det samme hvis du ikke har noe imot effekten av null polstring. Hvis du har signalbehandlingsverktøyskassen, kan du bruke cconv hvis du vil prøve et sirkulært glidende gjennomsnitt. Noe som Du burde lese conv and cconv dokumentasjonen for mer informasjon hvis du ikke allerede har hatt det.29 september 2013 Flytte gjennomsnitt ved konvolusjon Hva er glidende gjennomsnitt og hva er det bra for Hvordan flytter gjennomsnittet gjort ved å bruke convolution Flytte gjennomsnitt er en enkel operasjon brukes vanligvis til å undertrykke støy av et signal: vi setter verdien av hvert punkt til gjennomsnittet av verdiene i nabolaget. Med en formel: Her er x inngangen, og y er utgangssignalet, mens størrelsen på vinduet er w, skulle være merkelig. Formelen ovenfor beskriver en symmetrisk operasjon: prøvene tas fra begge sider av det aktuelle punktet. Nedenfor er et virkelighetseksempel. Det punktet som vinduet ligger faktisk er rødt. Verdier utenfor x skal være nuller: For å spille rundt og se effekten av glidende gjennomsnitt, ta en titt på denne interaktive demonstrasjonen. Slik gjøres det ved konvolusjon Som du kanskje har gjenkjent, beregner det enkle glidende gjennomsnittet likningen: i begge tilfeller skyves et vindu langs signalet og elementene i vinduet oppsummeres. Så, prøv å gjøre det samme ved å bruke konvolusjon. Bruk følgende parametre: Ønsket utgang er: Som første tilnærming, la oss prøve det vi får ved å samle x-signalet med følgende k-kjerne: Utgangen er nøyaktig tre ganger større enn den forventede. Det kan også ses at utgangsvurderingene er oppsummeringen av de tre elementene i vinduet. Det er fordi under konvolusjonen glir vinduet langs, alle elementene i det blir multiplisert med en og deretter oppsummert: yk 1 cdot x 1 cdot x 1 cdot x For å få de ønskede verdiene for y. Utgangen skal deles med 3: Ved en formel som inkluderer divisjonen: Men ville det ikke være optimal å gjøre avdelingen under konvolusjonen. Her kommer ideen ved å omplassere ligningen: Så vi skal bruke følgende k-kjerne: På denne måten vil vi få ønsket utdata: Generelt: hvis vi ønsker å gjøre bevegelige gjennomsnitt ved konvolusjon som har en vindusstørrelse på w. vi skal bruke følgende k-kjerne: En enkel funksjon som gjør det bevegelige gjennomsnittet er: Et eksempelbruk er: Jeg har en vektor og jeg vil beregne det bevegelige gjennomsnittet av det (ved hjelp av et vindu med bredde 5). For eksempel, hvis vektoren er 1,2,3,4,5,6,7,8. da skal den første oppføringen av den resulterende vektoren være summen av alle oppføringene i 1,2,3,4,5 (dvs. 15) den andre oppføringen av den resulterende vektoren skal være summen av alle oppføringene i 2,3,4, 5,6 (dvs. 20) osv. Til slutt skal den resulterende vektoren være 15,20,25,30. Hvordan kan jeg gjøre det The conv-funksjonen er rett opp i smuget ditt: Tre svar, tre forskjellige metoder. Her er en rask referanse (forskjellige inngangsstørrelser, fast vindubredde på 5) ved hjelp av timeit, må du kaste hull i den (i kommentarene) hvis du tror det må raffineres. conv framstår som den raskeste tilnærmingen sin omtrent dobbelt så fort som mynter nærmer seg (ved hjelp av filter). og omtrent fire ganger så fort som Luis Mendos tilnærming (ved hjelp av cumsum). Her er en annen referanse (fast inngangsstørrelse på 1e4. Forskjellige vindubredder). Her kommer Luis Mendos cumsum tilnærming fram som den klare vinneren, fordi dens kompleksitet primært styres av lengden på inngangen og er ufølsom for vinduets bredde. Konklusjon For å oppsummere, bør du bruke conv-tilgangen hvis vinduet ditt er relativt lite, bruk cumsum-tilnærmingen hvis vinduet ditt er relativt stort. Kode (for referanser)
Comments
Post a Comment