Monday 20 November 2017

Moving Gjennomsnittet Konvolusjon


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 som vanligvis brukes til å undertrykke støy av et signal: vi setter verdien av hvert punkt til gjennomsnitt 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: Flytende gjennomsnitt som et filter Det bevegelige gjennomsnittet brukes ofte til å utjevne data i nærvær av støy. Det enkle glidende gjennomsnittet blir ikke alltid gjenkjent som FIT-filteret (Finite Impulse Response), det er det, men det er faktisk et av de vanligste filtre i signalbehandling. Ved å behandle det som et filter, kan det sammenlignes med f. eks. Windowed-sinc filtre (se artiklene på lavpass, høypass og bandpass og bandavvisningsfiltre for eksempler på dem). Den store forskjellen med de filtre er at det bevegelige gjennomsnittet er egnet for signaler som den nyttige informasjonen er inneholdt i tidsdomene. hvorav utjevningsmålinger ved gjennomsnittsverdi er et godt eksempel. Windowed-sinc filtre, derimot, er sterke utøvere i frekvensdomene. med utjevning i lydbehandling som et typisk eksempel. Det er en mer detaljert sammenligning av begge typer filtre i Time Domain vs Frekvensdomenes ytelse av filtre. Hvis du har data som både tid og frekvensdomene er viktige for, kan du kanskje se på Variasjoner på Moving Average. som presenterer en rekke vektede versjoner av det bevegelige gjennomsnittet som er bedre på det. Det bevegelige gjennomsnittet av lengden (N) kan defineres som skrevet som det typisk blir implementert, med den nåværende utgangsprøven som gjennomsnittet av de tidligere (N) - prøver. Sett som et filter, utfører det bevegelige gjennomsnitt en konvolusjon av inngangssekvensen (xn) med en rektangulær puls av lengde (N) og høyde (1N) (for å gjøre området for pulsen, og dermed forsterkningen av filteret , en ). I praksis er det best å ta (N) merkelig. Selv om et glidende gjennomsnitt kan også beregnes ved å bruke et jevnt antall prøver, har det en fordel at forsinkelsen av filteret vil være et heltall antall prøver ved bruk av en merkelig verdi for (N) siden forsinkelsen av et filter med (N) prøvene er nøyaktig ((N-1) 2). Det bevegelige gjennomsnittet kan deretter justeres nøyaktig med de opprinnelige dataene ved å skifte det med et heltall antall prøver. Time Domain Siden det bevegelige gjennomsnittet er en konvolusjon med en rektangulær puls, er frekvensresponsen en sinc-funksjon. Dette gjør det noe som det dobbelte av windowed-sinc filteret, siden det er en konvolusjon med en sinc puls som resulterer i en rektangulær frekvensrespons. Det er denne sync frekvensrespons som gjør det bevegelige gjennomsnittet en dårlig utøver i frekvensdomenet. Det virker imidlertid veldig bra i tidsdomene. Derfor er det perfekt å glatte data for å fjerne støy mens du samtidig holder et raskt trinnsvar (Figur 1). For den typiske Additive White Gaussian Noise (AWGN) som ofte antas, har gjennomsnittlige (N) prøver effekten av å øke SNR med en faktor (sqrt N). Siden støyen for de enkelte prøvene er ukorrelert, er det ingen grunn til å behandle hver prøve forskjellig. Derfor vil det bevegelige gjennomsnittet, som gir hver prøve samme vekt, bli kvitt den maksimale mengden støy for en gitt trinnresponsskarphet. Gjennomføring Fordi det er et FIR-filter, kan det bevegelige gjennomsnittet implementeres gjennom konvolusjon. Det vil da ha samme effektivitet (eller mangel på det) som alle andre FIR-filter. Det kan imidlertid også implementeres rekursivt, på en svært effektiv måte. Det følger direkte fra definisjonen at denne formelen er resultatet av uttrykkene for (yn) og (yn1), det vil si hvor vi legger merke til at forandringen mellom (yn1) og (yn) er at et ekstra uttrykk (xn1N) vises på slutten, mens uttrykket (xn-N1N) er fjernet fra begynnelsen. I praktiske anvendelser er det ofte mulig å utelate divisjonen med (N) for hvert begrep ved å kompensere for den resulterende gevinsten av (N) på et annet sted. Denne rekursive gjennomføringen vil bli mye raskere enn konvolusjon. Hver ny verdi av (y) kan beregnes med bare to tillegg, i stedet for (N) tilleggene som ville være nødvendige for en enkel implementering av definisjonen. En ting å se etter med en rekursiv implementering er at avrundingsfeil vil samle seg. Dette kan eller ikke kan være et problem for søknaden din, men det innebærer også at denne rekursive implementeringen faktisk vil fungere bedre med et heltall implementering enn med flytende punktnumre. Dette er ganske uvanlig, siden en flytende punktimplementering vanligvis er enklere. Konklusjonen av alt dette må være at du aldri bør undervurdere bruken av det enkle glidende gjennomsnittsfilteret i signalbehandlingsprogrammer. Filter designverktøy Denne artikkelen er utfylt med et filterdesignverktøy. Eksperimenter med forskjellige verdier for (N) og visualiser de resulterende filtrene. Prøv det nå Bruk 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 tre-dagers glidende gjennomsnitt fra bunnen til toppen av matrisen. Jeg har oppgitt koden min: Gitt følgende matrise a og maske: Jeg har prøvd å implementere conv kommandoen, men jeg mottar en feil. Her er conv kommandoen jeg har prøvd å bruke på 2. kolonne av matrise a: Utgangen jeg ønsker er gitt i følgende matrise: Hvis du har noen forslag, vil jeg sette stor pris på det. Takk for kolonne 2 i matrisen a, beregner jeg 3-dagers glidende gjennomsnitt som følger og plasserer resultatet i kolonne 4 i matrise a (jeg omdøpt matrise a som 39desiredOutput39 bare for illustrasjon). 3-dagers gjennomsnittet av 17, 14, 11 er 14 det 3-dagers gjennomsnittet på 14, 11, 8 er 11 3-dagers gjennomsnittet av 11, 8, 5 er 8 og 3-dagers gjennomsnittet 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 begynner nederst. Den 39 ugyldige 39-utgangen vil ikke bli vist før minst 17, 14 og 11. Forhåpentligvis er dette fornuftig ndash Aaron 12. juni kl 13:28 Generelt vil det hjelpe hvis du vil vise feilen. I dette tilfellet gjør du to ting feil: Først må fellingen din deles med tre (eller lengden på det bevegelige gjennomsnittet). For det andre, merk størrelsen på c. Du kan ikke bare passe inn i en. Den typiske måten å få et bevegelige gjennomsnitt på, ville være å bruke samme: men det ser ikke ut som du vil. I stedet er du nødt til å bruke et par linjer: Jeg ser etter litt veiledning om bruk av CONVN for å beregne bevegelige gjennomsnitt i en dimensjon på en 3d-matrise. Jeg blir litt opptatt av å flippe kjernen under hetten og håper noen kan klare oppførselen for meg. En lignende post som fortsatt har meg litt forvirret, er her: Jeg har daglige elve - og værflytdata for et vannområde på forskjellige kildeplasser. Så matrisen er som så, dim 1 (radene) representerer hvert område dim 2 (kolonnene) representerer datoen dim 3 (sidene) representerer forskjellig type måling (elvhøyde, flyt, nedbør, etc.) Målet er å prøve å bruke CONVN til å ta et 21 dagers glidende gjennomsnitt på hvert område, for hvert observasjonspunkt for hver variabel. Som jeg forstår det, burde jeg bare kunne bruke aa kjernen, for eksempel: Jeg prøvde å spille rundt og opprettet en annen kjerne som også skulle fungere (tror jeg) og sette ker2 som: Resultatene stemmer ikke helt sammen og jeg lurer på om jeg har dimensjoner feil her for kjernen. Enhver veiledning er høyt verdsatt. BTW, du har en symmetrisk kjernen, og så flipping burde ikke ha noen effekt på konvoluttutgangen. Det du har spesifisert er en standard bevegelig gjennomsnittlig kjernekode, og så skal konvolusjon fungere for å finne det bevegelige gjennomsnittet som du forventer. men jeg er litt forvirret fordi du sa det ovenstående virker ikke ndash rayryeng 31. mai kl. 20:17 Det er helt opp til deg :). Spørsmålet du har er en gyldig (ingen ordspill ment) som reiser opp mange mennesker. Hvis du vil at den skal bli, kan jeg skrive et svar som oppsummerer det vi snakket om. Hvis du vil trekke inn slette svaret ditt, er det ikke noe problem i det hele tatt. Gi meg beskjed om hva du vil gjøre ndash rayryeng 31. mai kl. 20:39 Dømmer fra konteksten av spørsmålet ditt, har du en 3D-matrise, og du vil finne det bevegelige gjennomsnittet av hver rad uavhengig av alle 3D-stykker. Koden ovenfor skal fungere (det første tilfellet). Det gyldige flagget returnerer imidlertid en matrise hvis størrelse er gyldig i forhold til konvoluttens grenser. Ta en titt på det første punktet i innlegget du koblet til for flere detaljer. Spesielt vil de første 21 oppføringene for hver rad mangle på grunn av gyldig flagg. Dens eneste når du kommer til den 22. inngangen til hver rad, blir konvolusjonskjernen helt inne i en rad av matrisen, og fra det punktet får du gyldige resultater (ingen ordspill er ment). Hvis du ønsker å se disse oppføringene ved grensene, må du bruke det samme flagget hvis du vil opprettholde samme størrelsesmatrise som inngangen eller hele flagget (som er standard) som gir deg størrelsen på utgangen som starter fra de mest ekstreme ytre kantene, men husk at det bevegelige gjennomsnittet vil bli gjort med en haug med nuller, og derfor vil de første 21 oppføringene ikke være det du forventer uansett. Imidlertid, hvis jeg tolker det du spør, er gyldig flagg det du vil, men husk at du vil ha 21 oppføringer manglet for å imøtekomme for kantsaker. Alt i alt skal koden din fungere, men vær forsiktig med hvordan du tolker resultatene. BTW, du har en symmetrisk kjernen, og så flipping burde ikke ha noen effekt på konvoluttutgangen. Det du har spesifisert er en standard bevegelig gjennomsnittlig kjernekode, og så skal konvolusjon fungere for å finne det bevegelige gjennomsnittet som du forventer.

No comments:

Post a Comment