Tuesday 14 November 2017

Med Bevegelig Gjennomsnitt Vektor Matlab


29. september 2013.Moving gjennomsnitt ved convolution. What er flytte gjennomsnittet og hva er det bra for. Hvordan flytter gjennomsnittet gjort ved å bruke convolution. Moving gjennomsnitt er en enkel operasjon som vanligvis brukes til å undertrykke støy av et signal vi setter verdien av hver pek på gjennomsnittet av verdiene i nabolaget Ved en formel. Her x er inngangen, og y er utgangssignalet, mens størrelsen på vinduet er w, skal være merkelig. Formelen ovenfor beskriver en symmetrisk operasjon som prøver tas fra begge sider av det aktuelle punktet. Det er et virkelighetseksempel. Det punktet som vinduet legges faktisk er rødt. Verdier utenfor x er ment å være nuller. For å spille rundt og se effekten av glidende gjennomsnitt, ta en titt på dette interaktiv demonstrasjon. Hvordan gjør du det ved convolution. As du kanskje har anerkjent, beregner det enkle glidende gjennomsnittet ligner konvolusjonen i begge tilfeller et vindu glides langs signalet og elementene i vinduet blir oppsummert Så prøv det å gjøre Samme ved å bruke konvolusjon Bruk følgende parametere. Den ønskede utgangen 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å være sett at utgangsvurderingene er sammendraget av de tre elementene i vinduet. Det er fordi under konvolusjonen glir vinduet sammen, 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 av y, skal utgangen divideres med 3. Med en formel inkludert divisjonen. Men det ville ikke være optimalt å gjøre avdelingen under konvolusjon. Her kommer ideen av omarrangere ligningen. Så skal vi bruke følgende k-kjerne. På denne måten vil vi få den ønskede utdata. I generell hvis vi vil flytte gjennomsnittet ved konvolusjon som har et vindu størrelse w, skal vi bruke følgende k-kjernen. A enkel funksjonen gjør det bevegelige gjennomsnittet. Et eksempel er bruk. Last ned movAv m se også movAv2 - en oppdatert versjon som tillater vekting. Beskrivelse Matlab inkluderer funksjoner som kalles movavg og tsmovavg tidsserie som beveger gjennomsnittet i Financial Toolbox, movAv er designet for å replikere grunnleggende funksjonaliteten til disse Koden her gir et godt eksempel på å håndtere indekser i looper, noe som kan være forvirrende til å begynne med, jeg har bevisst holdt koden kort og enkel å holde denne prosessen klar. movAv utfører et enkelt glidende gjennomsnitt som kan brukes til å gjenopprette støyende data i noen situasjoner. Det virker ved å ta et middel av inngangen y over et glidende tidsvindu, hvis størrelse er spesifisert av n Jo større n er, desto større er utjevningen av effekten av n i forhold til lengden på inngangsvektoren y og effektivt, oppretter en slags lavpassfrekvensfilter - se eksempler og overvejelser. Fordi mengden av utjevning som tilbys av hver verdi av n er i forhold til lengden på inngangsvektoren, er det s alltid verdt å teste forskjellige verdier for å se hva som er relevant Husk også at n poeng går tapt på hvert gjennomsnitt hvis n er 100, de første 99 poengene i inngangsvektoren inneholder ikke nok data for et 100pt gjennomsnitt. Dette kan unngås noe ved å stable gjennomsnitt, for eksempel, koden og grafen nedenfor, sammenligner du en rekke vinduer med gjennomsnittlig lengde. Legg merke til hvor glatt 10 10pt er sammenlignet med et enkelt 20pt gjennomsnitt. I begge tilfeller går 20 poeng av data totalt tapt. Opprett xaxis x 1 0 01 5 Generer støystøyReps 4 støy repmat randn 1, ceil nummer x noiseReps, noiseReps, 1 støy omforming støy, 1 lengde støy noiseReps Generer ydata støy y exp x 10 støy 1 lengde x Perfrom gjennomsnitt y2 movAv y, 10 10 pt y3 movAv y2, 10 10 10 pt y4 movAv y 20 20 pt y5 movAv y 40 40 pt y6 movAv y, 100 100 pt Plottfigur plot x, y, y2, y3, y4, y5, y6 legend Raw data, 10pt glidende gjennomsnitt, 10 10pt, 20pt, 40pt, 100pt xlabel x ylabel y tittel Sammenligning av bevegelige gjennomsnitt. mVaV m koden gjennomløpsfunksjon utgang movAv y, n Den første linjen definerer funksjonens navn, innganger og utganger Inngangen x skal være en vektor med data for å utføre gjennomsnittet på, n skal være antall poeng som skal utføre gjennomsnittet over utdata vil inneholde gjennomsnittlig data returnert av funksjonen. Forelegge utgangseffekt NaN 1, numel y Finn midtpunkt for n midPoint-runde n 2 Funksjonens hovedarbeid er gjort i forløp, men før start blir to ting forberedt Fir Stly utgangen er forhåndsallokert som NaNs, dette tjente to formål. For det første er forallokering generelt god praksis, da det reduserer minnesjonglingen Matlab må gjøre, for det andre gjør det veldig enkelt å sette gjennomsnittlig data i en utgang i samme størrelse som inngangsvektoren Dette betyr at samme xaxis kan brukes senere for begge, noe som er praktisk for plotting, alternativt kan NaNs fjernes senere i en linje med kodeutgangsproduksjon. Den variable midpoint vil bli brukt til å justere dataene i utgangsvektoren Hvis n 10, vil 10 poeng gå tapt fordi for de første 9 poengene til inngangsvektoren er det ikke nok data til å ta et 10-punkts gjennomsnitt. Da utgangen vil være kortere enn inngangen, må den justeres riktig midpoint vil brukes, slik at en lik mengde data går tapt i starten og slutten, og inngangen holdes i samsvar med utgangen av NaN buffere opprettet ved preallokering av output. for en 1 lengde y - n Finn indeksområde for å ta gjennomsnitt over abban Beregn gjennomsnittlig produksjon a midPoint betyr yab-ende I selve for-linjen blir et gjennomsnitt tatt over hvert påfølgende segment av inngangen. Sløyfen vil løpe for en som er definert som 1 opp til lengden på inngangen y, minus dataene som vil gå tapt n Hvis inngangen er 100 poeng lang og n er 10, løkken vil løpe fra en 1 til 90. Dette betyr at den første indeksen av segmentet blir i gjennomsnitt Den andre indeksen b er bare en n-1 Så på den første iterasjonen, en 1 n 10 så b 11-1 10 Det første gjennomsnittet blir tatt over yab eller x 1 10 Gjennomsnittet av dette segmentet, som er en enkelt verdi, lagres i utgang ved indeks a midPoint eller 1 5 6. På den andre iterasjonen , en 2 b 2 10-1 11 så gjennomsnittet blir tatt over x 2 11 og lagret i utgang 7 På den siste iterasjonen av sløyfen for en inngang på lengde 100, en 91 b 90 10-1 100 slik at midlet er tatt over x 91 100 og lagret i utgang 95 Dette etterlater produksjonen med totalt n 10 NaN-verdier ved indeks 1 5 og 96 100. Eksempler og overveier Flytte gjennomsnitt er nyttige i noen situasjoner, men de ikke alltid det beste valget Her er to eksempler hvor de ikke nødvendigvis er optimale. Mikrofonkalibrering Dette datasettet representerer nivåene av hver frekvens produsert av en høyttaler og registrert av en mikrofon med kjent lineær respons. Utgangene fra høyttaleren varierer med frekvens, men vi kan korrigere for denne variasjonen med kalibreringsdataene - utgangen kan justeres på nivå for å ta hensyn til svingningene i kalibreringen. Merk at rådataene er støyende - dette betyr at en liten endring i frekvens ser ut til å kreve en stor, uregelmessig, endring i nivå for å regne for Er dette realistisk Eller er dette et produkt av opptaksmiljøet Det er i dette tilfelle rimelig å bruke et glidende gjennomsnitt som jevner ut nivåfrekvenskurven for å gi en kalibreringskurve som er litt mindre uregelmessig Men hvorfor er det ikke optimal i dette eksempelet. Flere data ville være bedre - flere kalibreringer går i gjennomsnitt sammen vil ødelegge støyen i systemet så lenge det er kjørt dom og gi en kurve med mindre subtile detaljer tapt. Det bevegelige gjennomsnittet kan kun omtrentliggjøre dette, og kan fjerne noen høyere frekvensdips og topper fra kurven som virkelig eksisterer. Sine bølger Med et glidende gjennomsnitt på sinusbølger fremheves to punkter. Den generelle problemet med å velge et rimelig antall poeng for å utføre gjennomsnittet over. Det er enkelt, men det er mer effektive metoder for signalanalyse enn gjennomsnittlig oscillerende signaler i tidsdomene. I denne grafen er den opprinnelige sinusbølge plottet i blått Støy er lagt til og plottet som oransje kurve Et glidende gjennomsnitt utføres på forskjellige antall poeng for å se om den opprinnelige bølgen kan gjenvinnes. 5 og 10 poeng gir rimelige resultater, men ikke fjern støyen helt, hvor like større antall poeng begynner å miste amplitudedetaljene da gjennomsnittet strekker seg over forskjellige faser, husk bølgen oscillerer rundt null, og mener -1 -1 0. En alternativ tilnærming ville være å konstruere et lavpassfilter enn det kan være anvendt på signalet i frekvensdomenet, jeg kommer ikke til å gå i detalj som det går utover denne artiklens omfang, men da støyen er betydelig høyere frekvens enn bølgenees grunnfrekvens, ville det være ganske enkelt i dette tilfelle å konstruere et lavpassfilter enn fjerner høyfrekvent støy. Ved hjelp av MATLAB, hvordan kan jeg finne tre-dagers glidende gjennomsnitt av en bestemt kolonne av en matrise og legge til glidende gjennomsnitt i den matrisen jeg prøver å beregne 3-dagers glidende gjennomsnitt fra bunnen til toppen av matrisen har jeg gitt min kode. Giv følgende matrise a og mask. Jeg har prøvd å implementere conv-kommandoen, men jeg mottar en feil. Her er conv-kommandoen jeg har prøvd å bruke i 2. kolonne av matrise a. Utgangen jeg ønsker er gitt i følgende matrise. Hvis du har noen forslag, vil jeg sterkt sette pris på det. Takk for kolonne 2 av matrise a, beregner jeg 3-dagers glidende gjennomsnitt som følger og plasserer resultatet i kolonne 4 av matrise a rena med matrise a som ønsket Utgang bare for å illustrere 3-dagers gjennomsnittet på 17, 14, 11 er 14 det 3-dagers gjennomsnittet av 14, 11, 8 er 11 3-dagers gjennomsnittet av 11, 8, 5 er 8 og 3 - dags gjennomsnitt på 8, 5, 2 er 5 Det er ingen verdi i de nederste 2 radene for fjerde kolonne fordi beregningen for 3-dagers glidende gjennomsnitt starter nederst. Den gyldige utgangen vil ikke bli vist før minst 17, 14 og 11 Forhåpentligvis er dette fornuftig Aaron 12. juni kl.18. Generelt vil det hjelpe hvis du vil vise feilen. I dette tilfellet gjør du to ting feil. Først må din konvolusjon deles med tre eller lengden på det bevegelige gjennomsnittet. Sekund, merk størrelsen på c Du kan ikke bare passe c til en Den typiske måten å få et bevegelig gjennomsnitts ville være å bruke samme. Men det ser ikke ut som du vil. I stedet er du tvunget til å bruke et par av linjer.

No comments:

Post a Comment