Friday 3 November 2017

Flytte Gjennomsnittet Matlab Funksjon


Laget på onsdag 08 oktober 2008 20 04 Sist oppdatert torsdag 14. mars 2013 01 29 Skrevet av Batuhan Osmanoglu Hits 41553.Moving Average I Matlab. Ofte finner jeg meg selv i behov av å gjennomsnittlig dataene jeg må redusere støyen litt Jeg skrev noen funksjoner for å gjøre akkurat det jeg vil, men matlabs innebygde filterfunksjon fungerer også bra her. Her skal jeg skrive om 1D og 2D gjennomsnittlig data.1D-filteret kan realiseres ved hjelp av filterfunksjonen Filterfunksjonen krever minst tre inngangsparametere tellerkoeffisienten for filteret b, nevnerkoeffisienten for filteret a og dataene X selvfølgelig. Et løpende gjennomsnittfilter kan defineres enkelt ved. For 2D-data kan vi bruke Matlab s filter2-funksjonen. For mer informasjon om hvordan filteret fungerer, kan du skrive. Her er en rask og skitten implementering av et 16 med 16 bevegelige gjennomsnittsfilter. Først må vi definere filteret. Siden alt vi ønsker er like bidrag fra alle naboer, kan vi bare bruke de morsomme ction Vi deler alt med 256 16 16 siden vi ikke vil endre signalets generelle nivå amplitude. For å bruke filteret kan vi bare si følgende. Deretter er resultatene for fase av et SAR-interferogram. I dette tilfellet er Range i Y-aksen og Azimuth er kartlagt på X-aksen Filtret var 4 piksler bredt i rekkevidde og 16 piksler bredt i Azimuth. Jeg må beregne et glidende gjennomsnitt over en dataserie, innen en for-løkke må jeg få det bevegelige gjennomsnittet over N 9 dager Arrayet jeg beregner er 4 serie med 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 ett diagram. Jeg googlede litt om bevegelige gjennomsnitt og conv kommandoen og fant noe som jeg prøvde å implementere i min kode. Så i utgangspunktet beregner jeg min gjennomsnitt og plott det med et feil glidende gjennomsnitt Jeg valgte wts verdien rett utenfor mathworks nettstedet, så det er feil kilde Mitt problem skjønt, er at jeg ikke forstår hva dette wts kan noen forklarer Hvis det har noe å gjøre med vikene til verdiene som er ugyldige i dette tilfellet, blir alle verdier det samme. Og hvis jeg gjør dette helt feil, kan jeg få litt hjelp med det. Min oppriktige takk. 23 14 på 19 05. Bruke 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 ønsker å vektere hver verdi jevnt og gjøre et N-bevegelig filter så du vil gjøre. Bruk det gyldige argumentet i samle vil resultere i å ha 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 bør lese conv and cconv dokumentasjonen for mer informasjon hvis du allerede har t. You kan bruke filter for å finne et løpende gjennomsnitt uten bruker en for loop Dette eksemplet finner ru Gjennomsnittlig gjennomsnitt av en 16-elementvektor, ved hjelp av en vindusstørrelse på 5,2 glatt som en del av kurvefittingverktøyet, som er tilgjengelig i de fleste tilfeller. yy glatt y glatter dataene i kolonnevektoren y ved hjelp av et glidende gjennomsnittsfilter. Resultatene returneres i kolonnen vektoren yy 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 seg i finansverktøyet, movAv er utformet for å replikere Den grunnleggende funksjonaliteten til disse. Koden her gir et godt eksempel på å administrere indekser i looper som kan være forvirrende til å begynne med. Jeg har bevisst holdt koden kort og enkel for å holde denne prosessen klar. movAv utfører et enkelt glidende gjennomsnitt som kan brukes å gjenopprette bråkete data i noen situasjoner Det virker ved å ta et gjennomsnitt av inngangen y over et glidende tidvindu, hvis størrelse er spesifisert av n Jo større n er, jo større er mengden av utjevning av effekten av n er 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 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 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. 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