Saturday, October 22, 2016

Bewegende Gemiddelde Implementering

Ek het in wese 'n verskeidenheid van waardes soos volg: Bogenoemde skikking word oorvereenvoudig, Im invordering 1 waarde per millisekonde in my werklike kode en ek nodig het om die uitset op 'n algoritme wat ek geskryf het na die naaste piek voor 'n tydstip vind verwerk. My logika nie, omdat my voorbeeld hierbo, 0,36 is die ware hoogtepunt, maar my algoritme sal agter te kyk en te sien die heel laaste aantal 0,25 as die hoogtepunt, as Theres 'n afname tot 0,24 voor dit. Die doel is om hierdie waardes te neem en 'n algoritme toe te pas om hulle verwek wat hulle sal glad 'n bietjie, sodat ek meer lineêre waardes. (Dit wil sê: id graag my resultate te bochtig wees, nie jaggedy) Ive vertel is om 'n eksponensiële bewegende gemiddelde filter van toepassing op my waardes. Hoe kan ek hierdie Sy doen baie moeilik vir my om wiskundige vergelykings gelees, ek gaan baie beter met kode. Hoe kan ek verwerk waardes in my skikking, die toepassing van 'n eksponensiële bewegende gemiddelde berekening om hulle selfs uit gevra 8 Februarie 12 aan 20:27 Om 'n eksponensiële bewegende gemiddelde bereken. wat jy nodig het om 'n staat om te hou en jou 'n stem parameter nodig het. Dit vereis 'n bietjie klas (met die aanvaarding jy met behulp van Java 5 of later): instansieer met die verval parameter wat jy wil (kan stem te neem moet wees tussen 0 en 1) en gebruik dan die gemiddelde () te filtreer. Lees 'n artikel op 'n mathmatical herhaling, al wat jy regtig nodig het om te weet wanneer om dit in kode is dat wiskundiges graag indekse in skikkings en rye met onderskrifte te skryf. (Theyve 'n paar ander notasies sowel, wat help nie die geval is.) Maar die EMO is eenvoudig as wat jy net nodig het om 'n ou waarde geen ingewikkelde toestand skikkings nodig om te onthou. beantwoord 8 Februarie 12 aan 20:42 TKKocheran: Pretty much. Isn39t dit lekker as dinge eenvoudig (As begin met 'n nuwe reeks, kry 'n nuwe Averager.) Kan wees Let daarop dat die eerste paar terme in die gemiddelde volgorde om 'n bietjie sal spring as gevolg van grens-effekte, maar jy kry diegene met ander bewegende gemiddeldes ook. Maar 'n goeie voordeel is dat jy die bewegende gemiddelde logika in die Averager en eksperimenteer kan draai sonder die res van jou program te veel te versteur. â € Donal Fellows 9 Februarie 12 by 00:06 Ek het 'n harde tyd te verstaan ​​jou vrae, maar ek sal probeer om in elk geval te beantwoord. 1) As jou algoritme gevind 0,25 in plaas van 0,36, dan is dit verkeerd. Dit is verkeerd, want dit neem 'n monotoniese vermeerdering of vermindering (wat altyd opgaan of altyd gaan af). Tensy jy al jou data gemiddeld jou datapunte --- soos jy dit aan te bied --- is nie-lineêre. As jy regtig wil om die maksimum waarde tussen twee punte in die tyd te vind, dan sny jou verskeidenheid van tmin om Tmax en vind die maksimum van daardie subarray. 2) Nou, die konsep van bewegende gemiddeldes is baie eenvoudig: dink dat ek die volgende lys: 1.4, 1.5, 1.4, 1.5, 1.5. Ek kan dit glad deur die neem van die gemiddelde van twee getalle: 1.45, 1.45, 1.45, 1.5. Let daarop dat die eerste getal is die gemiddeld van 1.5 en 1.4 (tweede en eerste nommers) die tweede (nuwe lys) is die gemiddeld van 1.4 en 1.5 (derde en tweede ou lys) die derde (nuwe lys) die gemiddelde van 1,5 en 1,4 (vierde en derde), en so aan. Ek kon dit drie of vier, of N gemaak. Let op hoe die data is baie gladder. 'N Goeie manier om bewegende gemiddeldes te sien by die werk is om te gaan na Google Finansies, kies 'n voorraad (probeer Tesla Motors mooi vlugtige (TSLA)) en klik op technicals aan die onderkant van die grafiek. Kies bewegende gemiddelde met 'n gegewe tydperk, en Eksponensiële bewegende gemiddelde om hul verskille te vergelyk. Eksponensiële bewegende gemiddelde is net nog 'n uitbreiding van hierdie, maar gewigte die ouer data minder as die nuwe data dit is 'n manier om vooroordeel die smoothing na die agterkant. Lees asseblief die Wikipedia-inskrywing. So, dit is meer 'n opmerking as 'n antwoord, maar die bietjie kommentaar boks was net te klein. Sterkte. As jy probleme het met die wiskunde, kan jy gaan met 'n eenvoudige bewegende gemiddelde plaas van eksponensiële. So die uitset jy sou wees die laaste x terme gedeel deur x. Ongetoets pseudokode: Let daarop dat jy sal nodig hê om te hanteer die begin en einde dele van die data sedert duidelik jy kan nie gemiddeld die afgelope 5 terme wanneer jy op jou 2de data punt. Daar is ook meer doeltreffende maniere berekening hierdie bewegende gemiddelde (som som - oudste nuutste), maar dit is om die konsep van kry whats oor gebeur. beantwoord 8 Februarie 12 aan 20: 41In statistieke n eenvoudige bewegende gemiddelde is 'n algoritme wat die ongeweegde gemiddelde van die laaste N monsters bereken. Die parameter N word dikwels die grootte venster, omdat die algoritme kan beskou word as 'n venster wat gly oor die datapunte. Deur die gebruik van 'n rekursiewe formulering van die algoritme, is die aantal operasies wat per monster verminder tot een Daarbenewens een aftrek en een afdeling. Aangesien die formulasie is onafhanklik van die venster grootte N. die runtime kompleksiteit is O (1). maw konstante. Die rekursiewe formule van die ongeweegde bewegende gemiddelde is, waar gemiddelde is die rollende gemiddelde en x verteenwoordig 'n data punt. So, wanneer die venster skyfies na regs, een datapunt, die stert, druppels uit en een datapunt, die hoof, beweeg in. Implementering 'n uitvoering van die eenvoudige bewegende gemiddelde het om die volgende in ag Algoritme inisialisering neem Solank die venster is nie ten volle gevul is met waardes, die rekursiewe formule versuim. Stoor Toegang tot die stert element vereis word, wat na gelang van die implementering vereis 'n stoor van n elemente. My implementering gebruik die aangebied formule wanneer die venster is heeltemal gevul is met waardes, en anders skakel om die formule, wat die gemiddelde updates deur herbereken die som van die vorige elemente. Let daarop dat dit kan lei tot numeriese onstabiliteit as gevolg van drywende punt rekenkundige. Sover geheue verbruik betref, is die implementering gebruik iterators om tred te hou van kop en stert elemente hou. Dit lei tot 'n uitvoering met 'n konstante herinnering vereistes onafhanklik van die venster grootte. Hier is die update proses wat die venster na regs skuif. In die meeste van die versamelings ongeldig hul sensusopnemers wanneer die onderliggende versameling is verander. Die implementering egter staatmaak op geldig opnemers. Veral in streaming gebaseerde programme die onderliggende versameling behoeftes verander wanneer 'n nuwe element kom. Een manier om dit te hanteer wat 'n eenvoudige omsendbrief vaste grootte versameling grootte N1 wat nooit invalidates sy iterators en afwisselend voeg 'n element en oproep Shift te skep. Ek wens ek kon uitvind hoe om dit eintlik te implementeer, soos die toets funksie is baie verwarrend om me8230 Moet ek data te omskep in Array, dan hardloop SMA SMA nuwe SMA (20, skikking) vir 'n tydperk van 20 SMA Hoe hanteer ek verskuiwing () funksie is dit nodig om vervaardigerskampioenskap te implementeer. (Jammer vir die verwarring). Nee, jy don8217t nodig het om jou data so lank te omskep in 'n skikking as jou data implemente IEnumerable1 en die versyferde tipe is dubbel. Wat jou persoonlike boodskappe betref wat jy nodig het om die DataRow te skakel na iets wat enumerable dubbele waardes. Jou benadering werk. Verskuiwing, gly die venster een posisie na links. Vir 'n datastel van sê 40 waardes en 'n 20 tydperk SMA het jy 21 poste by die venster pas (40 8211 20 1). Elke keer as jy bel Shift () die venster na links verskuif deur een posisie en Gemiddeld () gee terug Die SMA vir die huidige venster posisie. Dit wil sê, die ongeweegde gemiddelde van alle waardes in die venster. Daarbenewens my implementering toelaat om die SMA bereken selfs indien die venster is nie ten volle gevul aan die begin. So in wese hoop dit help. Enige verdere vrae kopieregkennisgewing Christoph Heindl en cheind. wordpress, 2009-2012. Ongemagtigde gebruik en / of duplisering van hierdie materiaal sonder uitdruklike en skriftelike toestemming van die blogs skrywer en / of eienaar is streng verbode. Uittreksels en skakels mag gebruik word, met dien verstande dat die volle en duidelike krediet gegee word aan Christoph Heindl en cheind. wordpress met toepaslike en spesifieke rigting van die oorspronklike inhoud. Recent Posts ArchivesThe bewegende gemiddelde as 'n Filter Die bewegende gemiddelde is dikwels gebruik vir glad data in die teenwoordigheid van ruis. Die eenvoudige bewegende gemiddelde is nie altyd erken as die Eindige Impulse Response (FIR) filter dat dit, terwyl dit eintlik een van die mees algemene filters in seinverwerking. Die behandeling van dit as 'n filter kan vergelyk dit met byvoorbeeld met venster-sed filters (sien die artikels oor lae-pass. Hoë-pass. En orkes-pass en orkes-verwerp filters vir voorbeelde van diegene). Die groot verskil met dié filters is dat die bewegende gemiddelde is geskik vir seine waarvoor die nuttige inligting is vervat in die tydgebied. waarvan glad metings deur die gemiddeld is 'n uitstekende voorbeeld. 'N klein venster-sed filters, aan die ander kant, is sterk presteerders in die frekwensiedomein. met gelykmaking in klank verwerking as 'n tipiese voorbeeld. Daar is 'n meer gedetailleerde vergelyking van beide tipes filters in Time Domain teen frekwensiedomein Performance filters. As jy inligting soek wat beide die tyd en die frekwensie domein is belangrik, dan kan jy 'n blik op variasies op die bewegende gemiddelde het. wat bied 'n aantal geweegde weergawes van die bewegende gemiddelde wat beter op daardie is. Die bewegende gemiddelde lengte (N) kan gedefinieer word as geskryf soos dit tipies is geïmplementeer, met die huidige uitset monster as die gemiddelde van die vorige (N) monsters. Gesien word as 'n filter, die bewegende gemiddelde voer 'n konvolusie van die insette volgorde (xn) met 'n vierkantige pols van lengte (N) en hoogte (1 / N) (om die oppervlakte van die pols te maak, en dus die wins van die filter, een). In die praktyk is dit die beste om (N) vreemd neem. Hoewel 'n bewegende gemiddelde ook kan bereken word met behulp van 'n gelyke getal monsters, met behulp van 'n vreemde waarde vir (N) het die voordeel dat die vertraging van die filter 'n heelgetal van monsters sal wees nie, aangesien die vertraging van 'n filter met (N) monsters is presies ((N-1) / 2). Die bewegende gemiddelde kan dan presies in lyn wees met die oorspronklike data deur die verskuiwing dit deur 'n heelgetal van monsters. Tyd Domain Sedert die bewegende gemiddelde is 'n konvolusie met 'n vierkantige pols, sy frekwensieweergawe is 'n sed funksie. Dit maak dit iets soos die dubbele van die klein venster-sed filter, want dit is 'n konvolusie met 'n sed pols wat lei tot 'n vierkantige frekwensieweergawe. Dit is hierdie sed frekwensieweergawe dat die bewegende gemiddelde n swak presteerder in die frekwensiedomein maak. Maar dit doen baie goed in die tydgebied. Daarom is dit ideaal om data glad geraas te verwyder, terwyl op dieselfde tyd nog 'n vinnige stap reaksie (figuur 1) hou. Vir die tipiese byvoeging Wit Gaussiese ruis (SWGR) wat dikwels aanvaar, gemiddeld (N) monsters het die effek van die verhoging van die SNR met 'n faktor van (sqrt N). Sedert die geraas vir die individuele monsters is ongekorreleerd, daar is geen rede om elke monster anders te behandel. Vandaar die bewegende gemiddelde, wat elke monster dieselfde gewig gee, sal ontslae te raak van die maksimum bedrag van geraas vir 'n gegewe stap reaksie skerp. Implementering Omdat dit 'n FIR filter, kan die bewegende gemiddelde geïmplementeer deur konvolusie. Dit sal dan dieselfde doeltreffendheid (of die gebrek daaraan) as enige ander FIR filter. Maar dit kan ook rekursief geïmplementeer, in 'n baie doeltreffende manier. Dit volg direk uit die definisie dat hierdie formule is die gevolg van die uitdrukkings vir (yn) en (yn1), dit wil sê, waar ons sien dat die verandering tussen (yn1) en (yn) is dat 'n ekstra termyn (xn1 / N) verskyn aan die einde, terwyl die term (xn-N1 / N) van die begin af verwyder. In praktiese toepassings, is dit dikwels moontlik om uit te laat die verdeling deur (N) vir elke kwartaal deur vergoed vir die gevolglike wins van (N) in 'n ander plek. Dit rekursiewe implementering sal baie vinniger as konvolusie wees. Elke nuwe waarde van (y) kan bereken word met net twee toevoegings, in plaas van die (N) toevoegings wat vir 'n eenvoudige implementering van die omskrywing nodig sou wees. Een ding om op die uitkyk vir 'n rekursiewe implementering is dat afrondingsfoute sal ophoop. Dit mag of mag nie 'n probleem vir jou aansoek nie, maar dit beteken ook dat dit rekursiewe implementering eintlik beter met 'n heelgetal implementering sal werk as met swaai-punt getalle. Dit is nogal 'n ongewone, aangesien 'n drywende punt implementering is gewoonlik makliker. Die sluiting van dit alles moet wees dat jy nooit die nut van die eenvoudige bewegende gemiddelde filter in seinverwerking aansoeke moet onderskat nie. Filterontwerp Tool Hierdie artikel word aangevul met 'n Filter Ontwerp instrument. Eksperimenteer met verskillende waardes vir (N) en visualiseer die gevolglike filters. Probeer dit nowSimple bewegende gemiddelde - SMA Wat is 'n eenvoudige bewegende gemiddelde - SMA N Eenvoudige bewegende gemiddelde (SMA) is 'n rekenkundige bewegende gemiddelde bereken deur die byvoeging van die sluitingsprys van die sekuriteit vir 'n aantal tydperke en dan verdeel dit totaal deur die aantal van tydperke. Soos getoon in die grafiek hierbo, baie handelaars kyk vir 'n kort termyn gemiddeldes hierbo langer termyn gemiddeldes te steek om die begin van 'n uptrend sein. Korttermyn gemiddeldes kan optree as die vlakke van ondersteuning wanneer die prys ondervind met 'n terugsakking. VIDEO laai die speler. Afbreek Eenvoudige bewegende gemiddelde - SMA N Eenvoudige bewegende gemiddelde is aanpas omdat dit bereken kan word vir 'n verskillende aantal tydperke, eenvoudig deur die toevoeging van die sluitingsprys van die sekuriteit vir 'n aantal tydperke en dan verdeel dit totaal deur die aantal van tydperke, wat die gemiddelde prys van die sekuriteit oor die tydperk gee. 'N Eenvoudige bewegende gemiddelde stryk uit wisselvalligheid, en maak dit makliker om die prys tendens van 'n sekuriteit te sien. As die eenvoudige tot bewegende gemiddelde punte, beteken dit dat die securitys prys is aan die toeneem. As dit is wys af beteken dit dat die securitys prys daal. Hoe langer die tydperk vir die bewegende gemiddelde, die gladder die eenvoudige bewegende gemiddelde. 'N Korter termyn bewegende gemiddelde is meer wisselvallig, maar sy lees is nader aan die bron data. Analitiese betekenis bewegende gemiddeldes is 'n belangrike analitiese instrument wat gebruik word om die huidige prys tendense te identifiseer en die potensiaal vir 'n verandering in 'n gevestigde tendens. Die eenvoudigste vorm van die gebruik van 'n eenvoudige bewegende gemiddelde in analise is om dit te gebruik om vinnig te identifiseer as 'n sekuriteit is in 'n uptrend of verslechtering neiging. Nog 'n gewilde, al is dit 'n bietjie meer kompleks analitiese instrument, is om 'n paar eenvoudige bewegende gemiddeldes te vergelyk met mekaar oor verskillende tydperke. As 'n korter termyn eenvoudige bewegende gemiddelde is bo 'n langer termyn gemiddelde, is 'n uptrend verwag. Aan die ander kant, 'n langtermyn-gemiddelde bo 'n korter termyn gemiddelde dui op 'n afwaartse beweging in die tendens. Gewilde handelspatrone Twee gewilde handelspatrone so eenvoudig bewegende gemiddeldes gebruik sluit die dood kruis en 'n goue kruis. 'N die dood kruis vind plaas wanneer die 50-dag eenvoudig bewegende gemiddelde kruise onder die 200-daagse bewegende gemiddelde. Dit word beskou as 'n lomp sein, wat verdere verliese is in die winkel. Die goue kruis vind plaas wanneer 'n korttermyn-bewegende gemiddelde breek bo 'n langtermyn-bewegende gemiddelde. Versterk deur 'n hoë verhandelingsvolumes, kan dit dui verdere stygings in store. The Scientist en Ingenieurs Guide to Digital Signal Processing Deur Steven W. Smith, Ph. D. 'N geweldige voordeel van die bewegende gemiddelde filter is dat dit geïmplementeer kan word met 'n algoritme wat baie vinnig. Om hierdie algoritme te verstaan, dink verby 'n insetsein, x, deur 'n sewe punt bewegende gemiddelde filter om 'n uitset sein vorm, y. Nou kyk hoe twee aangrensende uitset punte, y 50 en y 51, bereken: Dit is byna dieselfde berekening punte x 48 deur x 53 moet bygevoeg word vir y 50, en weer vir y 51. As y 50 is reeds bereken die mees doeltreffende manier om y 51 te bereken is: Sodra y 51 is gevind met behulp van y 50, dan y 52 kan bereken word uit voorbeeld y 51, en so aan. Na afloop van die eerste punt word bereken in y, kan al die ander punte te vinde met slegs 'n enkele optel en aftrek per punt. Dit kan uitgedruk word in die vergelyking: Let daarop dat hierdie vergelyking gebruik twee bronne van data aan elke punt in die uitset te bereken: punte van die insette en voorheen berekende punte van die uitset. Dit staan ​​bekend as 'n rekursiewe vergelyking, wat beteken dat die resultaat van 'n berekening gebruik word in die toekoms berekeninge. (Die term rekursiewe het ook ander betekenisse, veral in rekenaarwetenskap). Hoofstuk 19 bespreek 'n verskeidenheid van rekursiewe filters in meer besonderhede. Wees bewus daarvan dat die bewegende gemiddelde rekursiewe filter is baie anders as tipiese rekursiewe filters. In die besonder, die meeste rekursiewe filters het 'n oneindige lang impulsrespons (IIR), saamgestel sinusoïede en Exponentiële. Die impulsrespons van die bewegende gemiddelde is 'n vierkantige pols (eindige impulsrespons, of FIR). Hierdie algoritme is vinniger as ander digitale filters vir 'n paar redes. In die eerste plek is daar net twee berekeninge per punt, ongeag die lengte van die filter kern. Tweede, optel en aftrek is die enigste wiskunde bedrywighede nodig, terwyl die meeste digitale filters vereis tydrowende vermenigvuldiging. Derde, die kruip skema is baie eenvoudig. Elke indeks in vergelyking. 15-3 gevind deur die byvoeging of af te trek heelgetal konstantes wat bereken kan voor die filter begin (dit wil sê P en Q). Uitgaan, die hele algoritme kan met heelgetal verteenwoordiging gedra. Afhangende van die hardeware gebruik, kan heelgetalle meer as 'n orde van grootte wees vinniger as drywende punt. Verbasend, heelgetal verteenwoordiging werk beter as drywende punt met hierdie algoritme, in Benewens die feit dat vinniger. Die ronde-off fout van drywende punt rekenkundige kan onverwagte resultate te lewer as jy nie versigtig is nie. Byvoorbeeld, dink 'n 10,000 monster sein word gefiltreer met hierdie metode. Die laaste voorbeeld in die gefilterde sein bevat die opgehoopte fout van 10,000 toevoegings en 10.000 aftrek. Dit blyk in die uitsetsein as 'n dryf verreken. Heelgetalle hoef hierdie probleem, want daar is geen ronde-off fout in die rekenkundige. As jy swaai punt moet gebruik met hierdie algoritme, die program in Tabel 15-2 wys hoe om 'n dubbele presisie akkumulator gebruik om hierdie drif te skakel.


No comments:

Post a Comment