Jag vet att detta kan uppnås med boost som per. Men jag vill verkligen undvika att använda boost jag har googled och inte hittat några lämpliga eller läsbara exempel. I grund och botten vill jag spåra det rörliga genomsnittet av en pågående ström av en ström av flytande punktnummer Använder de senaste 1000 siffrorna som ett dataprov. Vilket är det enklaste sättet att uppnå detta. Jag experimenterade med att använda ett cirkulärt array, exponentiellt glidande medelvärde och ett enklare glidande medelvärde och fann att resultaten från den cirkulära gruppen passade mina behov bäst. asked jun 12 12 på 4 38. Om dina behov är enkla kan du bara försöka använda ett exponentiellt rörligt medelvärde. Du gör bara en ackumulatorvariabel, och när din kod tittar på varje prov uppdaterar koden ackumulatorn med nytt värde Du väljer en konstant alfa som är mellan 0 och 1 och beräknar detta. Du behöver bara hitta ett värde av alfa där effekten av ett visst prov endast varar för cirka 1000 prov. Hmm, jag är inte säker på att det här är Lämplig för dig, nu t Hat jag har lagt den här Problemet är att 1000 är ett ganska långt fönster för ett exponentiellt rörligt medelvärde. Jag är inte säker på att det finns en alfa som skulle sprida genomsnittet över de senaste 1000 talen utan underflöde i flytpunktsberäkningen. Men om du ville ha ett mindre medelvärde, som 30 nummer eller så, det här är ett mycket enkelt och snabbt sätt att göra det. svarade den 12 juni 12 på 4 44. 1 på ditt inlägg Det exponentiella glidande medlet kan låta alfabetet vara variabelt Så det tillåter det Används för att beräkna tidsbasen medelvärden, t. ex. bytes per sekund Om tiden sedan den senaste ackumulatoruppdateringen är mer än 1 sekund, låter du alpha vara 1 0 Annars kan du låta alfa vara usecs sedan senaste uppdateringen 1000000 jxh jun 12 12 vid 6 21.Basiskt vill jag spåra det rörliga genomsnittet av en pågående ström av en ström med flytande punktnummer med de senaste 1000 siffrorna som ett dataprov. Notera att nedanstående uppdaterar summan som element som tillsatt ersatt, så att kostsamma ON-traverser beräknas Summan - behövs för th e genomsnitt - on demand. Total görs en annan parameter från T för att stödja t. ex. genom att använda en lång lång när totalt 1000 lång s, en int för char s eller en dubbel till total float s. This är lite felaktig i att nummpples kunde Gå förbi INTMAX - om du bryr dig att du kan använda en unsigned long long eller använda en extra bool data medlem att spela in när behållaren fylls första gången cykel nummor runt arrayen bäst sedan bytt namn något harmlöst som pos. answered 12 juni 12 på 5 19.an antar att tomrumsoperatör T-provet är faktiskt tomt operatör T-prov oPlöse 8 juni 14 på 11 52. oPless ahhh väl spotted egentligen menade jag att det skulle vara tomt operatör T-prov men självklart kan du använda vilken anteckning du helst vill fixa, Tack Tony D Jun 8 14 på 14 27. Jag försöker hitta ett sätt att beräkna ett rörligt kumulativt medel utan att lagra räkningen och den totala data som hittills har tagits emot. Jag kom fram med två algoritmer men båda måste lagra räkningen. ny genomsnittlig gammal räkna gamla data nästa data nästa länder Nytt genomsnittligt gammalt medelvärde nästa data - gammalt medelvärde nästa count. The problem med dessa metoder är att räkningen blir större och större vilket resulterar i att man förlorar precision i det resulterande genomsnittet. Den första metoden använder den gamla räkningen och nästa räkning som uppenbarligen är 1 Ifrån varandra Det här fick mig att tänka på att det kanske finns ett sätt att ta bort räkningen men tyvärr har jag inte hittat det än. Det fick mig lite längre men resulterade i den andra metoden men fortfarande räknningen är närvarande. Är det möjligt, eller är jag Bara söker efter det omöjliga. asked den 28 september 12 på 8 46. Det är möjligt att genomföra ett glidande medelvärde i C utan att det behövs ett fönster i prov. Jag har funnit att jag kan optimera lite genom att välja en fönsterstorlek som sa Makt av två för att tillåta bitskiftning istället för att dela men behöver inte buffert vara trevligt Finns det ett sätt att uttrycka ett nytt glidande medelresultat endast som en funktion av det gamla resultatet och det nya provet. , över ett fönster med 4 prov att vara. Add Nytt prov eA glidande medelvärde kan implementeras rekursivt men för en exakt beräkning av glidande medelvärde måste du komma ihåg det äldsta inmatningsexemplet i summan, dvs a i ditt exempel. För ett längd N glidande medelvärde beräknar du. Där yn är utgången signal och xn är ingångssignalen. Eq 1 kan skrivas rekursivt som. Så du behöver alltid komma ihåg provet x nN för att beräkna 2. Som påpekad av Conrad Turner kan du använda ett oändligt långt exponentialfönster istället vilket tillåter Du beräknar endast utgången från den tidigare utgången och den aktuella ingången. Men det här är inte ett vanligt obetydligt glidande medelvärde, men ett exponentiellt vägat glidande medelvärde, där proverna i det förflutna har en mindre vikt, men åtminstone teoretiskt glömmer du aldrig Allt viktarna blir bara mindre och mindre för prover långt borta. Jag genomförde ett glidande medelvärde utan individuellt objektminne för ett GPS-spårprogram som jag skrev. Jag börjar med 1 prov och dela med 1 för att få c Urrent avg. Jag lägger sedan anothe prov och delar med 2 till den nuvarande avg. This fortsätter tills jag kommer till längden av genomsnittet. Varje gång efteråt lägger jag till i det nya provet, får medelvärdet och tar bort det genomsnittet från Totalt. Jag är inte en matematiker men det verkade som ett bra sätt att göra det. Jag tänkte att det skulle vända på magen på en riktig matte kille men det visar sig att det är ett av de accepterade sätten att göra det. Och det fungerar bra Kom bara ihåg Att ju högre längden desto långsammare följer det du vill följa. Det kan inte ha betydelse för det mesta, men när du följer satelliter, om du är långsam, kan spåret vara långt ifrån den verkliga positionen och det kommer att se dåligt ut. Du kan ha ett mellanrum mellan mitten och de efterföljande punkterna jag valde en längd på 15 uppdaterad 6 gånger per minut för att få tillräcklig utjämning och inte komma för långt från den faktiska lätta positionen med de släta spårpunkterna. svarade 16 november 16 vid 23 03.initialiserar totalt 0, räkna 0 varje gång du ser ett nytt värde. Därefter en input scanf, man lägger till totalt nyttValue, ett inkrementstal, en dela genomsnittlig totalräkning. Detta skulle vara ett glidande medelvärde för alla inmatningar. För att beräkna genomsnittet över endast de senaste 4 ingångarna, skulle det behöva 4 ingångsvariabler, kanske kopiering av varje ingång till en äldre ingångsvariabel, då beräknas det nya glidande medlet som summa av de fyra ingångsvariablerna dividerat med 4 höger skift 2 skulle vara bra om alla ingångar var positiva för att göra den genomsnittliga beräkningen. svarade den 3 februari kl. 04 06. Det kommer faktiskt att beräkna det totala genomsnittet och INTE det glidande genomsnittet När räkningen blir större blir effekterna av ett nytt ingångsprov försvinnande liten. Hilmar 3 feb kl 13 på 13 53. Ditt svar.2017 Stack Exchange, Inc.
No comments:
Post a Comment