Med Bevegelig Gjennomsnitt Filter Nedir


Er det mulig å implementere et bevegelige gjennomsnitt i C uten at det er behov for et vindu med prøver Ive har funnet ut at jeg kan optimalisere litt ved å velge en vindustørrelse som er en kraft på to for å tillate bitforskyvning i stedet for å dele, men ikke trenger en buffer ville være hyggelig. Er det en måte å uttrykke et nytt glidende gjennomsnittsresultat bare som en funksjon av det gamle resultatet og den nye prøven. Definer et eksempel glidende gjennomsnitt, over et vindu på 4 prøver å være: Legg til ny prøve e: Et glidende gjennomsnitt kan implementeres rekursivt , men for en nøyaktig beregning av det bevegelige gjennomsnittet må du huske den eldste innsatsprøven i summen (dvs. a i eksempelet ditt). For et lengde N bevegelige gjennomsnitt beregner du: hvor yn er utgangssignalet og xn er inngangssignalet. Eq. (1) kan skrives rekursivt som Så du må alltid huske prøven xn-N for å beregne (2). Som påpekt av Conrad Turner, kan du bruke et (uendelig langt) eksponensielt vindu i stedet, som gjør det mulig å beregne utgangen bare fra tidligere utgang og gjeldende inngang: men dette er ikke et standard (uvevet) glidende gjennomsnitt, men eksponentielt vektet glidende gjennomsnitt, hvor prøver tidligere i det siste får en mindre vekt, men (i det minste i teorien) glemmer du aldri noe (vektene blir bare mindre og mindre for prøver langt i det siste). Jeg implementerte et glidende gjennomsnitt uten individuelt elementminne for et GPS-sporingsprogram jeg skrev. Jeg starter med 1 prøve og deler med 1 for å få dagens avg. Jeg legger til en prøve og deler med 2 til den nåværende avg. Dette fortsetter til jeg kommer til lengden av gjennomsnittet. Hver gang etterpå legger jeg til den nye prøven, får gjennomsnittet og fjerner det gjennomsnittet fra totalen. Jeg er ikke en matematiker, men dette virket som en god måte å gjøre det på. Jeg skjønte at det ville slå magen til en ekte matte fyr, men det viser seg at det er en av de aksepterte måtene å gjøre det på. Og det fungerer bra. Bare husk at jo høyere lengden jo tregere følger det du vil følge. Det kan ikke være noe som helst mesteparten av tiden, men når du følger satellitter, hvis du er treg, kan stien være langt fra den faktiske posisjonen, og det vil se dårlig ut. Du kan ha et mellomrom mellom lørdager og de etterfølgende prikkene. Jeg valgte en lengde på 15 oppdatert 6 ganger i minuttet for å få tilstrekkelig utjevning og ikke komme for langt fra den faktiske lette stillingen med glattestrekpunktene. besvart 16 nov 16 kl 23:03 initialiser totalt 0, count0 (hver gang vi ser en ny verdi) En innskriving (scanf), en legger til totalnewValue, ett inkrement (telle), en del av gjennomsnitt (totalt antall) Dette ville være et bevegelige gjennomsnitt over alle innganger For å beregne gjennomsnittet over bare de siste 4 inngangene, ville det kreve 4 inputvariables, kanskje kopiering av hvert inngang til en eldre inputvariable, og deretter beregning av det nye glidende gjennomsnittet. Som summen av de 4 inngangsvariablene delt på 4 (høyre skift 2 ville være bra hvis alle inngangene var positive for å gjøre gjennomsnittlig beregning besvart 3. februar klokken 4:06 som faktisk vil beregne gjennomsnittet og IKKE det bevegelige gjennomsnittet. Etter hvert som tellingen blir større, blir virkningen av en ny inngangsprøve forsvunnet liten ndash Hilmar Feb 3 15 kl 13:53 Ditt svar 2017 Stack Exchange, IncThe Flytende gjennomsnitt som et filter Det bevegelige gjennomsnittet brukes ofte til utjevning av data i nærvær av støy. Det enkle glidende gjennomsnittet blir ikke alltid gjenkjent som Finite Impulse Response (FIR) filter som det er, mens det egentlig er 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åFrekvensrespons av det kjørende gjennomsnittsfiltret Frekvensresponsen til et LTI-system er DTFT av impulsresponsen. Impulsresponsen av et L-prøve-glidende gjennomsnitt er Siden det bevegelige gjennomsnittlige filteret er FIR, reduserer frekvensresponsen til den endelige sum Vi kan bruke den svært nyttige identiteten til å skrive frekvensresponsen som hvor vi har sluppet minus jomega. N 0 og M L minus 1. Vi kan være interessert i størrelsen på denne funksjonen for å avgjøre hvilke frekvenser som kommer gjennom filteret som ikke er overvåket og som er dempet. Nedenfor er et plott av størrelsen på denne funksjonen for L 4 (rød), 8 (grønn) og 16 (blå). Den horisontale aksen varierer fra null til pi radianer per prøve. Legg merke til at frekvensresponsen i alle tre tilfeller har en lowpass-karakteristikk. En konstant komponent (nullfrekvens) i inngangen passerer gjennom filteret uopprettholdt. Visse høyere frekvenser, som pi 2, elimineres helt av filteret. Men hvis hensikten var å designe et lavpassfilter, har vi ikke gjort det veldig bra. Noen av de høyere frekvensene dempes bare med en faktor på ca 110 (for 16 poeng glidende gjennomsnitt) eller 13 (for firepunkts glidende gjennomsnitt). Vi kan gjøre mye bedre enn det. Ovennevnte tegning ble opprettet av følgende Matlab-kode: omega 0: pi400: pi H4 (14) (1-exp (-iomega4)). (1-exp (-iomega)) H8 (18) iomega8)). (1-exp (-iomega)) H16 (116) (1-exp (-iomega16)) (1-exp (-iomega)) plot (omega, abs (H4) abs H16)) akse (0, pi, 0, 1) Opphavsretts kopi 2000- - University of California, BerkeleyMoving Gjennomsnitt i R Så vidt jeg vet, har R ikke en innebygd funksjon for å beregne glidende gjennomsnitt. Ved hjelp av filterfunksjonen kan vi imidlertid skrive en kort funksjon for å flytte gjennomsnitt: Vi kan da bruke funksjonen på data: mav (data) eller mav (data, 11) hvis vi vil spesifisere et annet antall datapunkter enn standard 5-plotting fungerer som forventet: plot (mav (data)). I tillegg til antall datapunkter hvorav gjennomsnittlig, kan vi også endre sidebeskrivelsen av filterfunksjonene: sides2 bruker begge sider, sides1 bruker bare tidligere verdier. Del dette: Post navigasjon Kommentar navigasjon Kommentar navigasjon

Comments