Opprettet onsdag 08. oktober 2008 20:04 Sist oppdatert torsdag 14. mars 2013 01:29 Skrevet av Batuhan Osmanoglu Hits: 41460 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å bra 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. Hva er utjevning og hvordan kan jeg gjøre det? Jeg har en matrise i Matlab som er størrelsesspekteret til et tale signal (størrelsen på 128 poeng på FFT). Hvordan glatter jeg dette ved hjelp av et glidende gjennomsnitt Fra hva jeg forstår, bør jeg ta en vindusstørrelse på et visst antall elementer, ta gjennomsnitt, og dette blir det nye første elementet. Skift deretter vinduet til høyre ved ett element, ta gjennomsnitt som blir det andre elementet, og så videre. Er det virkelig hvordan det fungerer, jeg er ikke sikker på meg selv, siden hvis jeg gjør det, vil jeg i min endelige resultat ha mindre enn 128 elementer. Så hvordan virker det og hvordan hjelper det å glatte datapunktene, eller er det noe annet jeg kan gjøre utjevning av dataene som ble spurt 15. oktober klokken 6:30 migrert fra stackoverflow 15 okt 12 kl 14:51 Dette spørsmålet kom fra vår sted for profesjonelle og entusiast programmerere. for et spektrum vil du sannsynligvis gjennomsnittlig sammen (i tidsdimensjonen) flere spektre i stedet for et løpende gjennomsnitt langs frekvensaksen til et enkeltspektrum ndash endolitt 16. okt. 12 kl. 01:04 endolitt begge er gyldige teknikker. Gjennomsnitt i frekvensdomenet (noen ganger kalt et Danielle Periodogram) er det samme som vinduet i tidsdomene. Gjennomsnittlig antall periodogrammer (quotspectraquot) er et forsøk på å etterligne ensemble-middelverdi som kreves av det sanne periodogrammet (dette kalles Welch Periodogram). Også, som et spørsmål om semantikk, ville jeg hevde at quotsmoothingquot er ikke-kausal lavpassfiltrering. Se Kalman filtrering mot Kalman utjevning, Wiener filtrering v Wiener utjevning, osv. Det er en nontrivial forskjell og det er implementering avhengig. ndash Bryan Dec 12 12 at 19:18 Utjevning kan gjøres på mange måter, men i svært grunnleggende og generelle termer betyr det at du til og med ut et signal ved å blande elementene med naboene. Du smør signalet litt for å kvitte seg med støy. For eksempel vil en veldig enkel utjevningsteknikk være å beregne hvert signalelement f (t) til som 0,8 av den opprinnelige verdien, pluss 0,1 av hver av sine naboer: Legg merke til hvordan multiplikasjonsfaktorene, eller vektene, legger til en. Så hvis signalet er ganske konstant, endrer utjevning ikke mye. Men hvis signalet inneholdt en plutselig rykkende endring, vil bidraget fra naboene bidra til å fjerne den støyen litt. Vektene du bruker i denne omberegningsfunksjonen kan kalles en kjerne. En en-dimensjonal Gauss-funksjon eller en annen grunnkjerne bør gjøre i ditt tilfelle. Fint eksempel på en bestemt form for utjevning: Over: ujevnt signal Under: Glatt signal Eksempler på noen kjerne: I tillegg til det fine svaret på Junuxx vil jeg gjerne slippe noen notater. Utjevning er relatert til filtrering (dessverre ganske vag Wikipedia artikkelen) - du bør velge den jevnere basert på egenskapene. En av mine favoritter er medianfilteret. Dette er et eksempel på et ikke-lineært filter. Den har noen interessante egenskaper, det bevarer kanter og er ganske robust under stor støy. Hvis du har en modell hvordan signalet ditt oppfører seg, er et Kalman-filter verdt å se. Dens utjevning er faktisk en Bayesian maksimal sannsynlighet estimering av signalet basert på observasjoner. besvart 15. okt 12 kl. 11:07 1 for å nevne kalman-filteret ndash Diego Des 13 12 kl 18:48 Utjevning innebærer bruk av informasjon fra nabobilder for å endre forholdet mellom naboprøver. For endelige vektorer, i enden er det ingen nærliggende informasjon til den ene siden. Dine valg er: Ikke glattfilter endene, aksepter en kortere resulterende glatt vektor, sminke data og glatt med det (avhenger av accuracyusefulness av eventuelle spådommer fra endene), eller kanskje bruke forskjellige asymmetriske utjevningskjerner i enden (som ender opp forkorte informasjonsinnholdet i signalet uansett). besvart 15. okt 12 kl 19:44 Andre har nevnt hvordan du gjør utjevning, jeg vil gjerne nevne hvorfor utjevning fungerer. Hvis du overskrider signalet ditt riktig, vil det variere relativt lite fra en prøve til den neste (prøve tidspunkter, piksler, osv.), Og det forventes å ha et generelt, jevnt utseende. Med andre ord inneholder signalet ditt få høye frekvenser, dvs. signalkomponenter som varierer i takt med samplingsfrekvensen din. Likevel blir målingene ofte ødelagt av støy. I en første tilnærming vurderer vi vanligvis støyen til å følge en Gauss-distribusjon med gjennomsnittlig null og en viss standardavvik som bare legges på toppen av signalet. For å redusere støy i signalet vårt, gjør vi vanligvis følgende fire antagelser: Støy er tilfeldig, er ikke korrelert blant prøvene, har et middel på null, og signalet er tilstrekkelig oversamplet. Med disse antagelsene kan vi bruke et glidende gjennomsnittsfilter. Tenk for eksempel tre påfølgende eksempler. Siden signalet er svært oversamplet, kan det underliggende signalet regnes for å endres lineært, noe som betyr at gjennomsnittet av signalet over de tre prøvene vil være lik det sanne signalet ved midtprøven. I motsetning, har støyen null null og er ukorrelert, noe som betyr at gjennomsnittet skal ha en tendens til null. Dermed kan vi bruke et treprøve glidende gjennomsnittsfilter, hvor vi erstatter hver prøve med gjennomsnittet mellom seg selv og de to tilstøtende naboene. Selvfølgelig, jo større vi lager vinduet, desto mer vil støyen gjennomsnittlig ut til null, men jo mindre antar vi at lineæriteten til det sanne signalet holder. Dermed må vi gjøre avslag. Én måte å forsøke på å få det beste fra begge verdener er å bruke et veid gjennomsnitt, hvor vi gir lengre vekk prøver mindre vekt, slik at vi gjennomsnittlige støyeffekter fra større områder, mens vi ikke veier sant signal for mye hvor det avviker fra vår linearitet antagelse. Hvordan du skal legge vektene avhenger av støy, signal og beregningseffektivitet, og selvfølgelig avstanden mellom å bli kvitt støy og kutte inn i signalet. Legg merke til at det har vært mye arbeid gjort de siste årene for å tillate oss å slappe av noen av de fire forutsetningene, for eksempel ved å designe utjevningsordninger med variabel filtervinduer (anisotropisk diffusjon), eller ordninger som egentlig ikke bruker windows i det hele tatt (ikke-lokalt middel). besvart des 27 12 kl 15: 10Hva er utjevning og hvordan kan jeg gjøre det? Jeg har en matrise i Matlab som er størrelsesspekteret til et tale signal (størrelsen på 128 poeng på FFT). Hvordan glatter jeg dette ved hjelp av et glidende gjennomsnitt Fra hva jeg forstår, bør jeg ta en vindusstørrelse på et visst antall elementer, ta gjennomsnitt, og dette blir det nye første elementet. Skift deretter vinduet til høyre ved ett element, ta gjennomsnitt som blir det andre elementet, og så videre. Er det virkelig hvordan det fungerer, jeg er ikke sikker på meg selv, siden hvis jeg gjør det, vil jeg i min endelige resultat ha mindre enn 128 elementer. Så hvordan virker det og hvordan hjelper det å glatte datapunktene, eller er det noe annet jeg kan gjøre utjevning av dataene som ble spurt 15. oktober klokken 6:30 migrert fra stackoverflow 15 okt 12 kl 14:51 Dette spørsmålet kom fra vår sted for profesjonelle og entusiast programmerere. for et spektrum vil du sannsynligvis gjennomsnittlig sammen (i tidsdimensjonen) flere spektre i stedet for et løpende gjennomsnitt langs frekvensaksen til et enkeltspektrum ndash endolitt 16. okt. 12 kl. 01:04 endolitt begge er gyldige teknikker. Gjennomsnitt i frekvensdomenet (noen ganger kalt et Danielle Periodogram) er det samme som vinduet i tidsdomene. Gjennomsnittlig antall periodogrammer (quotspectraquot) er et forsøk på å etterligne ensemble-middelverdi som kreves av det sanne periodogrammet (dette kalles Welch Periodogram). Også, som et spørsmål om semantikk, ville jeg hevde at quotsmoothingquot er ikke-kausal lavpassfiltrering. Se Kalman filtrering mot Kalman utjevning, Wiener filtrering v Wiener utjevning, osv. Det er en nontrivial forskjell og det er implementering avhengig. ndash Bryan Dec 12 12 at 19:18 Utjevning kan gjøres på mange måter, men i svært grunnleggende og generelle termer betyr det at du til og med ut et signal ved å blande elementene med naboene. Du smør signalet litt for å kvitte seg med støy. For eksempel vil en veldig enkel utjevningsteknikk være å beregne hvert signalelement f (t) til som 0,8 av den opprinnelige verdien, pluss 0,1 av hver av sine naboer: Legg merke til hvordan multiplikasjonsfaktorene, eller vektene, legger til en. Så hvis signalet er ganske konstant, endrer utjevning ikke mye. Men hvis signalet inneholdt en plutselig rykkende endring, vil bidraget fra naboene bidra til å fjerne den støyen litt. Vektene du bruker i denne omberegningsfunksjonen kan kalles en kjerne. En en-dimensjonal Gauss-funksjon eller en annen grunnkjerne bør gjøre i ditt tilfelle. Fint eksempel på en bestemt form for utjevning: Over: ujevnt signal Under: Glatt signal Eksempler på noen kjerne: I tillegg til det fine svaret på Junuxx vil jeg gjerne slippe noen notater. Utjevning er relatert til filtrering (dessverre ganske vag Wikipedia artikkelen) - du bør velge den jevnere basert på egenskapene. En av mine favoritter er medianfilteret. Dette er et eksempel på et ikke-lineært filter. Den har noen interessante egenskaper, det bevarer kanter og er ganske robust under stor støy. Hvis du har en modell hvordan signalet ditt oppfører seg, er et Kalman-filter verdt å se. Dens utjevning er faktisk en Bayesian maksimal sannsynlighet estimering av signalet basert på observasjoner. besvart 15. okt 12 kl. 11:07 1 for å nevne kalman-filteret ndash Diego Des 13 12 kl 18:48 Utjevning innebærer bruk av informasjon fra nabobilder for å endre forholdet mellom naboprøver. For endelige vektorer, i enden er det ingen nærliggende informasjon til den ene siden. Dine valg er: Ikke glattfilter endene, aksepter en kortere resulterende glatt vektor, sminke data og glatt med det (avhenger av accuracyusefulness av eventuelle spådommer fra endene), eller kanskje bruke forskjellige asymmetriske utjevningskjerner i enden (som ender opp forkorte informasjonsinnholdet i signalet uansett). besvart 15. okt 12 kl 19:44 Andre har nevnt hvordan du gjør utjevning, jeg vil gjerne nevne hvorfor utjevning fungerer. Hvis du overskrider signalet ditt riktig, vil det variere relativt lite fra en prøve til den neste (prøve tidspunkter, piksler, osv.), Og det forventes å ha et generelt, jevnt utseende. Med andre ord inneholder signalet ditt få høye frekvenser, dvs. signalkomponenter som varierer i takt med samplingsfrekvensen din. Likevel blir målingene ofte ødelagt av støy. I en første tilnærming vurderer vi vanligvis støyen til å følge en Gauss-distribusjon med gjennomsnittlig null og en viss standardavvik som bare legges på toppen av signalet. For å redusere støy i signalet vårt, gjør vi vanligvis følgende fire antagelser: Støy er tilfeldig, er ikke korrelert blant prøvene, har et middel på null, og signalet er tilstrekkelig oversamplet. Med disse antagelsene kan vi bruke et glidende gjennomsnittsfilter. Tenk for eksempel tre påfølgende eksempler. Siden signalet er svært oversamplet, kan det underliggende signalet regnes for å endres lineært, noe som betyr at gjennomsnittet av signalet over de tre prøvene vil være lik det sanne signalet ved midtprøven. I motsetning, har støyen null null og er ukorrelert, noe som betyr at gjennomsnittet skal ha en tendens til null. Dermed kan vi bruke et treprøve glidende gjennomsnittsfilter, hvor vi erstatter hver prøve med gjennomsnittet mellom seg selv og de to tilstøtende naboene. Selvfølgelig, jo større vi lager vinduet, desto mer vil støyen gjennomsnittlig ut til null, men jo mindre antar vi at lineæriteten til det sanne signalet holder. Dermed må vi gjøre avslag. Én måte å forsøke på å få det beste fra begge verdener er å bruke et veid gjennomsnitt, hvor vi gir lengre vekk prøver mindre vekt, slik at vi gjennomsnittlige støyeffekter fra større områder, mens vi ikke veier sant signal for mye hvor det avviker fra vår linearitet antagelse. Hvordan du skal legge vektene avhenger av støy, signal og beregningseffektivitet, og selvfølgelig avstanden mellom å bli kvitt støy og kutte inn i signalet. Legg merke til at det har vært mye arbeid gjort de siste årene for å tillate oss å slappe av noen av de fire forutsetningene, for eksempel ved å designe utjevningsordninger med variabel filtervinduer (anisotropisk diffusjon), eller ordninger som egentlig ikke bruker windows i det hele tatt (ikke-lokalt middel). besvart des 27 12 kl 15: 10Man filter, eller gjennomsnittlig filter Kategori. Programvareutvikling for digitalt signal og bildebehandling (DSP og DIP). Abstrakt. Artikkelen er en praktisk veiledning for gjennomsnittlig filter, eller gjennomsnittlig filterforståelse og - implementering. Artikkelen 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 signalet (bilde). Filteret fungerer som lavpass en. Den grunnleggende ideen bak filteret er for ethvert element av signalet (bildet) et gjennomsnitt over hele nabolaget. For å forstå hvordan det gjøres i praksis, la oss begynne med vinduets ide. 2. Filter vindu eller maske La oss forestille oss, bør du lese et brev og det du ser i tekst begrenset av hull i spesiell stencil som dette. Så, resultatet av lesing er lyd t. Ok, la oss lese brevet igjen, men ved hjelp av en annen stencil: Nå er resultatet av å lese t lyd 240. La oss gjøre det tredje forsøket: Nå leser du brev t som lyd 952. Hva skjer her Å si det I matematisk språk, gjør du en operasjon (lesing) over element (bokstav t). Og resultatet (lyden) avhenger av elementet nabolaget (bokstaver 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 0151 et sett med elementer rundt den givne 0151 for å hjelpe deg med å ta avgjørelse. Et annet navn for filtervindu er maske 0151 maske er en stencil, som skjuler elementer vi ikke betaler oppmerksomhet til. I vårt eksempel er elementet vi opererer på plassert på venstre side av vinduet, men i praksis er dens vanlige posisjon midt i vinduet. La oss se noen vindueksempler. I en dimensjon. Fig. 4. Vindu eller maske av størrelse 5 i 1D. I to dimensjoner. Fig. 5. Vindu eller maske av størrelse 3times3 i 2D. I tre dimensjoner. Tenk på bygging. Og nå mdash om rom i den bygningen. Rommet er som 3D-vindu, noe som skjærer ut noe underrom fra hele rommet. Du kan finne 3D-vindu i volum (voxel) bildebehandling. 3. Forstå gjennomsnittlig filter Nå la oss se hvordan å ldquotake et gjennomsnitt over elementer neighborhoodrdquo. Formelen er enkle 0151 oppsummeringselementer og deler summen av antall elementer. La oss for eksempel 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 trinnvise instruksjoner for behandling av gjennomsnittlig filter. Gjennomsnittlig filter eller gjennomsnittlig filteralgoritme: Sett et vindu over elementet. Ta en gjennomsnittlig oppsummeringselement på 0151 og del summen av antall elementer. Nå, når vi har algoritmen, er det på tide å skrive noen kode mdash la oss komme ned til programmering. 4. 1D gjennomsnittlig filterprogrammering I denne delen utvikler vi 1D-middelfilter med vindu med størrelse 5. La oss få 1D-signal med lengde N som inngang. Det første trinnet er å plassere vinduet 0151, vi gjør det ved å endre indeksen for det ledende elementet: Vær oppmerksom på at vi starter med det tredje elementet og avsluttes 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 dette problemet. Det andre trinnet tar gjennomsnittet, ok: Nå, la oss skrive ned algoritmen som funksjon: Typeelementet kan defineres som: 5. Behandling av kanter For alle vindusfiltre er det noe problem. Det er kanten behandling. Hvis du plasserer vinduet over første (siste) elementet, vil venstre (høyre) del av vinduet være tomt. For å fylle gapet, bør signalet forlenges. For gjennomsnittlig filter er det god ide å utvide signal eller bilde symmetrisk, slik: 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 ser, tar vår kode hensyn til noen praktiske problemer. Først og fremst sjekker vi innspillparametrene 0151 signalet skal ikke være NULL, og signallengden skal være positiv: Andre trinn 0151 vi sjekker tilfelle N1. Denne saken er spesiell en, for å bygge utvidelse trenger vi 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. La oss nå tildele minne for signalutvidelse. Og sjekk minneallokering.
No comments:
Post a Comment