Jeg vet at dette er mulig med boost som per. Men jeg virkelig vil unngå å bruke boost jeg har googled og ikke funnet noen egnede eller lesbare eksempler. Basalt vil jeg spore det bevegelige gjennomsnittet av en pågående strøm av en strøm av flytende punktnumre bruker de nyeste 1000 tallene som en dataprøve. Hva er den enkleste måten å oppnå dette på. Jeg eksperimenterte med å bruke et sirkulært array, eksponentielt glidende gjennomsnitt og et enklere glidende gjennomsnitt og fant ut at resultatene fra den sirkulære gruppen som passer meg, trenger best. asked 12. juni 12 på 4 38. Hvis dine behov er enkle, kan du bare prøve å bruke et eksponentielt bevegelige gjennomsnitt. Du gjør bare en akkumulatorvariabel, og når koden ser på hver prøve, oppdaterer koden akkumulatoren med ny verdi Du velger en konstant alfa som er mellom 0 og 1, og beregner dette. Du trenger bare å finne en verdi av alfa hvor effekten av en gitt prøve bare varer i ca 1000 prøver. Hmm, jeg er ikke sikker på at dette er egnet for deg, nå t hatten jeg har satt den her Problemet er at 1000 er et ganske langt vindu for et eksponentielt glidende gjennomsnitt. Jeg er ikke sikker på at det er en alfa som vil spre gjennomsnittet over de siste 1000 tallene, uten understrøm i flytpunktsberegningen. Men hvis du ønsket et mindre gjennomsnitt, som 30 tall eller så, dette er en veldig enkel og rask måte å gjøre det på. Ansatte Jun 12 12 på 4 44. 1 på ditt innlegg Det eksponentielle glidende gjennomsnittet kan tillate at alfaet er variabelt Så dette tillater det brukes til å beregne tidsbasert gjennomsnitt, f. eks. bytes per sekund Hvis tiden siden den siste akkumulatoroppdateringen er mer enn 1 sekund, lar du alpha være 1 0 Ellers kan du la alfa være usecs siden sist oppdatert 1000000 jxh Jun 12 12 ved 6 21.Basisk vil jeg spore det bevegelige gjennomsnittet av en pågående strøm av en strøm av flytende punktnumre ved å bruke de siste 1000 tallene som en dataprøve. Merk at under oppdateringer summen som elementene som lagt til erstattet, slik at kostbare ON-traverser ikke kan beregnes summen som trengs for th e gjennomsnittlig - på forespørsel. Totalt er det laget en annen parameter fra T for å støtte f. eks. ved å bruke lang lang når det er totalt 1000 lange s, en int for char s eller en dobbel til total float s. Dette er litt feil i at numsamples kunne gå forbi INTMAX - hvis du bryr deg om at du kan bruke en usignert lang lang eller bruke et ekstra bool data medlem til å registrere når beholderen er først fylt mens sykkel numempler rundt arrayet best deretter omdøpt noe uskyldig som pos. answered 12 juni 12 på 5 19.En antar at tomromoperatøren T-prøven faktisk er ugyldig operatør T-prøve, uansett 8. juni kl. 14 på 11 52. oPless ahhh godt oppdaget egentlig, jeg mente det skulle være tomt operatør T-prøve, men selvfølgelig kunne du bruke hvilken som helst notasjon du likte Vil rette, takk Tony D Jun 8 14 på 14 27.Is det mulig å implementere et glidende gjennomsnitt i C uten behov for et vindu med prøver. Jeg har funnet ut at jeg kan optimalisere litt ved å velge en vindusstørrelse som er en kraft på to til tillate bit-shifting i stedet for å dele, men ikke trenger en buf fer ville være fint Er det en måte å uttrykke et nytt, flytende gjennomsnittresultat bare som en funksjon av det gamle resultatet og den nye prøven. Finn et eksempel som beveger gjennomsnittet, over et vindu på 4 prøver å være. Legg til ny prøve eA glidende gjennomsnittlig boks implementeres rekursivt, men for en nøyaktig beregning av det bevegelige gjennomsnittet må du huske den eldste innsatsprøven i summen, dvs. a i ditt eksempel. For et lengde N glidende gjennomsnitt beregner du hvor yn er utgangssignalet og xn er inngangen signal Eq 1 kan skrives rekursivt. Så du må alltid huske prøven x nN for å beregne 2. Som påpekt av Conrad Turner, kan du bruke et uendelig langt eksponensielt vindu i stedet, noe som gjør at du kun kan beregne utdataene fra tidligere utgang og nåværende input. but dette er ikke et standard uvevet glidende gjennomsnitt, men et eksponentielt vektet glidende gjennomsnitt, hvor prøver tidligere i det siste får en mindre vekt, men i det minste i teorien glemmer du aldri noe vekter jus t bli mindre og mindre for prøver langt i det siste. Jeg implementerte et glidende gjennomsnitt uten individuelt elementminne for et GPS-sporingsprogram jeg skrev. Jeg starter med 1 prøve og deler med 1 for å få gjeldende avg. I så legger jeg til prøve og divider med 2 til den nåværende avg. Dette fortsetter til jeg kommer til lengden av gjennomsnittet. Hver gang etterpå legger jeg til den nye prøven, får gjennomsnittet og fjerner det gjennomsnittet fra totalen. Jeg er ikke en matematiker, men dette virket som en god måte å gjøre det jeg skjønte det ville slå magen til en ekte matte fyr, men det viser seg at det er en av de aksepterte måtene å gjøre det Og det fungerer bra Bare husk at jo lengre lengre jo tregere er det Følg det du vil følge Det kan ikke hende det meste av tiden, men når du følger satellitter, hvis du er treg, kan stien være langt fra den faktiske posisjonen, og det vil se dårlig. Du kan ha et mellomrom mellom lørdager og de etterfølgende prikkene Jeg valgte en lengde på 15 oppdatert 6 ganger i minuttet for å få ade quate utjevning og ikke komme for langt fra den faktiske lette posisjonen med den glatte stien dots. answered 16. november 16 på 23 03. initialiser totalt 0, teller 0 hver gang du ser en ny verdi. Deretter legger du til en ny scanf, en legger til total newValue, en økningstall, en deling av gjennomsnittlig total telling. Dette ville være et bevegelige gjennomsnitt over alle innganger. For å beregne gjennomsnittet over bare de siste 4 inngangene, ville det kreve 4 inputvariables, kanskje kopiering av hvert inngang til en eldre inputvariable og deretter beregning av det nye glidende gjennomsnittet som summen av de 4 inputvariablene divideres med 4 høyre skift 2 ville være bra dersom alle inngangene var positive for å gjøre gjennomsnittlig beregning. ansvaret 3. februar klokken 4 06. Det vil faktisk beregne totalt gjennomsnitt og IKKE glidende gjennomsnitt Som teller blir større effekten av en ny inngangsprøve blir forsinket liten Hilmar 3. februar kl 13.5. Ditt svar.2017 Stack Exchange, Inc. C-algoritme for null-ventetid eksponentiell glidende gjennomsnitt. Sist endret 2012-08-13.Jeg har vært prøver å implementere en lavfrekvens cutoff i c som i hovedsak tar en strøm av tall og jevner ut utgangen som filtrerer ut høyfrekvent bevegelsesjitter, men det er viktig at de frontveide tallene blir vurdert umiddelbart ettersom dataene er kritiske det er å kontrollere en bevegelsessimulasjonsbase ved bruk av utgang fra litt spillprogramvare Jeg har en arbeidsvektet glidende gjennomsnittlig algoitme, men kunne gjøre med noe litt mer responsivt på forsiden, og jeg fant dette. Pseudokoden er som følger. Inputs Pris NumericSeries, Period NumericSimple Variabler faktor 0, lag 0.if CurrentBar 1 så begynner ZLEMA Prisfaktor 2 Periode 1 lag Periode-1 2 End else start ZLEMA faktor 2 Pris-pris lag 1-faktor ZLEMA 1 end. I har oversatt den til C og min kode er som følger. Men det ser ikke ut til å oppføre seg som jeg forventer. Det ser ut til å være nesten der, men noen ganger får jeg en litt lavere verdi enn alle elementene i køen når de er alle høyere. Min kø og antall elementer i det Passeres som parametere, med de siste til å være foran, til enhver tid, passerer jeg også en inkrementerende teller som starter ved 0 som kreves av funksjonen. Jeg er ikke sikker på at jeg har tolket betydningen av ZLEMA 1 riktig som det ikke er klart i sin pseudokode, så jeg antok at dette var den siste samtalen s zlema, og jeg antar at Pris faktisk betyr Pris 0 Kanskje jeg har dette feil. Jeg skulle kopiere de faktiske Zlema-beregnede verdiene tilbake til min opprinnelige kø før det neste anropet, jeg bytter ikke den opprinnelige køen i det hele tatt, men bare skifter alle verdier en til enden og legger inn det siste i begynnelsen. Koden jeg bruker til å gjøre dette, er. Ville være ekstremt takknemlig hvis noen med bedre forståelse av matte kan snakke om fornuftighet, sjekk dette for meg for å se om jeg har noe litt galt. Takk så mye på forhånd hvis du kan hjelpe. Først takk alt for din innspill, mye verdsatt. Det er fornuftig jeg antar, så jeg antar da det beste Jeg kan håpe på, er bare en eksponent ntial glidende gjennomsnitt, aksepterer det vil være et lite lag, men dette vil bli minimert av tyngre frontvekter enn gitt i typisk vektet glidende gjennomsnitt. Jeg har denne algoritmen også, men et lignende problem ved at verdiene ikke virker ganske riktige med mindre dette er naturen til formelen. For eksempel, si at mitt utvalg inneholder 16 verdier, alle 0 4775 - utgangen er 0 4983, men jeg forventer at den skal være 0 4775.Jeg ser dette ut til deg. Eksponentiell Flytende Gjennomsnittlig Flyt ema Float Vals, Int NumVals, Int CurrentSample Statisk Float Faktor 0 Statisk Float Lastema 0 Float Ema. if CurrentSample 1 EmaVals 0Faktor 2 0 Float NumVals 1 0 Other Ema FactorVals 0 1 0 - faktor lastema lastema ema. return ema Omvendt, er produksjonen noen ganger lavere enn hver av inngangene, selv om alle er høyere. Den kalles på samme måte som zlema ovenfor, med en økende teller. Formelen og pseudokoden for denne er her - takk igjen, unnskyldninger for min misforståelse av noen av grunnleggende vennene, med vennlig hilsen Chris J. As for koden jeg postet, har du rett om størrelsesituasjonen som burde være løst. Som for dine spørsmål.1 Filterkonstanten representerer en frekvens cutoff Jeg brukte en Digital Signal Processing DSP for denne teknikken. Ki Low-pass sfilter er en enkel forklaring. Du vil ha avdelingen for diskret tid. I mitt tilfelle er A den RC-konstant de snakker om. Så frekvensen som den kutter ut er over 1 2 pi A Hvis du ikke har en forståelse av frekvensdomeneteknikk, kan dette bli komplisert. I ditt tilfelle, jo høyere du lager A, desto lavere frekvens vil dette filteret tillate, noe som betyr at det vil jevne kurven ut mer og mer Jo lavere du gjør det, jo mer støy som er tillatt i systemet Husk at A må være større enn eller lik 1 for å være effektiv. Jeg satte igjen XLS på nytt, denne gangen uten skiftende randnummer Juster A-konstanten og se på hvordan det jevner eller filtrerer ut høyfrekvensvariasjonene.2 Det siste punktet i inngangsarrangementet har den nyeste verdien.3 Det samme gjelder for utdatafarmen Den siste er den nyeste verdien.5 NUMVALENE er vilkårlig Du kan kontinuerlig legg til på input og output array så mange ganger du vil, og det ville ikke påvirke filteret. Spesielt brukte jeg 49 poeng. Men jeg kan enkelt slette de siste 20 og de første 29 utgangene vil forbli de samme. Funksjonen er ikke basert på hvor mange poeng blir brukt. Jeg vil gjerne for å nevne at jeg utviklet denne funksjonen for en engangskonvertering Hvis du ville gjøre en konvertering for neste verdi i flyet, kan du prøve noe enklere som vedlagt Igjen jeg er rusten på c Jeg håper dette er riktig Det eneste du ville ha trenger å levere er innspill og filter konstant. Gi meg beskjed om dette hjelper.
Comments
Post a Comment