Skapad onsdagen den 08 oktober 2008 20:04 Senast uppdaterad den 14 mars 2013 01:29 Skriven av Batuhan Osmanoglu Hits: 41460 Flyttande medelvärde I Matlab Ofta befinner jag mig själv att behöva medelvärda data som jag måste minska bullret lite bit. Jag skrev några funktioner för att göra exakt vad jag vill, men matlabs inbyggda filterfunktion fungerar ganska bra också. Här skriver jag om 1D och 2D-medelvärde för data. 1D-filter kan realiseras med hjälp av filterfunktionen. Filterfunktionen kräver minst tre ingångsparametrar: täljarkoefficienten för filtret (b), nämnarkoefficienten för filtret (a) och data (X) förstås. Ett löpande medelfilter kan definieras enkelt genom: För 2D-data kan vi använda Matlabs filter2-funktionen. För mer information om hur filtret fungerar kan du skriva: Här är en snabb och smutsig implementering av ett 16 med 16 glidande medelfilter. Först måste vi definiera filtret. Eftersom allt vi vill ha är lika stort bidrag från alla grannar kan vi bara använda dem. Vi dela allt med 256 (1616) eftersom vi inte vill ändra signalens generella nivå (amplitud). För att applicera filtret kan vi helt enkelt säga följande Nedan är resultaten för fas av ett SAR-interferogram. I detta fall är området i Y-axeln och Azimuth är mappad på X-axeln. Filtret var 4 pixlar brett i Räckvidd och 16 pixlar vid Azimuth. Vad är utjämning och hur kan jag göra det? Jag har en matris i Matlab som är magnitudspektrumet för en talssignal (storleken på 128 punkter i FFT). Hur glattar jag det här med ett glidande medelvärde Från vad jag förstår borde jag ta en fönsterstorlek på ett visst antal element, ta medeltal och det blir det nya 1: a elementet. Skift sedan fönstret till höger genom ett element, ta medelvärdet som blir det andra elementet och så vidare. Är det verkligen hur det fungerar, jag är inte säker på mig själv, eftersom om jag gör det, får jag i mitt slutresultat mindre än 128 element. Så hur fungerar det och hur hjälper det att släta datapunkterna Eller är det något annat sätt jag kan göra utjämning av data som frågades 15 okt 12 kl 6:30 migrerade från stackoverflow 15 okt 12 kl 14:51 Denna fråga kom från vår plats för professionell och entusiast programmerare. för ett spektrum vill du antagligen medelvärde (i tidsdimensionen) multipla spektra i stället för ett löpande medelvärde längs frekvensaxeln för ett enda spektrum ndash endolit 16 okt 12 vid 1:04 endolit båda är giltiga tekniker. Medelvärde i frekvensdomänen (ibland kallad Danielle Periodogram) är densamma som fönsterrutan i tidsdomänen. Medelvärdet av flera periodogram (quotspectraquot) är ett försök att efterlikna det genomsnittliga samlingsvärdet som krävs av det verkliga periodogrammet (detta kallas Welch Periodogram). Också, som en fråga om semantik, skulle jag hävda att quotsmoothingquot är icke-orsaklig lågpassfiltrering. Se Kalman filtrering mot Kalman utjämning, Wiener filtrering v Wiener utjämning, etc. Det är en nontrivial skillnad och det är genomförandeberoende. ndash Bryan Dec 12 12 på 19:18 Utjämning kan göras på många sätt, men i mycket grundläggande och allmänna termer betyder det att du ens ut en signal genom att blanda dess element med sina grannar. Du smörjer signalen lite för att bli av med ljud. Exempelvis skulle en mycket enkel utjämningsteknik vara att räkna om varje signalelement f (t) till som 0,8 av det ursprungliga värdet plus 0,1 av var och en av sina grannar: Observera hur multiplikationsfaktorerna eller vikterna lägger till en. Så om signalen är ganska konstant ändras inte utjämningen mycket. Men om signalen innehöll en plötslig jerky förändring, kommer bidraget från sina grannar att hjälpa till att rensa upp det bullret lite. De vikter du använder i denna omräkningsfunktion kan kallas en kärna. En endimensionell Gaussisk funktion eller någon annan grundläggande kärna borde göra i ditt fall. Trevligt exempel på en viss typ av utjämning: Ovan: osmoothad signal Nedan: Glatt signal Exempel på några kärnor: Förutom det snygga svaret på Junuxx skulle jag vilja släppa några noteringar. Utjämning är relaterad till filtrering (tyvärr ganska vag Wikipedia artikeln) - du borde välja en mjukare baserad på dess egenskaper. En av mina favoriter är medianfiltret. Detta är ett exempel på ett icke-linjärt filter. Det har några intressanta egenskaper, det bevarar kanterna och är ganska robust under stort buller. Om du har en modell hur din signal beter sig är ett Kalman-filter värt en titt. Dess utjämning är faktiskt en Bayesian maximal sannolikhetsbedömning av signalen baserat på observationer. svarat 15 okt 12 kl 11:07 1 för att nämna kalman-filteret ndash Diego dec 13 12 kl 18:48 Utjämning innebär att man använder information från närliggande prover för att ändra förhållandet mellan angränsande prover. För ändliga vektorer, i ändarna finns det ingen angränsande information till ena sidan. Dina val är: Do not smoothfilter ändarna, acceptera en kortare resulterande slät vektor, smink data och släta med det (beror på precisionen av eventuella förutsägelser utanför ändarna), eller kanske använda olika asymmetriska utjämningskärnor i ändarna (vilket hamnar förkorta informationsinnehållet i signalen ändå). svarat 15 okt 12 kl 19:44 Andra har nämnt hur du gör utjämning, jag gillar att nämna varför utjämning fungerar. Om du korrekt överskrider din signal, kommer den att variera relativt lite från ett prov till nästa (provtidpunkter, pixlar osv.) Och det förväntas ha ett övergripande jämnt utseende. Med andra ord innehåller din signal få höga frekvenser, dvs signalkomponenter som varierar med en takt som liknar din samplingsfrekvens. Ändå är mätningar ofta korrumperade av brus. I en första approximation betraktar vi vanligtvis bruset att följa en Gauss-fördelning med medel noll och en viss standardavvikelse som helt enkelt läggs ovanpå signalen. För att minska bruset i vår signal gör vi vanligtvis följande fyra antaganden: bruset är slumpmässigt, är inte korrelerat bland prover, har ett medelvärde av noll och signalen är tillräckligt överskattad. Med dessa antaganden kan vi använda ett glidande medelfilter. Tänk exempelvis tre sammanhängande prover. Eftersom signalen är mycket översamplad kan den underliggande signalen anses förändras linjärt, vilket innebär att medelvärdet av signalen över de tre proven skulle motsvara den sanna signalen vid mittenprovet. Däremot har bullret medelvärdet noll och är okorrelerat, vilket innebär att dess genomsnitt skulle vara noll. Således kan vi tillämpa ett treprov glidande medelfilter, där vi byter ut varje prov med genomsnittet mellan sig själv och dess två angränsande grannar. Självklart ju ju större vi gör fönstret, desto mer kommer bullret att vara genomsnittligt till noll, men ju mindre antas vi att den sanna signalen är linjär. Således måste vi göra en avvägning. Ett sätt att försöka få det bästa av båda världarna är att använda ett vägt genomsnitt, där vi ger längre bortprover mindre vikter, så att vi genomsnittliga bullerffekter från större områden samtidigt som vi inte väger sant signal för mycket där den avviker från vår linjäritet antagande. Hur du ska lägga vikterna beror på brus, signal och beräkningseffektivitet, och naturligtvis avvägningen mellan att bli av med bruset och skär in i signalen. Observera att det har gjorts mycket arbete under de senaste åren för att tillåta oss att koppla av några av de fyra antagandena, till exempel genom att utforma utjämningssystem med variabla filterfönster (anisotropisk diffusion) eller system som inte alls använder Windows alls (icke-lokalt medel). svarade dec 27 12 på 15: 10What är utjämning och hur kan jag göra det Jag har en matris i Matlab som är magnitudspektrumet för en talssignal (storleken på 128 punkter i FFT). Hur glattar jag det här med ett glidande medelvärde Från vad jag förstår borde jag ta en fönsterstorlek på ett visst antal element, ta medeltal och det blir det nya 1: a elementet. Skift sedan fönstret till höger genom ett element, ta medelvärdet som blir det andra elementet och så vidare. Är det verkligen hur det fungerar, jag är inte säker på mig själv, eftersom om jag gör det, får jag i mitt slutresultat mindre än 128 element. Så hur fungerar det och hur hjälper det att släta datapunkterna Eller är det något annat sätt jag kan göra utjämning av data som frågades 15 okt 12 kl 6:30 migrerade från stackoverflow 15 okt 12 kl 14:51 Denna fråga kom från vår plats för professionell och entusiast programmerare. för ett spektrum vill du antagligen medelvärde (i tidsdimensionen) multipla spektra i stället för ett löpande medelvärde längs frekvensaxeln för ett enda spektrum ndash endolit 16 okt 12 vid 1:04 endolit båda är giltiga tekniker. Medelvärde i frekvensdomänen (ibland kallad Danielle Periodogram) är densamma som fönsterrutan i tidsdomänen. Medelvärdet av flera periodogram (quotspectraquot) är ett försök att efterlikna det genomsnittliga samlingsvärdet som krävs av det verkliga periodogrammet (detta kallas Welch Periodogram). Också, som en fråga om semantik, skulle jag hävda att quotsmoothingquot är icke-orsaklig lågpassfiltrering. Se Kalman filtrering mot Kalman utjämning, Wiener filtrering v Wiener utjämning, etc. Det är en nontrivial skillnad och det är genomförandeberoende. ndash Bryan Dec 12 12 på 19:18 Utjämning kan göras på många sätt, men i mycket grundläggande och allmänna termer betyder det att du ens ut en signal genom att blanda dess element med sina grannar. Du smörjer signalen lite för att bli av med ljud. Exempelvis skulle en mycket enkel utjämningsteknik vara att räkna om varje signalelement f (t) till som 0,8 av det ursprungliga värdet plus 0,1 av var och en av sina grannar: Observera hur multiplikationsfaktorerna eller vikterna lägger till en. Så om signalen är ganska konstant ändras inte utjämningen mycket. Men om signalen innehöll en plötslig jerky förändring, kommer bidraget från sina grannar att hjälpa till att rensa upp det bullret lite. De vikter du använder i denna omräkningsfunktion kan kallas en kärna. En endimensionell Gaussisk funktion eller någon annan grundläggande kärna borde göra i ditt fall. Trevligt exempel på en viss typ av utjämning: Ovan: osmoothad signal Nedan: Glatt signal Exempel på några kärnor: Förutom det snygga svaret på Junuxx skulle jag vilja släppa några noteringar. Utjämning är relaterad till filtrering (tyvärr ganska vag Wikipedia artikeln) - du borde välja en mjukare baserad på dess egenskaper. En av mina favoriter är medianfiltret. Detta är ett exempel på ett icke-linjärt filter. Det har några intressanta egenskaper, det bevarar kanterna och är ganska robust under stort buller. Om du har en modell hur din signal beter sig är ett Kalman-filter värt en titt. Dess utjämning är faktiskt en Bayesian maximal sannolikhetsbedömning av signalen baserat på observationer. svarat 15 okt 12 kl 11:07 1 för att nämna kalman-filteret ndash Diego dec 13 12 kl 18:48 Utjämning innebär att man använder information från närliggande prover för att ändra förhållandet mellan närliggande prover. För ändliga vektorer, i ändarna finns det ingen angränsande information till ena sidan. Dina val är: Do not smoothfilter ändarna, acceptera en kortare resulterande slät vektor, smink data och släta med det (beror på precisionen av eventuella förutsägelser utanför ändarna), eller kanske använda olika asymmetriska utjämningskärnor i ändarna (vilket hamnar förkorta informationsinnehållet i signalen ändå). svarat 15 okt 12 kl 19:44 Andra har nämnt hur du gör utjämning, jag gillar att nämna varför utjämning fungerar. Om du korrekt överskrider din signal, kommer den att variera relativt lite från ett prov till nästa (provtidpunkter, pixlar osv.) Och det förväntas ha ett övergripande jämnt utseende. Med andra ord innehåller din signal få höga frekvenser, dvs signalkomponenter som varierar med en takt som liknar din samplingsfrekvens. Ändå är mätningar ofta korrumperade av brus. I en första approximation betraktar vi vanligtvis bruset att följa en Gauss-fördelning med medel noll och en viss standardavvikelse som helt enkelt läggs ovanpå signalen. För att minska bruset i vår signal gör vi vanligtvis följande fyra antaganden: bruset är slumpmässigt, är inte korrelerat bland prover, har ett medelvärde av noll och signalen är tillräckligt överskattad. Med dessa antaganden kan vi använda ett glidande medelfilter. Tänk exempelvis tre sammanhängande prover. Eftersom signalen är mycket översamplad kan den underliggande signalen anses förändras linjärt, vilket innebär att medelvärdet av signalen över de tre proven skulle motsvara den sanna signalen vid mittenprovet. Däremot har bullret medelvärdet noll och är okorrelerat, vilket innebär att dess genomsnitt skulle vara noll. Således kan vi tillämpa ett treprov glidande medelfilter, där vi byter ut varje prov med genomsnittet mellan sig själv och dess två angränsande grannar. Självklart ju ju större vi gör fönstret, desto mer kommer bruset att bli genomsnittligt till noll, men ju mindre antar vi att den sanna signalen är linjär. Således måste vi göra en avvägning. Ett sätt att försöka få det bästa av båda världarna är att använda ett vägt genomsnitt, där vi ger längre bortprover mindre vikter, så att vi genomsnittliga bullerffekter från större områden samtidigt som vi inte väger sant signal för mycket där den avviker från vår linjäritet antagande. Hur du ska lägga vikterna beror på brus, signal och beräkningseffektivitet, och naturligtvis avvägningen mellan att bli av med bruset och skär in i signalen. Observera att det har gjorts mycket arbete under de senaste åren för att tillåta oss att koppla av några av de fyra antagandena, till exempel genom att utforma utjämningssystem med variabla filterfönster (anisotropisk diffusion) eller system som inte alls använder Windows alls (icke-lokalt medel). svarat dec 27 12 på 15: 10Man filter eller medelfilter Kategori. Digital signal - och bildbehandling (DSP och DIP) mjukvaruutveckling. Abstrakt. Artikeln är en praktisk guide för medelfilter, eller genomsnittlig filterförståelse och implementering. Artikeln innehåller teori, C-källkod, programmeringsinstruktioner och provapplikation. 1. Inledning till medelfilter, eller medelfilter Medelfilter. eller medelfilter är windowed-filter av linjär klass, som släpper ut signalen (bild). Filtret fungerar som lågpass en. Den grundläggande tanken bakom filteret är att någon del av signalen (bilden) tar ett medelvärde över hela sitt grannskap. För att förstå hur det görs i praktiken, låt oss börja med fönsteridee. 2. Filterfönster eller mask Låt oss föreställa oss att du borde läsa ett brev och vad du ser i text begränsad av hål i speciell stencil så här. Så, resultatet av behandlingen är ljudet t. Ok, låt oss läsa brevet igen, men med hjälp av en annan stencil: Nu är resultatet av att läsa t ljud 240. Låt oss göra det tredje försöket: Nu läser du bokstaven t som ljud 952. Vad händer här Att säga det I matematiskt språk gör du en operation (läsning) över elementet (bokstav t). Och resultatet (ljudet) beror på elementets grannskap (bokstäver bredvid t). Och den stencilen, som hjälper till att hämta elementet grannskap, är fönster Ja, fönstret är bara en stencil eller ett mönster, genom vilket du väljer elementet grannskapet 0151 en uppsättning av element runt den givna 0151 för att hjälpa dig att fatta beslut. Ett annat namn för filterfönstret är mask 0151 mask är en stencil, som döljer element vi inte uppmärksammar på. I vårt exempel är det element vi arbetar på placerat längst till vänster i fönstret, men i praktiken är dess vanliga läge mitt i fönstret. Låt oss se några fönster exempel. I en dimension. Fig. 4. Fönster eller mask av storlek 5 i 1D. I två dimensioner. Fig. 5. Fönster eller mask av storlek 3times3 i 2D. I tre dimensioner. Tänk på att bygga. Och nu mdash om rum i den byggnaden. Rummet är som 3D-fönster, vilket skär ner en del delrum från hela byggnaden. Du kan hitta 3D-fönster i volym (voxel) bildbehandling. 3. Förstå genomsnittliga filter Nu får vi se hur man ldquotake ett genomsnitt över element neighborhoodredquo. Formeln är enkla 0151 sammanfatta element och dela summan av antalet element. Låt oss exempelvis beräkna ett medelvärde för fallet, som visas i fig. 7. Fig. 7. Med ett medelvärde. Och det är allt. Ja, vi har bara filtrerat 1D-signal med medelfilter. Låt oss göra CV och skriva ned steg-för-steg-instruktioner för bearbetning med medelfilter. Medelfilter eller medelfilteralgoritm: Lägg ett fönster över elementet Ta en genomsnittlig summa upp för 0151 och dela summan av antalet element. Nu när vi har algoritmen är det dags att skriva lite kod mdash låt oss komma ner till programmering. 4. 1D-medelfilterprogrammering I detta avsnitt utvecklar vi 1D-medelfilter med fönster av storlek 5. Låt oss ha 1D-signal med längd N som ingång. Det första steget är att placera fönstret 0151 så gör vi det genom att ändra indexet på det ledande elementet: Var uppmärksam på att vi börjar med det tredje elementet och slutar med det sista men två. Problemet är att vi inte kan börja med det första elementet, eftersom det här är den vänstra delen av filterfönstret tomt. Vi kommer att diskutera nedan, hur man löser det problemet. Det andra steget tar medeltalet ok: Låt oss nu skriva ner algoritmen som funktion: Typelementet kan definieras som: 5. Behandla kanter För alla fönsterfilter finns det något problem. Det är kantbehandling. Om du placerar fönstret över första (sista) elementet kommer den vänstra (högra) delen av fönstret att vara tomt. För att fylla gapet bör signalen utökas. För medelfilter är det en bra idé att förlänga signalen eller bilden symmetriskt så här: Så innan signalet skickas till vår genomsnittliga filterfunktion, ska signalen förlängas. Låt oss skriva ner omslaget, vilket gör alla förberedelser. Som du kan se tar vår kod hänsyn till några praktiska problem. Först och främst kontrollerar vi våra ingångsparametrar 0151-signalen bör inte vara NULL, och signallängden ska vara positiv: Andra steg 0151 kontrollerar vi fall N1. Det här fallet är speciellt, för att bygga tillägg behöver vi minst två delar. För signalen med 1 elementlängd är resultatet själva signalen. Också uppmärksamma, vårt genomsnittliga filter fungerar på plats, om utgångsparameterresultatet är NULL. Låt oss nu tilldela minne för signalförlängning. Och kolla minnesallokering.
No comments:
Post a Comment