Friday, October 14, 2016

Rekursiewe bewegende gemiddelde algoritme

Die belangrikste tekortkoming in jou program is dat die rekursiewe berekening is verkeerd. Om die gemiddelde te bereken, moet jy die volle getal van die huidige waarde en die oorblywende waardes te kry. dan verdeel dit som deur die aantal waardes. Die aantal waardes is num. Die huidige waarde is alles calculatenumber () opbrengs. Die som van die oorblywende waardes is num-1 vermenigvuldig met die gemiddelde van die oorblywende waardes. Die gemiddelde van die oorblywende waardes word bereken deur 'n rekursiewe oproep tot Gemiddeld (). So, ons skryf die volgende: 'n Volledige program met behulp van die funksie kan so lyk: Let daarop dat hierdie is nie 'n baie goeie manier om die gemiddelde bereken nie omdat jy presisie verloor elke keer as jy die huidige bedrag verdeel deur num. Wanneer hierdie gemiddelde weer kry vermenigvuldig soos die rekursiewe oproep opbrengste, nie die beduidende syfers wat jy verloor het in die afdeling nie ontslae herstel. Jy is die vernietiging van inligting word deur en dan die som te vermenigvuldig. Vir groter presisie, sal jy wil om tred te hou van die som te hou as jy gaan deur die elemente, dan verdeel aan die einde. Nog 'n punt om te oorweeg is wat bedoel word met 'n bewegende gemiddelde. Wat weve bo geïmplementeer is nie 'n bewegende gemiddelde, maar 'n vaste gemiddelde. Dit is die gemiddeld van 'n vaste venster van elemente. As jy die venster beweeg deur een posisie, moet jy oor begin en bereken die som weer. Die korrekte manier om 'n bewegende venster te implementeer is om tred te hou van al die elemente in die venster te hou. Wanneer jy by die venster uit een posisie na regs skuif, jy die linker element te verwyder uit die venster en trek die waarde van die som, en voeg dan die nuwe regterkantste element na die venster en voeg die waarde daarvan om die som. Dis wat maak dit 'n bewegende som. Die verdeling van die bewegende som deur die aantal elemente gee jou die bewegende gemiddelde. Die natuurlike manier om 'n bewegende venster te implementeer is met 'n tou, want jy nuwe elemente aan die hoof kan voeg en pop ou elemente van die stert. antwoord 22 November 14 aan 17: 44In 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 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 drift. Iterative en rekursiewe kleinste kwadrate beraming algoritmes vir bewegende gemiddelde stelsels Yuanbiao Hu uit te skakel. Skool vir Ingenieurswese en Tegnologie, China Universiteit van Ondergrond, Beijing 100083, PR China Ontvang 25 September 2008. Hersiene 17 Desember 2012. Aanvaarde 30 Desember 2012. Beskikbaar aanlyn 24 Februarie 2013. Abstract 'n iteratiewe kleinstekwadrate algoritme en 'n rekursiewe kleinstekwadrate algoritmes is ontwikkel vir die beraming van die parameters van bewegende gemiddelde stelsels. Die sleutel is gebruik om die kleinste kwadrate beginsel en die onbegrensd geraas terme in die inligting vektor te vervang. Die stappe en vloeidiagramme van die berekening van die parameter ramings word. Die simulasie resultate te bevestig dat die voorgestelde algoritmes goed kan werk. Sleutelwoorde Iteratiewe identifikasie Rekursiewe identifikasie parameter belasting Stogastiese helling Kleinste kwadrate Table 1. Fig. 3. Fig. 4. Tel. 8610 82321887.Recursive bewegende gemiddelde filter bul quot quot (0) 0 bul 2 160160160160 Die bewegende gemiddelde filter is 'n FIR filter van lengte N met al krane gelyk te stel (1 / N) 0,160 Sy bekend vir slegte frekwensie skeiding, maar 'n uitstekende tyd reaksie - in die sin dat dit buite Bessels n Bessel filter.160 Jy kan dit te implementeer met SigmaStudios FIR blok as wat hier beskryf word: hoe langer die filter, hoe meer glad nie - maar die standaard FIR filter algoritme gebruik baie instruksies vir groot filters, want dit het tot koëffisiënte vir elke tap.160 dit is 'n vermorsing toe al die koëffisiënte is die same.160 Soos Hoofstuk 15 van Steven W. Smiths boek wys daarop vermeerder, kan jy 'n bewegende gemiddelde filter te maak met 'n rekursiewe tegniek wat 'n kraan voor en na 'n (n-1) grootte delay.160 so 'n filter verskyn hieronder as deel van 'n toets baan met sein bron en 'n Bessel filter vir 'n vergelyking: 160160160160 koëffisiënte reël is uitgehaal om die enkele gewin blok op die input.160 die huidige monster dra by tot die produksie as dit die vertraging gaan, die vertraagde monster trek uit die opbrengs as dit exits.160 die adder met die terugvoer ophoop hierdie toevoegings en aftrekking tot die uitset vorm - dit beteken iets dis triviale in C maar is andersins 'n pyn in die GUI.160 Hoewel 'n rekursiewe tegniek word gebruik, die filter is steeds 'n ware FIR filter - die lengte van sy impulsrespons is net ingestel deur jou vertraging. 160160160160 My toets insette is 'n blokgolf met meer noise.160 gefilterde resultate verskyn as die boonste spoor in beide foto's - eers die bewegende gemiddelde filter: Die Bessel filter: 160160160160 Die bewegende gemiddelde filter kan meer geraas deur, maar dit beter bewaar die vierkante golwe vorm - dit nie die geval is rondom die hoeke, en die op en af ​​hange simmetries (sy lineêre fase) 0,160 Luister na die twee golfvorms met oorfone toon 'n soortgelyke resultaat - meer geraas met die bewegende gemiddelde filter, maar die kenmerkende klank van 'n vierkant golf kom deur.


No comments:

Post a Comment