Matlab Sentrert Bevegende Gjennomsnitt Filteret
Laget på onsdag 08 oktober 2008 20:04 Sist oppdatert torsdag 14. mars 2013 01:29 Skrevet av Batuhan Osmanoglu Hits: 41506 Flytende gjennomsnitt I Matlab Ofte finner jeg meg selv i gjennomsnitt av dataene jeg må redusere støyen litt bit. Jeg skrev noen funksjoner for å gjøre akkurat det jeg vil, men matlabs innebygd filterfunksjon fungerer også ganske bra. Her skriver jeg om 1D og 2D-gjennomsnittsdata. 1D filter kan realiseres ved hjelp av filterfunksjonen. Filterfunksjonen krever minst tre inngangsparametre: tellerkoeffisienten for filteret (b), nevnte koeffisient for filteret (a) og dataene (X) selvfølgelig. Et løpende gjennomsnittfilter kan defineres enkelt ved: For 2D-data kan vi bruke Matlabs filter2-funksjonen. For mer informasjon om hvordan filteret fungerer, kan du skrive: Her er en rask og skitten implementering av et 16 til 16 glidende gjennomsnittsfilter. Først må vi definere filteret. Siden alt vi vil ha er like bidrag fra alle naboer, kan vi bare bruke de funksjonene. Vi deler alt med 256 (1616) siden vi ikke vil endre det generelle nivået (amplitude) av signalet. For å bruke filteret kan vi bare si følgende Nedenfor 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 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 myntene 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) Jeg må beregne et glidende gjennomsnitt over en dataserie, innenfor en for loop. 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. Du kan bruke filter til å finne et løpende gjennomsnitt uten å bruke en forløkke. Dette eksemplet finner det løpende gjennomsnittet av en 16-elementvektor, ved hjelp av en vindustørrelse på 5. 2) Glatt som en del av kurvefiksjonsverktøyskassen (som er tilgjengelig i de fleste tilfeller) glatter du (y) dataene i kolonnevektoren y bruker et glidende gjennomsnittsfilter. Resultatene returneres i kolonnevektoren. Standardspenningen for det bevegelige gjennomsnittet er 5.Moving Average Filter (MA filter) Loading. Det bevegelige gjennomsnittsfilteret er et enkelt Low Pass FIR-filter (Finite Impulse Response) som vanligvis brukes til å utjevne en rekke samplede datasignaler. Det tar M prøver av inngang av gangen og tar gjennomsnittet av disse M-prøvene og produserer et enkelt utgangspunkt. Det er en veldig enkel LPF-struktur (Low Pass Filter) som er nyttig for forskere og ingeniører å filtrere uønsket støyende komponent fra de tiltenkte dataene. Når filterlengden øker (parameteren M), øker utgangens glatthet, mens de skarpe overgangene i dataene blir stadig stumpere. Dette innebærer at dette filteret har utmerket tidsdomene respons, men en dårlig frekvensrespons. MA-filteret utfører tre viktige funksjoner: 1) Det tar M-inngangspunkter, beregner gjennomsnittet av disse M-punktene og produserer et enkelt utgangspunkt 2) På grunn av beregnede beregninger. filteret introduserer en bestemt mengde forsinkelse 3) Filteret fungerer som et lavpassfilter (med dårlig frekvensdomenerespons og et godt tidsdomenesvar). Matlab-kode: Følgende matlab-kode simulerer tidsdomæneresponsen til et M-punkts-flytende gjennomsnittfilter, og viser også frekvensresponsen for forskjellige filterlengder. Time Domain Response: På den første plottet har vi inngangen som går inn i det bevegelige gjennomsnittsfilteret. Inngangen er støyende og målet vårt er å redusere støyen. Neste figur er utgangsresponsen til et 3-punkts Moving Average-filter. Det kan utledes fra figuren at 3-punkts Flytende Gjennomsnitt-filteret ikke har gjort mye for å filtrere ut støyen. Vi øker filterkranene til 51 poeng, og vi kan se at støyen i utgangen har redusert mye, som er avbildet i neste figur. Vi øker kranen videre til 101 og 501, og vi kan observere at selv om støyen er nesten null, blir overgangene slått ut drastisk (observere skråningen på hver side av signalet og sammenligne dem med den ideelle murveggovergangen i vår innsats). Frekvensrespons: Fra frekvensresponsen kan det hevdes at avrullingen er veldig treg og stoppbåndet demper er ikke bra. Gitt dette stoppbåndet demping, klart, det bevegelige gjennomsnittlige filteret kan ikke skille ett bånd med frekvenser fra en annen. Som vi vet at en god ytelse i tidsdomene resulterer i dårlig ytelse i frekvensdomene, og omvendt. Kort sagt, det bevegelige gjennomsnittet er et usedvanlig godt utjevningsfilter (handlingen i tidsdomene), men et uvanlig dårlig lavpassfilter (handlingen i frekvensdomenet) Eksterne lenker: Anbefalte bøker: Primær sidebjelke
Comments
Post a Comment