Eksponensiell Bevegelig Gjennomsnitt Lav Pass Filter


Et brukervennlig digitalt filter Det eksponentielle glidende gjennomsnittet (EMA) er en type uendelig impulsrespons (IIR) filter som kan brukes i mange innebygde DSP-applikasjoner. Det krever bare en liten mengde RAM og databehandlingskraft. Hva er et filter filtre kommer i både analog og digital form og eksisterer for å fjerne bestemte frekvenser fra et signal. Et vanlig analogfilter er lavpasfilteret RC vist nedenfor. Analogfiltre kjennetegnes av deres frekvensrespons, det er hvor mye frekvensene blir dempet (størrelsesrespons) og skiftet (fasespons). Frekvensresponsen kan analyseres ved hjelp av en Laplace-transformasjon som definerer en overføringsfunksjon i S-domene. For den ovennevnte kretsen er overføringsfunksjonen gitt av: For R er 1 kilo-ohm og C er lik ett mikrofarad, vises størrelsesresponsen nedenfor. Merk at x-aksen er logaritmisk (hvert kryssmerke er 10 ganger større enn det siste). Y-aksen er i desibel (som er en logaritmisk funksjon av utgangen). Klippfrekvensen for dette filteret er 1000 rad eller 160 Hz. Dette er punktet hvor mindre enn halvparten av effekten ved en gitt frekvens overføres fra inngangen til filterets utgang. Analog filtre må brukes i innebygde konstruksjoner når du sampler et signal ved hjelp av en analog til digital omformer (ADC). ADC tar bare inn frekvenser som er opptil halvparten av samplingsfrekvensen. For eksempel, hvis ADC kjøper 320 prøver per sekund, er filteret over (med en cutofffrekvens på 160Hz) plassert mellom signalet og ADC-inngangen for å forhindre aliasing (hvilket er et fenomen der høyere frekvenser dukker opp i det samplede signalet som lavere frekvenser). Digitale filtre Digitale filtre demper frekvenser i programvare i stedet for å bruke analoge komponenter. Deres implementering inkluderer prøvetaking av analoge signaler med en ADC og deretter applikasjon av en programvarealgoritme. To vanlige designtilnærminger til digital filtrering er FIR-filtre og IIR-filtre. FIR-filtre Finite Impulse Response (FIR) filtre bruker et begrenset antall prøver for å generere utgangen. Et enkelt glidende gjennomsnitt er et eksempel på et lavpass FIR-filter. Høyere frekvenser blir dempet fordi gjennomsnittet utjevner signalet. Filteret er begrenset fordi filterets utgang bestemmes av et begrenset antall inngangsprøver. Som et eksempel, legger et 12 punkts glidende gjennomsnittlig filter opp de 12 siste prøvene, og deler deretter med 12. Utgangen av IIR-filtre bestemmes av (opp til) et uendelig antall inngangssampler. IIR-filtre Infinite Impulse Response (IIR) - filtre er en type digitalt filter hvor produksjonen er inifinetelyin teorien, noe som påvirkes av en inngang. Det eksponentielle glidende gjennomsnittet er et eksempel på et lavpass IIR filter. Eksponentiell flytende gjennomsnittsfilter Et eksponentielt glidende gjennomsnitt (EMA) bruker eksponentielle vekter til hver prøve for å beregne et gjennomsnitt. Selv om dette virker komplisert, er ekvivalent i digital filtreringsparlance som forskjellsligningen for å beregne utdataene enkel. I ligningen nedenfor er y utgangen x er inngangen og alfa er en konstant som setter cutofffrekvensen. For å analysere hvordan dette filteret påvirker frekvensen av utgangen, brukes Z-domeneoverføringsfunksjonen. Størrelsesresponsen er vist nedenfor for alfa lik 0,5. Y-aksen er igjen vist i desibel. X-aksen er logaritmisk fra 0,001 til pi. Den virkelige verdenskortet til x-aksen med null er likspenningen og pi tilsvarer halvparten av samplingsfrekvensen. Eventuelle frekvenser som er større enn halvparten av samplingsfrekvensen blir aliasert. Som nevnt kan et analogt filter sikre nesten alle frekvenser i det digitale signalet er under halvparten av samplingsfrekvensen. EMA-filteret er fordelaktig i innebygde design av to grunner. For det første er det enkelt å justere cutoff frekvensen. Redusering av verdien av alfa vil senke cutofffrekvensen til filteret som illustrert ved å sammenligne ovennevnte alfa 0,5 plot til nedenstående plot hvor alfa 0,1. For det andre er EMA enkelt å kode og krever bare en liten mengde datakraft og minne. Kodeimplementeringen av filteret bruker forskjellligningen. Det er to multipliseringsoperasjoner, og en tilleggsoperasjon for hver output ignorerer operasjonene som kreves for avrunding av fast punktmatematikk. Bare den nyeste prøven må lagres i RAM. Dette er vesentlig mindre enn å bruke et enkelt bevegelig gjennomsnittsfilter med N poeng som krever N multipliserings - og tilleggsoperasjoner samt N prøver som skal lagres i RAM. Følgende kode implementerer EMA-filteret ved hjelp av 32-bit fastpunktmatematikk. Koden nedenfor er et eksempel på hvordan du bruker funksjonen ovenfor. Konklusjon Filter, både analog og digital, er en viktig del av innebygde design. De tillater utviklere å kvitte seg med uønskede frekvenser når de analyserer sensorinngang. For at digitale filtre skal være nyttige, må analogfiltre fjerne alle frekvenser over halvparten av samplingsfrekvensen. Digitale IIR-filtre kan være kraftige verktøy i innebygd design der ressursene er begrensede. Det eksponentielle glidende gjennomsnittet (EMA) er et eksempel på et slikt filter som fungerer godt i innebygde konstruksjoner på grunn av de lave minne - og databehandlingskravene. En enkel og generell metode for å fylle ut manglende data, hvis du har kjøringer med komplette data, er å bruke lineær regresjon. Si at du har 1000 løp på 5 på rad uten at ingen mangler. Sett opp 1000 x 1 vektor y og 1000 x 4 matrise X: Regresjon gir deg 4 tall a b c d som gir best mulig samsvar for dine 1000 rader med data mdash forskjellige data, forskjellig en b c d. Deretter bruker du disse a b c d å estimere (forutsi, interpolere) mangler wt0. (For menneskelige vekter, forventer jeg at abcd skal være rundt 14.) (Det er zillioner av bøker og papirer om regresjon, på alle nivåer. For forbindelsen med interpolering skjønner jeg ikke om en god introduksjon) Lavpass filter Dette er primært notater Det vil ikke være komplett i noen grad. Den eksisterer for å inneholde fragmenter av nyttig informasjon. Pseudokode Det eksponentielt veide glidende gjennomsnittet (EWMA) er navnet på det som trolig er den enkleste digitale, tidsdomene-realiseringen av (første rekkefølge) lowpass på diskrete data. Dette filteret glattes ved hjelp av et lokalt lokalt gjennomsnitt, noe som gjør det til en svak følge av inngangssignalet. Intuitivt vil den reagere langsomt på de raske endringene (høyfrekvensinnholdet) mens det fortsatt følger den generelle tendensen til signalet (lavfrekvensinnholdet). Den veies av en variabel (se x3b1) for å kunne variere følsomheten. I applikasjoner som prøver med jevne mellomrom (for eksempel lyd) kan du relatere x3b1 til frekvensinnhold. I disse tilfellene vil du ofte beregne en filtrert utgangsserie for en inngangsserie ved å løse gjennom en liste som gjør noe som: eller tilsvarende: Sistnevnte skjema kan føles mer intuitivt informativt: endringen i filtrert utgang er proporsjonal med mengden av endre og veid av filterstyrken x3b1. Begge kan bidra til å vurdere hvordan bruk av den siste filtrerte utgangen gir systemets tröghet: En mindre x3b1 (større 1-x3b1 i det tidligere) (betyr også for større RC) betyr at utgangen vil justere mer tregt, og bør vise mindre støy (siden cutoff frekvensen er lavere (verifiser)). En større x3b1 (mindre 1-x3b1) (mindre RC) betyr at utgangen vil justere raskere (har mindre inerti), men være mer følsom overfor støy (siden cutoff-frekvensen er høyere (verifiser)) Siden beregningen er lokal, tilfeller hvor du bare vil ha den nyeste verdien, kan du unngå å lagre et stort utvalg ved å gjøre følgende for hver ny prøve (ofte en rekke ganger på rad, for å sikre at vi justerer nok). I tilfelle ikke-så vanlig prøvetaking er x3b1 mer relatert til tilpasningshastigheten enn frekvensinnholdet. Det er fortsatt relevant, men notatene om frekvensinnhold gjelder mindre strengt. Du vil vanligvis implementere arraymemory som flyter - selv om du returnerer ints - for å unngå problemer som skyldes avrundingsfeil. Mesteparten av problemet: Når alfafile (selv en flytende multiplikasjon) er mindre enn 1, blir den 0 i en (truncatng) cast til et heltall. For eksempel, når alfa er 0,01, vil signalforskjeller mindre enn 100 gjøre for en justering av 0 (via heltallet trunkering), slik at filteret aldri vil justere til den faktiske ADC-verdien. EWMA har ordet eksponentielt i det fordi hver ny filtrert utgang effektivt bruker alle verdiene før den, og effektivt med eksponentielt avtagende vekter. Se wikipedia-koblingene for mer diskusjon. Et grafisk eksempel: Et skjermbilde fra arduinoskop - en bevegelig graf, med de nyeste prøvene til venstre. Råsignalet på toppen er noen få sekunder verdt av en ADC-prøvetaking fra en flytende pin, med en finger som berører det nå og da. De andre er lowpassed versjoner av det, med økende styrker. Noen ting å merke seg om: Den langsomme eksponensielle tilpasningen til trinnlignende responser (som en ladekondensator - raskt innledende, så tregere og langsommere) undertrykking av enkelt store spikesdeviations. at det sikkert er mulig å filtrere for hardt (selv om den dommen avhenger mye av prøvetakingshastigheten og tilpasningsinnholdsfrekvensene din har behov). I det andre bildet kommer full-range-svingningen ut halvveis ikke så mye på grunn av filtrering, men også i stor grad fordi de fleste råprøver rundt det er mettede i hver ende av ADC-serien. På x3b1, x3c4 og cutofffrekvensen Denne artikkelseksjonen er en stub x2014 sannsynligvis en haug med halv-sorterte notater, er ikke godt sjekket, så det kan ha feil biter. (Vær fri til å ignorere, reparere eller fortelle meg) x3b1 er utjevningsfaktoren, teoretisk mellom 0,0 og 1,0, i praksis vanligvis lt0.2 og ofte lt0.1 eller mindre, fordi over det du nesten ikke gjør noen filtrering. I DSP er det ofte basert på: x394 t. regelmessig skrevet dt. tidsintervallet mellom prøvene (gjensidig sampling rate) et valg av tidskonstant x3c4 (tau), aka RC (sistnevnte synes å referere til en motstand-pluss-kondensatorkrets, som også gjør lavpass. Spesielt gir RC tiden som kondensatoren ladet til Hvis du velger en RC nær dt, får du alfa høyere enn 0,5, og også en cutoff-frekvens som ligger nær nyquistfrekvensen (skjer ved 0.666 (verifiser)), som filtrerer ut så lite at det gjør filteret ganske meningsløst. I praksis velger du ofte en RC som er minst noen få multipler av dt, noe som betyr at x3b1 er i størrelsesorden 0,1 eller mindre. Når prøvetaking skjer strenge regelmessig, som for lyd og mange andre DSP-applikasjoner , kuttefrekvensen. aka knefrekvens. er veldefinert, idet: For eksempel, når RC0.002sec, er cutoffet ved 200Hz, 2000Hz og 20000Hz sampling, som gir alfaer på henholdsvis 0,7, 0,2 og 0,024 . (Ved samme samplinghastighet: den nedre alfa er, th e tregere tilpasningen til nye verdier og den lavere effektive cutofffrekvensen). For en førsteordens lowpass: Ved lavere frekvenser er svaret nesten helt flatt. Ved denne frekvensen er responsen -3dB (har begynt å synke i en myk bendknekke) ved høyere frekvenser det faller den på 6dboctave (20dBdecade) Høyere rekkefølgevarianter faller raskere og har et vanskeligere kne. Merk at det også vil være en faseskift som ligger bak inngangen. Det avhenger av frekvensen som begynner tidligere enn amplitudfallet, og vil være -45 grader ved knefrekvensen (verifiser). Arduino eksempel Dette artikelseksjonen er en stub x2014 sannsynligvis en haug med halv-sorterte notater, er ikke godt sjekket, så det kan ha feil biter. (Vær fri til å ignorere, reparere eller fortelle meg) Dette er en enkeltversjon av minnesversjonen, for når du bare er interessert i (siste) utdataverdi. Semi-sortert

Comments