Sunday, October 16, 2016

Bewegende gemiddelde c - kode avr

Ek het probeer om n paar hardloop gemiddelde Techs vir glad die verandering in ADC data in AtMega48 vir die beheer van ligte (PWM) wanneer roterende n pot (ADC). Die filters (pseudo kodes): Ek het opgemerk dat die filters is baie mooi. Maar stadig in reaksie wat verwag word. Ek is op soek na 'n tegnieke soos Eksponensiële bewegende gemiddelde. Gesê meer ontvanklik te wees. Is daar 'n ander soos hierdie een As dit sê: Waar is tussen 0 en 1. Hoe om die kode en te optimaliseer die kode wyse (sonder die gebruik van dryf) of hoe sou ek sit die dryf om ooreenstemmende heelgetalle vir die maak-kode klein, vinnige en reageer een. en ek het 1 Ander dan dat dit gewoond werk soos verwag. Omdat Idve om al die veranderlikes verander om te dryf. Moet asseblief nie konsentreer op volgende stelling vir die oomblik, maar let. Hou dryf in my kode basis vul die program geheue 45-137, in die geval van wat jy kan implementeer met 'n minimale oorhoofse deur die beperking om binêre breuke. Ek het hierdie gebruik met goeie resultate. Neem die bestaande gevolg, Shift dit N plekke reg om te verdeel deur 2N Trek dit uit die bestaande gevolg. Voeg nuwe data Dit is nie so vinnig op die verandering van 'n stap verandering in die insette data as wat jy kan wens, maar is maklik om te implementeer en effektief genoeg as 'n filter in baie gevalle. Jy kan bespoedig sy reaksie deur informele besluite met betrekking tot die gedrag in gevalle wat ook anders is. bv in stand te hou 'n telling van opeenvolgende insette wat meer as 'n paar limiet anders as die bestaande gevolg is. As dit tel 'n paar drumpel oorskry dan verander die N kloof verhouding met 'n paar faktor. bv N word gewoonlik 4- resultate verskuif reg 4 keer 16 kloof. As insette is meer as xxx weg van die antwoord nie net twee skofte reg en vermeerder nuwe monster deur 4 voor te voeg. beantwoord 4 Oktober 12 by 6: 08MOVING GEMIDDELDE FILTER Daar is baie verskillende tipes filters wat jy kan skryf, en die wagon (of bewegende gemiddelde, as jy dit genoem) of vierkantige filter is maar net een van em. Hier is 'n vergelyking van 'n verskeidenheid van filters, en die aard van die uitwerking wat dit op jou data kan hê, as 'n funksie van frekwensie. 'n eenvoudige bewegende gemiddelde filter te maak, moet jy net om die data optel, dan verdeel deur die aantal data-elemente. As jy al die elemente elke keer as jy die gemiddelde te bereken voeg, sal dit jou N toevoegings plus een afdeling kos. Aan die ander kant, as jy hou van waar die oudste data is geleë hou, en dan as die data vorder, jy net voeg die nuwe data, trek die oudste data, en doen die weer verdeeldheid. Hierdie metode kos jou slegs 'n enkele Verder is 'n enkele aftrek, en 'n afdeling. Baie vinniger. Ek sal nie skryf die kode vir jou. Ek hoop dit help, though. Home gtgt Inventory Rekeningkunde Onderwerpe bewegende gemiddelde Inventaris Metode bewegende gemiddelde Inventaris Metode Oorsig Onder die bewegende gemiddelde inventaris metode, die gemiddelde koste van elke voorraaditem in voorraad is weer bereken word na elke inventaris koop. Hierdie metode is geneig om voorraad waardasies en koste van goedere verkoop resultate wat tussenin afgelei onder die eerste in, eerste uit (EIEU) metode en die laaste in, eerste uit (LIEU) metode lewer. Dit gemiddelde benadering word beskou as 'n veilige en konserwatiewe benadering toegee aan verslagdoening finansiële resultate. Die berekening is die totale koste van die aangekoop gedeel deur die aantal items in voorraad items. Die koste van die beëindiging van voorraad en die koste van goedere verkoop word dan vasgestel op hierdie gemiddelde koste. Geen koste lae nodig is, soos vereis vir die EIEU en LIEU metodes. Sedert die bewegende gemiddelde koste verander wanneer daar 'n nuwe aankoop, kan die metode slegs gebruik word met 'n deurlopende voorraadstelsel opsporingstelsel so 'n stelsel hou up-to-date rekords van voorraad weegskaal. Jy kan die bewegende gemiddelde inventaris metode nie gebruik as jy net met 'n periodieke voorraadstelsel. aangesien so 'n stelsel net ophoop inligting aan die einde van elke rekeningkundige tydperk, en nie rekords by die individuele eenheid te handhaaf. Ook, wanneer voorraad waardasies is afgelei met behulp van 'n rekenaarstelsel, die rekenaar maak dit relatief maklik om voortdurend aan te pas inventaris waardasies met hierdie metode. Aan die ander kant, kan dit baie moeilik wees om die bewegende gemiddelde metode te gebruik wanneer voorraadrekords word met die hand in stand gehou, want die klerklike personeel sal oorweldig word deur die omvang van die nodige berekeninge. Bewegende gemiddelde Inventaris Metode Voorbeeld Voorbeeld 1. ABC International het 1,000 groen widgets in voorraad vanaf die begin van April, teen 'n koste per eenheid van 5. So, die begin inventaris balans van groen widgets in April is 5,000. ABC koop dan 250 bykomende greeen widgets op 10 April vir 6 elk (totaal aankoop van 1500), en 'n ander 750 groen widgets op 20 April vir 7 elk (totaal aankoop van 5250). In die afwesigheid van enige verkope, beteken dit dat die bewegende gemiddelde koste per eenheid aan die einde van April 5.88, wat bereken word as 'n totale koste van 11.750 sou wees (5000 begin balans 1500 aankoop 5250 aankoop), gedeel deur die totale op - hand telling eenheid van 2000 groen widgets (1000 begin balans 250 eenhede gekoop 750 eenhede gekoop). So, die bewegende gemiddelde koste van die groen widgets was 5 per eenheid aan die begin van die maand, en 5.88 aan die einde van die maand. Ons sal die voorbeeld herhaal, maar nou sluit 'n paar verkope. Onthou dat ons herbereken die bewegende gemiddelde na elke transaksie. Voorbeeld 2. ABC International het 1,000 groen widgets in voorraad vanaf die begin van April, teen 'n koste per eenheid van 5. Dit verkoop 250 van hierdie eenhede op 5 April, en rekords wat 'n klag by die koste van goedere verkoop van 1250, wat word bereken as 250 eenhede x 5 per eenheid. Dit beteken daar is nou 750 eenhede in voorraad oorbly, teen 'n koste per eenheid van 5 en 'n totale koste van 3750. ABC koop dan 250 bykomende groen widgets op 10 April vir 6 elk (totaal aankoop van 1500). Die bewegende gemiddelde koste is nou 5,25, wat bereken word as 'n totale koste van 5250 gedeel deur die 1000-eenhede nog op hande. ABC verkoop as 200 eenhede op 12 April, en rekords wat 'n klag by die koste van goedere verkoop van 1050, wat daarop bereken as 200 eenhede x 5,25 per eenheid. Dit beteken daar is nou 800 eenhede in voorraad oorbly, teen 'n koste per eenheid van 5,25 en 'n totale koste van 4200. Ten slotte, ABC koop 'n bykomende 750 groen widgets op 20 April vir 7 elk (totaal aankoop van 5250). Aan die einde van die maand, het die bewegende gemiddelde koste per eenheid is 6,10, wat bereken as die totale koste van 4200 5250, gedeel deur totale oorblywende eenhede van 800 750. Dus, in die tweede voorbeeld, ABC International begin die maand met 'n 5000 begin balans van groen widgets teen 'n koste van 5 elk, verkoop 250 eenhede teen 'n koste van 5 op 5 April, hersien die eenheidskoste te 5,25 na 'n aankoop op 10 April, verkoop 200 eenhede teen 'n koste van 5,25 op 12 April, en uiteindelik hersien sy eenheidskoste te 6,10 na 'n aankoop op 20 April jy kan sien dat die koste per veranderinge eenheid na 'n inventaris koop, maar nie na 'n inventaris sale. If jy die gemiddeld van n monsters, eenvoudig vermenigvuldig die gemiddeld n , voeg die nuwe monster, en deel dit deur N1. Dit beteken nie jy kry 'n bewegende gemiddelde. Jy moet bereid wees om 150 monsters stoor te wees. Dan, wanneer jy 'n nuwe monster te kry, vermenigvuldig die gemiddeld 150, trek die oudste, voeg die nuutste en deel dit deur 150. Sit die nuutste in die 150-grootte buffer en verwyder die oudste. Daar is ander skemas wat NAverage wat die vermenigvuldiging 'n bietjie verminder te hou. Jim Wagner Oregon Navorsing Electronics, Consulting Div. Raaklyn, OR, USA sites. google/site/or. Kleinstein Vlak: versending Freak geword: Saterdag September 22, 2007 Geplaas deur Kleinstein. Son 18 Januarie 2009 - 16:34 Daar is geen manier om die redding van die laaste N (ongeveer 150) monsters as nodig die werklike bewegende gemiddelde vir elke posisie. 150 Samles moet nog pas in die geheue. Jy kan die vermenigvuldiging egter red. Voeg die nuwe monster en aftrek die laaste een om te val put. verdeel dan die som deur N vir die resultaat en hou die bedrag vir die volgende stap. Devisie kry baie makliker as jy 128 monsters kan gebruik. Vlak: 10k Postman geword: Saterdag 12 Februarie 2005 Plek: Wormshill, Engeland Geplaas deur david. prentice. Son 18 Januarie 2009 - 16:51 gemiddelde totale / monsters. newaverage (totale nuwe) / (monsters 1) As jy bekommerd is oor verslagdoening 'n geldige gemiddelde tot die aantal monsters is 150, jy moet net jou verslag te vertraag totdat geldig. 16000 monsters van 'n gereelde SY sal maklik inpas in 'n lang totaal. Jy verdeel wanneer jy gevra word om die gemiddelde waarde te rapporteer. Alternatiewelik, jy kan bereken die gemiddelde en herstel jou totale elke 150 monsters. Jy rapporteer dit gemiddeld tot die volgende berekening. 'N bietjie soos die spoed op my fiets rekenaar. Die voorwiel het om meer as een omwenteling te doen voordat die spoed kan bereken. curtvm Vlak: raving Besetene geword: Woensdag September 21, 2005 Geplaas deur curtvm. Maandag 19 Januarie 2009 - 04:40 (dit is dieselfde / soortgelyke Kleinsteins idee). Vlak: 10k Postman geword: Maandag 19 Februarie 2001 Plek: Wisconsin VSA Geplaas deur theusch. Maandag 19 Januarie 2009 - 14:58 Uit die aard van die beskrywing, rollende gemiddelde oor 'n groot aantal monsters, die sein is stadig bewegende. As ek moes my programme te veralgemeen, tipiese is om die lus elke 500 ms sluit. Ek het die ADC neem deurlopende (-onderbrekingsgedrewe) voorbeeld van al gebruik A / D monsters stoor die rou lees in 'n skikking. Elke 10ms een of meer doelskoppe gedoen op elke kanaal. (Op 'n 57.600 ADC klok wat 226us / bekering met ISR oorhoofse miskien 250us so ongeveer 40 doelskoppe elke 10ms.) By die 10ms wys ek voeg die rou waarde wat die jongste sukses gevolg om 'n totaal vir elke kanaal. Elke 500 ms die gemiddelde gebruik vir die sluiting van die jeug lus. Dit werk goed vir stadig bewegende seine soos termistors, huidige trekking lesings en beheer spanning. Die som-gemiddelde neem 'n groot deel van die geraas en lesings is tipies rock-bestendige. (Daar is 'n baie drade oor waargeneem Bobble in ADC lesings nie.) Let daarop dat die gebruik van die som eerder as die gemiddelde behou nog 'n paar lae stukkies, maar klink - selfs 'n stadig bewegende sein kan begin om te verander in 'n segment van wat 500 ms so wat is die punt nou vinniger bewegende seine of diegene wat 'n vinniger reaksie het 'n ander benadering. 'N Algemene situasie vir my is die monitering van die rou DC vir inkomende krag verloor. Dit sein kan ook rou reggestel AC wees en het 'n baie rimpeleffek. Of is dit dalk ander faktore wat kan maak dit rond draai het. In sulke gevalle moet ek 'n eenvoudige gemiddelde skema soos Kleinstein, met die nuwe monster met 'n gewig aan die vorige waarde te verander. Nee, nie 'n ware rollende gemiddelde aangesien al die monsters nie in stand gehou word. Vir krag monitering van die nuwe monster kan wees 1/2 of 1/4 of 1/8 gewig, empiries bepaal op wat die beste werk in 'n bepaalde geval. Hier is 'n kode van 'n app waar 1/2 was te grof, en die finale gebruik 16/01: Jy kan lipstiffie op 'n vark, maar dit is nog steeds 'n vark. Ive nooit 'n vark wat ek didnt wil ontmoet, so lank as wat jy 'n paar sout en pepper. Averages / Eenvoudige bewegende gemiddelde Gemiddeldes / Eenvoudige bewegende gemiddelde U word aangemoedig om hierdie taak op te los volgens die taakbeskrywing, die gebruik van enige taal wat jy kan weet. Berekening van die eenvoudige bewegende gemiddelde van 'n reeks van getalle. Skep 'n Stateful funksie / klas / instansie wat 'n tydperk neem en gee 'n roetine dat 'n aantal neem as argument en gee 'n eenvoudige bewegende gemiddelde van sy argumente tot dusver. 'N Eenvoudige bewegende gemiddelde is 'n metode vir die berekening van 'n gemiddelde van 'n stroom van getalle met slegs gemiddeld die afgelope 160 P 160 nommers van die stroom, 160 waar 160 P 160 is bekend as die tydperk. Dit kan toegepas word deur die roeping van 'n parafering roetine met 160 P 160 as argument, 160 I (P), 160 wat dan 'n roetine dat wanneer geroep met individuele, opeenvolgende lede van 'n stroom van getalle, bere die gemiddelde van sou terugkeer (up om), die laaste 160 P 160 van hulle, kan noem dit 160 SMA (). Die woord 160 Stateful 160 in die taak beskrywing verwys na die behoefte aan 160 SMA () 160 om sekere inligting tussen oproepe onthou om dit: 160 Die tydperk, 160 P 160 N bestel houer van ten minste die laaste 160 P 160 nommers uit elk van sy individuele oproepe. Stateful 160 beteken ook dat opeenvolgende oproepe na 160 I (), 160 die initializer, 160 moet afsonderlike roetines wat doen 160 nie 160 aandele gered staat sodat hulle kan gebruik word op twee onafhanklike strome van data terugkeer. Pseudo-kode vir die implementering van 160 SMA 160 is: Hierdie weergawe maak gebruik van 'n aanhoudende tou om die mees onlangse p waardes hou. Elke funksie teruggekeer van init-bewegende-gemiddelde het sy toestand in 'n atoom met 'n tou waarde. Dit implementering gebruik 'n omsendbrief lys om die getalle binne die venster op te slaan aan die begin van elke iterasie wyser verwys na die lys sel wat hou die waarde net beweeg by die venster uit en vervang moet word met die net toegevoegde waarde. Met behulp van 'n afsluiting wysig Tans hierdie SMA cant nogc wees omdat dit 'n sluiting op die wal ken. Sommige ontsnapping analise kan die hoop toekenning te verwyder. Met behulp van 'n struct wysig Hierdie weergawe vermy die hoop toekenning van die sluiting behoud van die data in die stapel raamwerk van die hooffunksie. Dieselfde uitset: Om te verhoed dat die drywende punt benaderings hou opstapel en die groei, kan die kode 'n periodieke som uit te voer op die hele ronde tou skikking. Dit implementering produseer twee (funksie) voorwerpe deel staat. Dit is idiomatiese in E te skei insette van uitset (lees van skryf), eerder as om dit te kombineer in een voorwerp. Die struktuur is dieselfde as die implementering van Standard DeviationE. Die onderstaande elikser program genereer 'n anonieme funksie met 'n ingeboude tydperk p, wat gebruik word as die tydperk van die eenvoudige bewegende gemiddelde. Die aanloop funksie lees numeriese insette en gee dit aan die nuutgeskepte anonieme funksie, en dan inspekteer die resultaat te STDOUT. Die uitset word hieronder getoon, met die gemiddelde, gevolg deur die gegroepeer insette, wat die basis vorm van elke bewegende gemiddelde. Erlang het sluitings, maar onveranderlike veranderlikes. 'N Oplossing is dan om prosesse en 'n eenvoudige boodskap verby gebaseer API te gebruik. Matrix tale roetines om die sweef avarages vir 'n gegewe volgorde van items bereken. Dit is minder doeltreffend te loop as in die volgende opdragte. Voortdurend gevra vir 'n inset ek. wat by die einde van 'n lys T1. T1 kan gevind word deur te druk 2ND / 1, en gemiddelde kan gevind word in Lys / OPS druk op die program te beëindig. Funksie wat 'n lys met die gemiddeld data van die verskaf argument program wat 'n eenvoudige waarde terug by elke aanroeping terug: lys is die lys word gemiddeld: p is die tydperk: 5 opbrengste die gemiddeld lys: Voorbeeld 2: Die gebruik van die program movinav2 (i , 5) - Inisialiseer bewegende gemiddelde berekening, en definieer tydperk van 5 movinav2 (3, x): x - nuwe data in die lys (waarde 3), en gevolg sal word gestoor op veranderlike x, en vertoon movinav2 (4 x) : x - nuwe data (waarde 4), en die nuwe gevolg sal gestoor word op veranderlike x, en vertoon (43) / 2. Beskrywing van die funksie movinavg: veranderlike r - is die gevolg (die gemiddeld lys) wat veranderlike sal teruggestuur word ek - is die indeks veranderlike, en dit dui op die einde van die sub-lys die lys word gemiddeld. veranderlike Z - 'n helper veranderlike Die funksie gebruik wisselende ek om vas te stel watter waardes van die lys sal in die volgende gemiddelde berekening in ag geneem word. By elke iterasie, veranderlike i dui op die laaste waarde in die lys wat gebruik sal word in die gemiddelde berekening. So ons moet net om uit te vind wat die eerste waarde in die lys sal wees. Gewoonlik goed moet p elemente oorweeg, sodat die eerste element sal die een geïndekseer deur (i-P1) te wees. Maar op die eerste iterasies wat berekening gewoonlik negatief sal wees, sodat die volgende vergelyking negatiewe indekse sal vermy: max (i-p1,1) of, reël die vergelyking, Max (i-P, 0) 1. of, reël die vergelyking, (i - (Max (IP, 0) 1) 1), en dan - maar die nommer van elemente op die eerste iterasies sal ook kleiner wees, sal die korrekte waarde (begin indeks 1 einde indeks) wees , (i-Max (IP, 0)). Veranderlike Z hou die algemene waarde (maksimum (IP), 0) sodat die beginindex sal wees (Z1) en die numberofelements sal wees (iz) die middel (lys, Z1, iz) sal die lys van waarde wat sal gemiddeld som terugkeer ( .) sal hulle som som (.) / (iz) ri sal hulle gemiddeld en stoor die resultaat in die toepaslike plek in die lys gevolg behulp van 'n sluiting en die skep van 'n funksie


No comments:

Post a Comment