Wednesday 25 October 2017

Flytte Gjennomsnittet Matlab Kode


Ved hjelp av MATLAB, hvordan kan jeg finne tre-dagers glidende gjennomsnitt av en bestemt kolonne i en matrise og legge til glidende gjennomsnitt i den matrisen jeg prøver å beregne 3-dagers glidende gjennomsnitt fra bunnen til toppen av matrisen jeg har gitt min code. Given følgende matrise a og mask. I har prøvd å implementere conv kommandoen, men jeg mottar en feil. Her er conv kommandoen jeg har prøvd å bruke på den andre kolonnen av matrise a. Den utgang 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 jeg omdøpt matrise a som ønsket Utgang bare for å illustrere 3-dagers gjennomsnittet av 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-dagers gjennomsnittet av 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 ved bunnen Den gyldige utgangen vil ikke bli vist før minst 17, 14 og 11 Forhåpentligvis er dette fornuftig Aaron 12. juni kl. 13 på 28. 28. Generelt vil det hjelpe hvis du vil vise feilen I dette tilfellet gjør du to ting feil . Først skal konvolusjonen deles opp med tre eller lengden på det bevegelige gjennomsnittet. Merk, 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 gjør det ikke se ut som du vil. I stedet er du tvunget til å bruke et par linjer. Jeg må beregne et bevegelige gjennomsnitt over en dataserie, i løpet av en for-løkke må jeg få det bevegelige gjennomsnittet over N 9 dager. Arrayet jeg beregner i er 4 serier av 365 verdier M, som i seg selv er middelverdier av et annet sett med data jeg vil plotte gjennomsnittverdiene av dataene mine med det bevegelige gjennomsnittet i ett plot. Jeg googlede litt om å flytte gjennomsnitt og conv-kommandoen og fant noe som jeg prøvde å implementere i min kode. Så i utgangspunktet beregner jeg min gjennomsnitt og plott den med aw rong glidende gjennomsnitt Jeg valgte wts verdien rett utenfor mathworks nettstedet, så det er feil kilde. Mitt problem er at jeg ikke forstår hva dette wts er. Kan noen forklare om det har noe å gjøre med vikene til verdiene som 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. Skrevet 23. september kl 14 på 19 05. Bruke conv er en utmerket måte å implementere en bevegelse på gjennomsnitt 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 ønsker å vekten hver verdi jevnt og gjøre et størrelse N bevegerfilter, vil du ønske å gjøre. Ved å bruke det gyldige argumentet i samtalen, vil det få færre verdier i Ms enn du har i M Bruk det samme hvis du ikke har tenkt på effekten av nullpolstring Hvis du har signalbehandlingsverktøyskassen, kan du bruke cconv hvis du vil prøve et sirkulært glidende gjennomsnitt. Noe som. Du burde lese t han conv conv og cconv dokumentasjon for mer informasjon hvis du allerede har t. You kan bruke filter for å finne et løpende gjennomsnitt uten å bruke en for loop Dette eksemplet finner det løpende gjennomsnittet av en 16-element vektor, ved hjelp av en vindusstørrelse på 5.2 glatt som del av kurvfesteverktøyet som er tilgjengelig i de fleste tilfeller. yy glatt y glatter dataene i kolonnevektoren y ved hjelp av et bevegelig gjennomsnittsfilter. Resultatene returneres i kolonnevektoren. Standardverdien for det bevegelige gjennomsnittet er 5.Download movAv m se også movAv2 - en oppdatert versjon som tillater vekting. Beskrivelse Matlab inkluderer funksjoner som kalles movavg og tsmovavg-tidsserier som beveger gjennomsnittet i Financial Toolbox, movAv er utformet for å gjenskape grunnleggende funksjonaliteten til disse. Koden her gir et godt eksempel på å håndtere indekser i looper, 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 da ta i noen situasjoner Det virker ved å ta et middel av inngangen y over et glidende tidvindu, 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 vel, skaper et 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 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 gjennomsnitt på 100pt Dette kan unngås noe ved å stable gjennomsnitt, for eksempel, koden og grafen nedenfor sammenligner et antall 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. Opprett xaxis x 1 0 01 5 Generer støystøyReps 4 støy repmat randn 1, ceil numel 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. Inndata 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 innspilt av en mikrofon med kjent lineær respons. Høyttalerenes utgang 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 som 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 vil fjerne høyfrekvent støy.

No comments:

Post a Comment