Saturday 28 October 2017

Painotettu Liukuva Keskiarvo C


Yritän laskea signaalin liikkuvaa keskiarvoa Signaalin arvo kaksinkertainen päivitetään satunnaisiksi aikoina Etsin tehokasta tapaa laskea sen ajan painotettu keskiarvo ajan ikkunassa, reaaliajassa voisin tehdä sen itseäni, Mutta se on haastavampi kuin ajattelin. Useimmat resurssit, jotka olen löytänyt Internetin kautta laskevat liukuvan keskiarvon jaksollisen signaalin, mutta minun päivitykset satunnaisessa ajassa. Onko kukaan tiedä hyviä resursseja varten. Hitti on seuraava Saat päivitykset satunnaisiksi aikoina tyhjää päivitysaikataulua, float-arvoa. Sinun on myös seurattava, milloin päivitys putoaa aikavaiheesta, joten asetat hälytyksen, joka kutsuttiin ajankohtana N, joka poistaa edellisen päivityksen, jos sitä ei enää koskaan harkita laskennassa . Jos näin tapahtuu reaaliaikaisesti, voit pyytää käyttöjärjestelmää soittamaan meneillään olevaan menetelmään void dropoffoldestupdate int aikaa kutsuttaessa ajankohtana N. Jos tämä on simulaatio, et saa apua käyttöjärjestelmästä ja sinun on d o se manuaalisesti Simuloinnissa kutsutte menetelmiä, joiden aika toimitettiin argumenttina, joka ei korreloi reaaliaikaisesti. Kohtuullisena oletuksena on kuitenkin, että puhelut ovat taatusti sellaisia, että aika-argumentit kasvavat. Tässä tapauksessa sinun on ylläpitää lajiteltua hälytysaika-arvojen luetteloa ja tarkistaa jokaisen päivityksen ja lukevan puhelun osalta, onko aika-argumentti suurempi kuin hälytysluettelon pää. Vaikka se on suurempi, hälytyksen käsittely keskeyttää vanhimman päivityksen, irrota pää Ja tarkista uudelleen, kunnes kaikki hälytykset ennen tietyn ajan käsitellään Sitten päivitä call. I olet toistaiseksi olettaa, että on selvää, mitä teet varsinaisen laskennan, mutta aion laatia vain, jos oletan sinulla on menetelmä float lue luennon arvo, jonka käytät arvojen lukemiseen. Tavoitteena on tehdä soitosta mahdollisimman tehokas. Joten et lasketa liukuvaa keskiarvoa joka kerta, kun lukemista kutsutaan. Sen sijaan, että olet ennakkoluulottanut arvoa viimeisestä päivityksestä söi tai viimeisen hälytyksen ja nosta tätä arvoa muutamalla liukukappaustoiminnolla, jotta voidaan ottaa huomioon ajan kuluminen viimeisen päivityksen jälkeen, eli jatkuvia toimintoja, paitsi ehkä pilkottavien hälytysten luettelon käsittelyä. Toivottavasti tämä on selvää - Tämän pitäisi olla melko yksinkertainen algoritmi ja melko tehokas. Jotta optimointi yksi jäljellä olevista ongelmista on, jos suuri määrä päivityksiä tapahtuu aikataulussa, niin on olemassa pitkä aika, jolloin ei ole lukemia eikä päivityksiä, ja sitten lukea Tai päivitys tulee tässä tapauksessa Tässä tapauksessa edellä oleva algoritmi ei ole tehokas päivittäessään päivittäin vähitellen jokaista päivitettävää päivitystä. Tämä ei ole välttämätöntä, koska huolehdimme vain viimeisestä päivityksestä aikataulun jälkeen, joten jos on olemassa tapa jotta kaikki vanhat päivitykset poistettaisiin tehokkaasti, se auttaisi. Tätä varten voimme muokata algoritmia tekemään binääritutkimuksen päivityksiä, jotta löydämme viimeisimmän päivityksen ennen aikarajaa Jos suhteellisen vähän päivityksiä, jotka on pudonnut, voidaan päivittää päivittäin vähitellen päivittäinen päivitys. Mutta jos on useita päivityksiä, jotka on pudonnut, voidaan laskea uudelleen arvosta tyhjästä vanhojen päivitysten pudotuksen jälkeen. Lisätään lisäyslaskutoimitukseen. mitä tarkoitan inkrementaalisen laskennan yläpuolella virkkeessä tweak tätä arvoa pari liukuluku toimintoja huomioon aika kulua viimeisimmän päivityksen Initial ei-inkrementaalinen laskenta. jälkeen iterate over relevantupdates ajan myötä order. movingaverage sum lastupdate timesincelastupdate windowlength. Now jos täsmälleen yksi päivitys putoaa ikkunasta, mutta uusia päivityksiä ei tule, säädä summa niin. Huomaa, että se on priorupdate, jonka aikaleima on muuttunut viimeisen ikkunan alkuun ja jos tarkka päivitys tulee uuteen ikkunaan, mutta uusia päivityksiä ei ole pudonnut, säädä summa. Tämä on karkea luonnos, mutta toivottavasti se näyttää, kuinka voi ylläpitää keskimäärää siten, että se on O 1 - toimintaa päivitettäessä jaksotettuun määrään. Mutta huomaa lisäoptimointi edellisessä kappaleessa. Huomata myös vakausongelmat, joihin viitataan vanhemmassa vastauksessa, mikä tarkoittaa, että liukulukuvirheet voivat kertyä suuren määrän sellaisia ​​inkrementaalisia Toiminnot siten, että sovelluksen kannalta merkitsevän täydellisen laskutoimituksen ero poikkeaa. Jos approksimaatio on OK ja siellä on minimi aikaa näytteiden välillä, voit kokeilla supernäytteenottoa Onko taulukko, joka edustaa tasaisesti eri aikavälejä, jotka Ovat lyhyempiä kuin minimi, ja jokaisella ajanjaksolla tallennetaan viimeisin otettu näyte. Mitä lyhyempi aikaväli, sitä lähempi keskiarvo on todellinen valu E Jakson ei pitäisi olla suurempi kuin puolet vähimmäismäärästä tai on mahdollisuus puuttua näyte. Vastattu 15 joulukuu 11 klo 18 12. vastannut 15. joulukuuta 11 klo 22 38. Kiitos vastauksesta Yksi parannus, joka olisi tarpeen sitä todella välimuisti koko keskimääräisen arvon, joten emme silmukoita koko ajan. Myös se voi olla pieni piste, mutta eikö olisi tehokkaampaa käyttää arvoa tai luetteloa arvon tallentamiseksi, koska oletamme, että päivitys tulee Oikeassa järjestyksessä Insertion olisi nopeampi kuin kartassa Arthur Dec 16 11 at 8 55.Yes, voit välimuistin summan summan Vähennä poistettujen näytteiden arvot, lisätä lisättävien näytteiden arvot Myös kyllä, deque pair Näyte, päivämäärä saattaa olla tehokkaampi Valitsin kartan luettavaksi ja helppokäyttöisyys kartan yläreunaan Kuten aina, kirjoita ensin oikea koodi, sitten profiili ja mittaa inkrementaaliset muutokset Rob Dec 16 11 at 15 00.Note Ilmeisesti tämä ei ole Tapa lähestyä tätä Jätä se tänne viittaamaan siihen, mikä on väärin tämän AP: n kanssa Lähestymistapa Tarkista kommentit. UPDATED - perustuu Oli s kommentoida ole varma epävakaudesta, että hän puhuu though. Use lajiteltu kartta saapumisaikoja vastaan ​​arvoja Saapuessaan arvo Lisää saapumisaika lajiteltu kartta sen kanssa s arvo ja päivitä liukuva keskiarvo. warning tämä on pseudokoodi. Ei ole täysin fleshed ulos, mutta saat idea. Things huomata Kuten sanoin yllä on pseudokoodi sinun tulee valita sopiva kartta Älä poista paria te iteraat läpi, kun kumoat iteraattorin ja sinun täytyy aloittaa uudelleen Katso oi s kommentti myös below. reserted Dec 15 11 at 12 22.This doesn t työtä se doesn t ottaa huomioon, mikä osuus ikkunan pituudesta jokainen arvo on olemassa Myös tämä lähestymistapa lisäämällä ja vähentämällä on vain vakaa kokonaislukujen osalta, ei kelluvia Oliver Charlesworth 15.12.12 klo 12 29. OliCharlesworth - Anteeksi Olen jättänyt joitakin keskeisiä kohtia kuvauksessa kaksinkertainen ja aikapainotettu aion päivittää Thanks Dennis Dec 15 11 klo 12 33. Aikapainotus on vielä yksi ongelma Mutta en ole sitä, mistä puhun, viittasin siihen, että kun uusi arvo tulee ensin aikalohkoon, sen osuus keskiarvoon on minimaalinen. Sen osuus kasvaa edelleen, kunnes uusi arvo tulee Oliver Charlesworthin joulukuu 15 11 klo 12 35. Tiedän, että tämä on saavutettavissa lisäämällä per per. Mutta en todellakaan halua käyttää boost Olen googled eikä ole löytänyt mitään sopivia tai luettavia esimerkkejä. Oikeudellisesti haluan seurata liikkuvat keskimääräinen virtausvirta kelluvia pisteitä käyttäen viimeisimpiä 1000 numeroa datanäytteeksi. Mikä on helpoin tapa saavuttaa tämä. Olen kokeillut pyöreän taulukon, eksponentiaalisen liukuvan keskiarvon ja yksinkertaisemman liukuvan keskiarvon ja todettiin, että pyöreän sarjan tulokset sopivat tarpeisiini parhaiten. Kysyin 12. kesäkuuta 12.4. Jos tarpeitasi ovat yksinkertaisia, voit vain yrittää käyttää eksponentiaalista liukuvaa keskiarvoa. Voit yksinkertaisesti tehdä akunmuuttujan ja turkin E tarkastelee jokaista näytettä, koodi päivittää akun uudella arvolla. Valitset jatkuvan alfa-arvon, joka on välillä 0 ja 1, ja lasketaan tämä. Sinun tarvitsee vain löytää alfa-arvo, jossa tietyn näytteen vaikutus kestää vain Noin 1000 näytettä. Hmm, en todellakaan ole varma, että tämä sopii sinulle, nyt, että olen pannut sen tänne Ongelmana on, että 1000 on melko pitkä ikkuna eksponentiaalisen liukuvan keskiarvon suhteen. En ole varma, että on alfa, joka levisi Keskimäärin viimeisten 1000 numeron aikana, ilman alivirtausta liukulukulaskennassa. Mutta jos haluat pienemmän keskiarvon, kuten 30 numeroa, niin tämä on erittäin helppo ja nopea tapa tehdä se. Vastattu 12. kesäkuuta 12 4 44. 1 viestissäsi Eksponentiaalinen liukuva keskiarvo voi antaa alfa-arvon muuttuvan Näin ollen sen avulla voidaan laskea aikaperustan keskiarvot esim. tavut sekunnissa Jos aika viimeisen akun päivityksen jälkeen on yli 1 sekunti, anna alfa olla 1 0 Muutoin , voit antaa alfa olla usecs päivityksen jälkeen 1000000 jxh Kesäkuu 12 12 at 6 21.Oikeastaan ​​haluan seurata liukuvan pistemäärän virran jatkuvan virran liikkuvan keskiarvon käyttämällä viimeisintä tuhatta numeroa datanäytteeksi. Huomaa, että alla päivitetään kokonaissumma lisättyinä lisättyinä elementteinä, Vältetään kallis ON-matka laskemalla summa, jota tarvitaan keskimäärin - kysyntään. Kokonaisparametri on T: sta erilaiseen parametriin, esim. Pitkäaikaiseen käyttöön, kun se on yhteensä 1000 pitkä s, int on char, tai kaksinkertainen kokonaiseen float s. Tämä on hieman virheellinen siinä, että numsamples voisi mennä ohitse INTMAX - jos välität, voit käyttää allekirjoittamatonta pitkä kauan tai käytä ylimääräistä bool data - jäsenen tallentamaan, kun kontti täytetään ensimmäistä kertaa pyöräilemällä numsamples ympäri array parhaiten sitten nimetyn jotain innocuous like pos. answered Jun 12 12 at 5 19.one olettaa, että tyhjä operaattori T-näyte on todella tyhjä operaattori T-näyte oPless 8 kesäkuu 14 at 11 52. oPless ahhh hyvin havaittu itse tarkoitti, että se olisi tyhjä operaattorin T näyte, mutta Tietenkin voit käyttää whate Ver-notation pidit Korjaa, kiitos Tony D 8 kesäkuu 14 at 14 27. Onko mahdollista toteuttaa liikkuvan keskiarvon C ilman näytekappaleen ikkunaa. Olen huomannut, että voin optimoida hieman, valitsemalla ikkunan Koon, joka saa kaksivoimaa voidakseen vaihtaa bitin sijaan jakamista, mutta puskuri ei tarvitsisi olla mukava Onko olemassa keino ilmaista uutta liikkuvaa keskimääräistä tulosta vain vanhan tuloksen ja uuden mallin funktiona. Esimerkiksi liukuva keskiarvo, näytön neljän näytteen ikkunan yli. Lisää uusi näyte eA liukuva keskiarvo voidaan toteuttaa rekursiivisesti, mutta liikkumattomien keskiarvojen täsmällisen laskemisen kannalta sinun on muistettava summasta vanhin sisääntulonäytte, esim. A esimerkissasi Jos pituus N liikkuva keskiarvo lasketaan. where yn on lähtösignaali ja xn on tulosignaali Eq 1 voidaan kirjoittaa rekursiivisesti niin. Joten sinun täytyy aina muistaa näytteen x nN jotta voidaan laskea 2.As huomautti Conrad Turner, voit käyttää äärettömän pitkää eksponentiaalista ikkuna-istetta Ad, jonka avulla voit laskea tuotoksen vain aiemmasta lähdöstä ja nykyisestä syötteestä. Mutta tämä ei ole tavanomainen painottamaton liukuva keskiarvo vaan eksponentiaalisesti painotettu liukuva keskiarvo, jossa näytteet aiemmin saivat pienemmän painon mutta ainakin teoriaa et koskaan unohda mitä tahansa painoja vain pienempiä ja pienempiä näytteitä paljon aiemmin. Olen toteutettu liukuva keskiarvo ilman yksittäisiä elementti muisti GPS seurantaohjelma kirjoitin. Olen aloittaa 1 näyte ja jakaa 1 saada nykyinen avg. I sitten lisäät anothe näyte ja jaa 2 nykyiseen avg. This jatkuu, kunnes saan keskimääräinen pituus. Jokainen aika myöhemmin, lisään uuteen näyte, saat keskimäärin ja poista keskimääräinen kokonaismäärästä. En ole matemaatikko, mutta tämä tuntui hyvä tapa tehdä se Ajattelin, että se muuttuisi todellisen matemaattisen kaverin vatsasta, mutta osoittautuu, että se on yksi hyväksytty tavoista tehdä se Ja se toimii hyvin Muista vain, että Suurempi pituus, sitä hitaampi se Seuraa mitä haluat seurata Se ei ole väliä suurimman osan ajasta, mutta kun seuraavat satelliitit, jos olet hidas, polku voi olla kaukana todellisesta sijainnista ja se näyttää huonolta Sinulla voi olla ero sat ja takana pistettä valitsin pituus 15 päivitetty 6 kertaa minuutissa saada riittävän tasoitus ja ei pääse liian kaukana varsinaisesta sat positiosta tasoitettu polku dots. vastattu 16 marraskuu 16 klo 23 03.initialize yhteensä 0, laskea 0 aina nähdä uusi arvo. Joten yksi tulo scanf, yksi lisätään uusi uusi arvo, yksi lisäysluku, yksi jakaa keskimääräinen kokonaislaskenta. Tämä olisi liikkuva keskiarvo kaikkien tulojen suhteen. Laskettaessa keskimäärin vain viimeisten neljän tulon osalta, tarvitsisi neljä tulomuuttujaa, ehkä Kopioidaan jokaisen syötteen vanhempiin syötettävyyteen, lasketaan sitten uusi liikkuva keskiarvo neljän syöttövariabeenin summana jaettuna 4 oikealle siirtymälle 2 olisi hyvä, jos kaikki panokset olisivat positiivisia laskemalla keskimääräinen laskutoimitus. Se todellisuudessa on noin Laskea keskimääräinen keskiarvo ja EI liikkumaton keskiarvo Kun laskenta kasvaa, uuden tulonäytteen vaikutus muuttuu vähäiseksi Hilmar 3. helmikuuta klo 13 53. Vastauksesi.2017 Stack Exchange, Inc.

No comments:

Post a Comment