29 september 2013 Flyttande medelvärde genom convolution Vad rör sig i genomsnitt och vad är det bra för Hur rör sig medelvärdet genom att använda konvoltering Flyttande medelvärde är en enkel operation som vanligtvis används för att undertrycka brus av en signal: vi ställer värdet på varje punkt till genomsnittet av värdena i dess grannskap. Med en formel: Här är x ingången och y är utsignalen, medan storleken på fönstret är w, skulle vara udda. Formeln ovan beskriver en symmetrisk operation: proven tas från båda sidor av den aktuella punkten. Nedan är ett verkligt exempel. Den punkt som fönstret ligger faktiskt är rött. Värden utanför x är tänkt att vara nollor: Att leka och se effekterna av glidande medelvärde, ta en titt på denna interaktiva demonstration. Hur man gör det genom konvoltering Som du kanske har insett är det att det enkla glidande medlet liknar konvolutionen: i båda fallen glider ett fönster längs signalen och elementen i fönstret sammanfattas. Så försök att göra samma sak genom att använda convolution. Använd följande parametrar: Den önskade utgången är: Som första tillvägagångssätt, låt oss försöka vad vi får genom att samla x-signalen med följande k-kärna: Utsignalen är exakt tre gånger större än den förväntade. Det kan också ses att utgångsvärdena är sammanfattningen av de tre elementen i fönstret. Det beror på att under fönstret glider fönstret, alla element i det multipliceras med en och sedan sammanfattas: yk 1 cdot x 1 cdot x 1 cdot x För att få önskade värden på y. utgången ska delas med 3: Med en formel inklusive divisionen: Men skulle det inte vara optimalt att göra uppdelningen under konvoltering Här kommer tanken genom att omordna ekvationen: Så vi ska använda följande k-kärna: På så sätt kommer vi att få önskad produktion: Generellt: om vi vill göra glidande medelvärde genom convolution som har en fönsterstorlek på w. vi ska använda följande k-kärna: En enkel funktion som gör det glidande medlet är: Ett exempel är: Jag har en vektor och jag vill beräkna det glidande medelvärdet av det (med ett fönster med bredd 5). Om exempelvis vektorn är 1,2,3,4,5,6,7,8. då bör den första inmatningen av den resulterande vektorn vara summan av alla poster i 1,2,3,4,5 (dvs. 15) den andra inmatningen av den resulterande vektorn bör vara summan av alla poster i 2,3,4, 5,6 (dvs 20) etc. I slutet skulle den resulterande vektorn vara 15,20,25,30. Hur kan jag göra det? Föllfunktionen är rätt upp i din gränd: Tre svar, tre olika metoder. Här är en snabb riktmärke (olika inmatningsstorlekar, fast fönsterbredd på 5) med hjälp av timeit känner du dig fri att peka hål i den (i kommentarerna) om du tycker att den behöver raffineras. conv framträder som den snabbaste tillvägagångssättet är det ungefär dubbelt så snabbt som myntet närmar sig (med hjälp av filter). och ungefär fyra gånger så fort som Luis Mendos tillvägagångssätt (med hjälp av cumsum). Här är en annan riktmärke (fast inmatningsstorlek 1e4. Olika fönsterbredder). Här framträder Luis Mendos cumsum-tillvägagångssätt som den tydliga vinnaren, för dess komplexitet styrs i första hand av längden på ingången och är okänslig för fönstrets bredd. Slutsats Sammanfattningsvis bör du använda conv-inställningen om ditt fönster är relativt litet, använd cumsum-tillvägagångssättet om ditt fönster är relativt stort. Kod (för riktmärken) Jag måste beräkna ett glidande medelvärde över en dataserie, inom en för loop. Jag måste få det glidande genomsnittet över N9 dagar. Array Im computing in är 4 serier av 365 värden (M), som i sig är medelvärden för en annan uppsättning data. Jag vill räkna ut medelvärdena för mina data med glidande medelvärde i en plot. Jag googled lite om glidande medelvärden och conv kommandot och hittade något som jag försökte implementera i min kod .: Så i princip beräknar jag mitt medelvärde och plottar det med ett (fel) glidande medelvärde. Jag valde wts-värdet direkt utanför mathworks webbplats, så det är felaktigt. (källa: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mitt problem är dock att jag inte förstår vad det här är. Kan någon förklara om det har något att göra med värdena på värdena: det är ogiltigt i det här fallet. Alla värden är viktade samma. Och om jag gör det här helt fel, kan jag få lite hjälp med det mitt uppriktiga tack. frågade 23 sep 14 kl 19:05 Använda conv är ett utmärkt sätt att genomföra ett glidande medelvärde. I koden du använder är wts hur mycket du väger varje värde (som du gissade). Summan av den vektorn ska alltid vara lika med en. Om du vill vikta varje värde jämnt och göra ett N-rörligt filter så vill du göra Att använda det giltiga argumentet i conv resulterar i att få färre värden i Ms än du har i M. Använd samma om du inte har något emot effekterna av noll padding. Om du har signalbehandlingsverktygslådan kan du använda cconv om du vill prova ett cirkulärt glidande medelvärde. Något som Du borde läsa conv and cconv dokumentationen för mer information om du inte redan har. Du kan använda filter för att hitta ett löpande medelvärde utan att använda en för loop. I det här exemplet hittar du löpande medelvärdet för en vektor med 16 element, med en fönsterstorlek på 5. 2) Slät som en del av kurvanpassningsverktygslådan (som är tillgänglig i de flesta fall) yy släpper (y) data i kolumnvektorn y med ett glidande medelfilter. Resultat returneras i kolumnvektorn yy. Standardfrekvensen för det glidande medlet är 5.Download movAv. m (se även movAv2 - en uppdaterad version som tillåter viktning) Beskrivning Matlab innehåller funktioner som kallas movavg och tsmovavg (tidsserie glidande medelvärde) i Financial Toolbox, movAv är utformad för att replikera den grundläggande funktionaliteten hos dessa. Koden här ger ett bra exempel på hantering av index inom slingor, vilket kan vara förvirrande till att börja med. Ive hålls medvetet koden kort och enkel att hålla processen klar. movAv utför ett enkelt glidande medelvärde som kan användas för att återställa bullriga data i vissa situationer. Det fungerar genom att ta en medelvärde av ingången (y) över ett glidande tidsfönster, vars storlek anges av n. Ju större n är, desto större blir utjämningen av effekten av n i förhållande till längden på ingångsvektorn y. och effektivt (bra slags) skapar ett lågpassfrekvensfilter - se avsnittet exempel och överväganden. Eftersom mängden utjämning som tillhandahålls av varje värde av n är relativt längden på ingångsvektorn, är det alltid värt att testa olika värden för att se vad som är lämpligt. Kom också ihåg att n poäng går förlorade vid varje genomsnitt om n är 100, innehåller de första 99 punkterna i ingångsvektorn inte tillräckligt med data för ett 100pt-medelvärde. Detta kan undvikas något genom att stapla medelvärden, till exempel, koden och grafen nedan jämför ett antal olika längdfönstermedelvärden. Lägg märke till hur jämn 1010pt jämförs med ett enda 20pt-medelvärde. I båda fallen förloras totalt 20 data. Skapa xaxis x1: 0.01: 5 Generera brusbrusReps 4 ljud repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) brusreformer (brus, 1, längd (brus) noiseReps) Generera ydata noise yexp x) 10noise (1: längd (x)) Per genomsnittvärden: y2 movAv (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt y6 movAv (y, 100) 100 pt Plottbildsplot (x, y, y2, y3, y4, y5, y6) legend (Rådata, 10pt glidande medelvärde, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel y) titel (Jämförelse av rörliga medelvärden) movAv. m-kod genomgångsfunktion output movAv (y, n) Den första raden definierar funktionsnamn, ingångar och utgångar. Inmatningen x borde vara en vektor med data för att utföra medelvärdet, n skulle vara antalet punkter som ska utföra det genomsnittliga överutmatningen kommer att innehålla den genomsnittliga data som returneras av funktionen. Fördela utgångsutgångNaN (1, numel (y)) Hitta mittpunkten i n midPoint-runda (n2) Funktionens huvuduppgift görs i loopbandet, men innan man börjar startas två saker. För det första fördelas utdelningen som NaNs, detta tjänade två syften. För det första är förallokering i allmänhet god praxis eftersom det minskar minnes jonglering Matlab måste göra, för det andra gör det mycket enkelt att placera den genomsnittliga data i en utgång som är lika stor som ingångsvektorn. Det betyder att samma xaxis kan användas senare för båda, vilket är lämpligt för plottning, alternativt kan NaN: erna tas bort senare i en rad kod (utgångsutgången (Den variabla midPoint kommer att användas för att rikta in data i utmatningsvektorn. n 10, 10 poäng kommer att gå vilse eftersom för de första 9 punkterna av ingångsvektorn finns det inte tillräckligt med data för att ta 10 poäng. Eftersom utmatningen kommer att vara kortare än ingången måste den justeras korrekt. användas så att en lika stor mängd data går förlorad vid start och slut, och ingången hålls inriktad med utgången av NaN-buffertarna som skapas vid preallokering av utgången. För en 1: längd (y) - n Hitta indexintervall för att ta medeltal över (a: b) förbud Beräkna medelvärde (amidpunkt) medelvärde (y (a: b)) slutet I själva loopbandet tas ett medel över varje på varandra följande segment av ingången. Slingan körs för a. definierad som 1 upp till längden på ingången (y), minus de data som kommer att gå vilse (n). Om ingången är 100 poäng lo ng och n är 10 kommer slingan att springa från (a) 1 till 90. Detta betyder att det första segmentets index blir genomsnittligt. Det andra indexet (b) är helt enkelt an-1. Så vid första iterationen, a1. n10. så b 11-1 10. Det första genomsnittet tas över y (a: b). eller x (1:10). Medelvärdet för det här segmentet, som är ett enda värde, lagras i utgången på index amidPoint. eller 156. Vid den andra iterationen, a2. b 210-1 11. så medelvärdet tas över x (2:11) och lagras i utgången (7). Vid den sista iterationen av slingan för en ingång av längden 100, a91. b 9010-1 100 så medelvärdet tas över x (91: 100) och lagras i utgången (95). Detta lämnar utdata med totalt n (10) NaN-värden vid index (1: 5) och (96: 100). Exempel och överväganden Flytta medelvärden är användbara i vissa situationer, men de är inte alltid det bästa valet. Här är två exempel där de inte nödvändigtvis är optimala. Mikrofonkalibrering Denna uppsättning data representerar nivåerna för varje frekvens som produceras av en högtalare och inspelad av en mikrofon med känt linjärt svar. Högtalarens utgång varierar med frekvens, men vi kan korrigera för denna variation med kalibreringsdata - utgången kan justeras på nivå för att beräkna fluktuationerna i kalibreringen. Observera att de råa data är bullriga - det betyder att en liten förändring i frekvens tycks kräva en stor, ojämn, förändring i nivå för att redogöra för. Är detta realistiskt eller är detta en produkt av inspelningsmiljön. Det är rimligt att i detta fall tillämpa ett glidande medelvärde som släpper ut nivåfrekvenskurvan för att ge en kalibreringskurva som är något mindre ojämn. Men varför är det inte optimalt i det här exemplet? Mer data skulle vara bättre - flera kalibreringar körs i genomsnitt tillsammans skulle förstöra bruset i systemet (så länge det är slumpmässigt) och ge en kurva med mindre subtila detaljer förlorade. Det rörliga genomsnittet kan bara approximera detta och kan ta bort några högre frekvensdips och toppar från den kurva som verkligen existerar. Sinvågor Med hjälp av ett rörligt medelvärde på sinusvågor framhävs två punkter: Den allmänna frågan om att välja ett rimligt antal poäng för att utföra medelvärdet över. Det är enkelt, men det finns mer effektiva metoder för signalanalys än genomsnittliga oscillerande signaler i tidsdomänen. I denna graf kartläggs den ursprungliga sinusvågen i blått. Buller läggs till och ritas som apelsinskurvan. Ett glidande medel utförs vid olika antal punkter för att se om den ursprungliga vågen kan återvinnas. 5 och 10 poäng ger rimliga resultat, men ta inte bort bullret helt, där så större antal punkter börjar förlora amplituddetalj som medeltalet sträcker sig över olika faser (kom ihåg att vågoscillerar runt noll och medelvärdet (-1 1) 0) . Ett alternativt tillvägagångssätt skulle vara att konstruera ett lågpassfilter än vad som kan appliceras på signalen i frekvensdomänen. Jag tänker inte gå in i detalj eftersom det går utöver omfattningen av denna artikel, men eftersom bruset är betydligt högre frekvens än vågens grundläggande frekvens, skulle det vara ganska lätt att i detta fall konstruera ett lågpassfilter än att avlägsna högfrekvensen ljud.
Så här handlar du Forex på nyhetsbrev En av de stora fördelarna med att handla valutor är att valutamarknaden är öppen 24 timmar om dygnet (från 17:00 EST på söndag till 16:00 EST fredag). Ekonomiska data tenderar att vara en av de viktigaste katalysatorerna för kortsiktiga rörelser på vilken marknad som helst, men det är särskilt sant på valutamarknaden, som inte bara svarar mot den amerikanska ekonomiska nyheterna utan även på nyheter från hela världen. Med åtminstone åtta stora valutor som är tillgängliga för handel med de flesta valutamäklare och mer än 17 derivat av dem finns det alltid en del ekonomiska data som är slated för utgivande som handlare kan använda för att informera de positioner de tar. I allmänhet släpps inte mindre än sju datauppgifter dagligen från de åtta huvudvaluta eller länder som följs mest efter. Så för dem som väljer att handla nyheter, det finns gott om möjligheter. Här tittar vi på vilka ekonomiska nyhetsmeddelanden som släpps när, vilka är mest relevanta...
Comments
Post a Comment