Gjennomsnittlig filter eller gjennomsnittlig filter. Kategori Digitalt signal og bildebehandling DSP og DIP programvareutvikling. Sammendrag Artikkelen er en praktisk veiledning for gjennomsnittlig filter, eller gjennomsnittlig filterforståelse og implementering. Artikkel inneholder teori, C kildekode, programmeringsinstruksjoner og prøveapplikasjon. 1 Introduksjon til gjennomsnittlig filter eller gjennomsnittlig filter. Gjennomsnittlig filter eller gjennomsnittlig filter er windowed filter av lineær klasse, som jevner signalbildet. Filteret fungerer som lavpass. En grunnleggende ide bak filteret er for ethvert element i signalbildet et gjennomsnitt på tvers av nabolaget For å forstå hvordan det gjøres i praksis, la oss starte med window idea.2 Filter vindu eller mask. La oss forestille deg, bør du lese et brev og det du ser i tekst begrenset av hull i spesiell stencil som dette. 1 Første stencil. Så er resultatet av lesing lydelig t Ok, la oss lese brevet igjen, men ved hjelp av en annen stencil. Fig 2 Andre stencil. Nå resultatet av å lese t er lyd La oss lage det tredje trykket. Fig 3 Tredje stencil. Nå leser du bokstav t som lyd. Hva skjer her For å si det i matematisk språk, gjør du en operasjon som leser over elementstavlet t Og resultatet lyden avhenger av elementet nabobrevene ved siden av t. Og den stencilen, som bidrar til å hente elementet nabolag, er vindu Ja, vinduet er bare en stencil eller et mønster, ved hjelp av hvilket du velger elementet nabolaget et sett med elementer rundt den givne for å hjelpe deg med å avgjøre en annen navnet på filtervinduet er maske 3 i 2D. I tre dimensjoner Tenk på bygging Og nå om rom i den bygningen Rommet er som 3D-vindu, som kutter ut noe underrom fra hele rommet. Du kan finne 3D-vindu i volum voxel bildebehandling. Fig 6 Vindu eller maske av størrelse 3 3 3 i 3D.3 Forstå gjennomsnittlig filter. Nå la oss se hvordan du tar et gjennomsnitt over elementets nabolag Formelen er enkel oppsummering av elementer og deling av summen ved antall elementer Fo For eksempel, la oss beregne et gjennomsnitt for saken, vist i fig. 7.Fig 7 Ta et gjennomsnitt. Og det er alt Ja, vi har bare filtrert 1D-signal med gjennomsnittlig filter La oss lage CV og skrive ned trinn for trinn instruksjoner for behandling av gjennomsnittlig filter. Må filter eller gjennomsnittlig filteralgoritme. Sett et vindu over elementet. Ta en gjennomsnittlig sum opp elementer og del summen av antall elementer. Nå, når vi har algoritmen, er det på tide å skrive noen kode la oss komme ned til programmering.4 1D-middelfilterprogrammering. I denne delen utvikler vi 1D-middelfilter med vindu av størrelse 5 La oss få 1D-signal med lengde N som input. Det første trinnet er å plassere vinduet, gjør vi det ved å bytte indeks av det ledende elementet. Vær oppmerksom på at vi starter med det tredje elementet og fullfører med det siste, men to. Problemet er at vi ikke kan starte med det første elementet, fordi i dette tilfellet er venstre del av filtervinduet tomt. Vi vil diskutere nedenfor, hvordan du løser det problemet. Det andre trinnet er t aking gjennomsnittet, ok. Nå, la oss skrive ned algoritmen som funksjon. Typeelementet kan defineres som.5 Behandling av kanter. For alle vindufilter er det noe problem. Det er kantbehandling. Hvis du plasserer vinduet over første siste element, vil venstre høyre del av vinduet vil være tomt For å fylle gapet, bør signalet bli utvidet. For gjennomsnittlig filter er det en god ide å utvide signalet eller bildet symmetrisk, slik som dette. Så før signalet sendes til vår gjennomsnittlige filterfunksjon, bør signalet utvides La oss skrive ned wrappen, som gjør alle forberedelser. Som du kan se tar vår kode hensyn til noen praktiske problemer. Først og fremst sjekker vi våre inngangsparametere signalet skal ikke være NULL, og signallengden skal være positiv. Andre trinn vi sjekker tilfelle N 1 Denne saken er spesiell en, fordi du bygger en forlengelse vi trenger minst to elementer For signalet med 1 elementlengde er resultatet selve signalet. Vær også oppmerksom på at vårt gjennomsnittlige filter fungerer på plass, hvis utgangsparameterresultatet er NULL. Now la oss tildele minne for signalutvidelse. Og sjekk minneallokering. Jeg mangerer noe for øyeblikket der jeg tar en mengde verdier over tid fra et maskinvarekompass. Dette kompasset er veldig nøyaktig og oppdateres veldig ofte, med det resultat at hvis det Jiggles litt, jeg ender med den merkelige verdien som er vilt inkonsekvent med naboene sine. Jeg vil glatte ut disse verdiene. Etter å ha gjort noe å lese rundt, ser det ut til at det jeg vil ha er et høypassfilter, et lavpassfilter eller et glidende gjennomsnittlig Moving gjennomsnitt jeg kan komme ned med, bare hold en historie om de siste 5 verdiene eller hva som helst, og bruk gjennomsnittet av disse verdiene nedstrøms i koden min, der jeg en gang bare brukte den nyeste verdien. Det burde jeg tenk, glatt ut de jiggles pent, men det synes meg at det er sannsynligvis ganske ineffektivt, og dette er sannsynligvis en av de kjente problemene til de riktige programmene som det er en veldig fin Clever Math løsning. Jeg er imidlertid en av de forferdelige selvlært programmerer s uten en formell utdannelse i alt som er uklart relatert til CompSci eller Math Reading rundt litt, antyder at dette kan være et høyt eller lavt passfilter, men jeg kan ikke finne noe som forklarer i forståelse for en hack som meg, hva effekten av disse algoritmene vil være på en rekke verdier, enn si hvordan matematikken fungerer Svaret som er gitt her, for eksempel, svarer teknisk på spørsmålet mitt, men bare i forståelig forståelse for de som trolig allerede vet hvordan de skal løse problemet. ville være en veldig fin og smart person som kunne forklare hva slags problem dette er, og hvordan løsningene fungerer, forståelig for en kunsteksamen. Skrevet 21. september 10 på 13 01. Hvis ditt bevegelige gjennomsnitt må være lengre i For å oppnå den nødvendige utjevningen, og du ikke trenger noen bestemt form for kjernen, så blir du bedre hvis du bruker et eksponentielt forfallende glidende gjennomsnitt. Deretter velger du liten for å være en passende konstant, for eksempel hvis du velger liten 1- 1 N, det vil ha samme mengde gjennomsnitt som et vindu med størrelse N, men distribueres annerledes over eldre punkter. Uansett, siden neste verdi av glidende gjennomsnitt bare avhenger av den forrige og dataene dine, gjør du ikke må holde en kø eller noe Og du kan tenke på dette som å gjøre noe som, Vel, jeg har et nytt poeng, men jeg tror ikke det virkelig, så jeg skal holde 80 av mitt gamle estimat av målingen, og bare stol på dette nye datapunktet 20 Det er stort sett det samme som å si: Vel, jeg stoler bare på dette nye punktet 20, og jeg skal bruke 4 andre poeng som jeg stoler på i samme mengde, bortsett fra at i stedet for å eksplisitt ta de 4 andre poeng, du antar at gjennomsnittet du gjorde sist var fornuftig, slik at du kan bruke det forrige arbeidet ditt. Ansatt 21 september 10 på 14 27.Hey, jeg vet at dette er 5 år sent, men takk for et fantastisk svar jeg jobber med et spill hvor lyden endres basert på hastigheten din, men på grunn av å kjøre spillet på en slow-ass-datamaskin, ville hastigheten svinger vilt, noe som var fint for styring, men veldig irriterende når det gjelder lyd. Dette var en veldig enkel og billig løsning på noe jeg trodde ville være et veldig komplekst problem. Adam Mar 16 15 20 20. Hvis du prøver å fjerne sporadisk merkelig verdi, er et lavpassfilter det beste av de tre alternativene du har identifisert. Lavpassfiltrene tillater lavhastighetsendringer, for eksempel de som forårsakes ved å rotere et kompass for hånd, mens du avviser høyhastighetsendringer som de forårsaket av støt på veien, for eksempel. Et glidende gjennomsnitt vil trolig ikke være tilstrekkelig, siden effekten av et enkelt blip i dataene dine vil påvirke flere påfølgende verdier, avhengig av størrelsen på det bevegelige gjennomsnittsvinduet. Hvis de ulike verdiene er lett oppdaget, kan du til og med være bedre med en glitch-fjerningsalgoritme som helt ignorerer dem. Her er en gutdiagram som illustrerer. Den første grafen er inngangssignalet, med en ubehagelig glitch. Den andre grafen viser effekten av en 10- prøveflytting gjennomsnittlig Den endelige grafen er en kombinasjon av 10-sample gjennomsnittet og den enkle glitchdeteksjonalgoritmen vist ovenfor Når feilen oppdages, blir 10-sample gjennomsnittet brukt i stedet for den faktiske verdien. Svaret 21 september 10 kl 13 38. Nøyaktig forklart og bonuspoeng for graven Henry Cooke 22 september 10 på 0 50.Wow Sannsynligvis så et så fint svar Muis 4 juni 13 på 9 14. Det bevegelige gjennomsnittet er et lavpassfilternavn 21 okt 13 på 19 36. Prøv å løpe streaming median i stedet kert 25 april kl 22 09. Gjennomsnittlig gjennomsnitt jeg kan komme ned med, men det ser ut til at det er sannsynligvis ganske ineffektivt. Det er egentlig ingen grunn at et glidende gjennomsnitt skal være ineffektivt. Du beholder antall datapunkter du vil ha i noe buffer som en sirkulær kø På hvert nytt datapunkt poperer du den eldste verdien og trekker den fra en sum, og trykker den nyeste og legger den til summen. Så hvert nytt datapunkt innebærer egentlig bare et pop-trykk, et tillegg og en subtraksjon Det bevegelige gjennomsnittet er alltid denne skiftende summen delt med antall verdier i bufferen din. Det blir litt vanskeligere hvis du mottar data samtidig fra flere tråder, men siden dataene kommer fra en maskinvareenhet som virker svært tvilsom for meg. Åh og også forferdelige selvlærte programmerere forener. Det bevegelige gjennomsnittet virket ineffektivt for meg fordi du må lagre en buffer med verdier - bedre å bare gjøre noen Clever Maths med din inngangsverdi og nåværende arbeidsverdi. Jeg tror det er hvordan eksponentiell glidende gjennomsnittlig arbeid. En optimalisering jeg har sett for denne typen glidende gjennomsnitt innebærer å bruke en fastlengde kø en peker til hvor du er i den køen, og bare pakker pekeren rundt med eller en hvis Voila Ingen dyr push push Kraft til amatørene, bror Henry Cooke 22. september 10 på 0 54. Henry For et straight-up bevegelige gjennomsnitt trenger du bare bufferen, slik at du vet hvilken verdi som blir poppet når neste verdi blir presset. Når det er sagt, er den faste lengden køen en peker du beskriver, akkurat det jeg mente med sirkulær kø Det er derfor jeg sa det er ikke ineffektivt Hva syntes du jeg mente Og hvis svaret ditt er en matrise som skifter sine verdier tilbake på hver indeksert fjerning som stdvektor i C-brønnen, så mår jeg så vondt jeg gjør det ikke engang vil snakke med deg lenger Dan Tao 22. september 10 på 1 58. Henry Jeg vet ikke om AS3, men en Java-programmerer har samlinger som CircularQueue til sin disposisjon Jeg er ikke en Java-utvikler, så jeg er sikker på at det finnes bedre eksempler der ute, er det bare det jeg fant fra et raskt Google-søk, som nøyaktig utfører funksjonaliteten vi snakker om, jeg er ganske sikker på at flertallet av mellomstore og lavt nivå språk med standardbiblioteker har noe lignende, f. eks. der er Queue T Anyway Jeg var filosofi selv, så alt er tilgitt. Dan Tao 22. september 10 på 12 44. Et eksponentielt forfallende glidende gjennomsnitt kan beregnes for hånd med bare trenden hvis du bruker de riktige verdiene. Se for en ide om hvordan du gjør dette raskt med en penn og papir hvis du leter etter eksponensielt glatt glidende gjennomsnitt med 10 utjevning Men siden du har en datamaskin, vil du sannsynligvis gjøre binær skifting i motsetning til desimalforskyvning. På denne måten er alt du trenger en variabel for din nåværende verdi og en for gjennomsnittet. Neste gjennomsnittlige kan da beregnes fra that. answered 21 september 10 på 14 39.there sa teknikk kalt en rekkevidde gate som fungerer bra med lav forekomst falske prøver ut fra bruken av en av filterteknikkene nevnt ovenfor flytte gjennomsnittlig, eksponentiell, når du har tilstrekkelig historie en tidskonstant kan du teste den nye, innkommende data-prøven for rimelig, før den blir lagt til i beregningen. noen kunnskaper om den maksimale fornuftige endring av signalet er nødvendig, den råprøve er sammenlignet med den siste utjevnet verdi, og hvis absoluttverdien av den forskjellen er større enn det tillatte området, blir prøven kastet ut eller erstattet med noen heuristiske, for eksempel en prediksjon basert på skrå differensial eller trend prediksjon verdi fra dobbel eksponensiell utjevning. ansvaret 30. april 16 på 6 56.Is det mulig å implementere et bevegelige gjennomsnitt i C uten behov for et vindu av prøver. Jeg har funnet ut at jeg kan optimalisere litt ved å velge en vindusstørrelse det er en kraft av to for å tillate litt skifting i stedet for å dele, men ikke å ha en buffer ville være hyggelig. Det er en måte å uttrykke et nytt, glidende gjennomsnittsresultat bare som en funksjon av det gamle resultatet og den nye prøven. Finn et eksempel Flytende gjennomsnitt, over et vindu på 4 prøver å være. Legg til nytt eksempel eA 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 en lengde N beveger gjennomsnittet du beregner. hvor yn er utgangssignalet og xn er inngangssignalet. Eq 1 kan skrives rekursivt som. Så du må alltid huske prøven x nN for å beregne 2.As påpekt av Conrad Turner , kan du bruke en uendelig lang eksponering ential-vinduet i stedet, som gjør det mulig å beregne utgangen bare fra tidligere utgang og nåværende input. but dette er ikke et standard uvevet glidende gjennomsnitt, men et eksponentielt vektet glidende gjennomsnitt, hvor prøvene i det siste får en mindre vekt, men ved minst i teorien glemmer du aldri noe vekter blir bare mindre og mindre for prøver langt i fortiden. 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å tak i Nåværende avg. Jeg legger deretter 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 totalt. Jeg er ikke en matematiker, men dette virket som en god måte å gjøre det. 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. Og det fungerer bra Bare husk at jo høyere din le ngth jo tregere følger det du vil følge Det kan ikke hende det meste 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. Du kan ha et mellomrom mellom lørdag og de etterfølgende punktene 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 glatt strek dots. answered 16. november 16 kl 23 03.initialiser totalt 0, teller 0 hver gang du ser en ny verdi. Deretter legger du inn en ny newValue, en inkrementtelling, en delt gjennomsnittlig total telling. Dette ville være et bevegelige gjennomsnitt over alle innganger. For å beregne gjennomsnittet over bare de siste 4 inngangene, ville det kreves 4 inputvariables, kanskje å kopiere hver inngang til en eldre inputvariable, og deretter beregne det nye glidende gjennomsnittet som summen av de 4 inputvariablene, delt med 4 høyre skift 2 ville være bra hvis alle inngangene var positive for å gjøre gjennomsnittlig beregning. ansvaret 3. februar 15 kl 4 06.Th på vil faktisk beregne det totale gjennomsnittet og IKKE det bevegelige gjennomsnittet. Etter hvert som tellingen blir større, blir virkningen av en ny inngangsprøve forsinket liten. Hilmar 3. februar kl. 13 53. Ditt svar.2017 Stack Exchange, Inc.
No comments:
Post a Comment