Skip to main content

Moving Gjennomsnittet Pic


Som andre har nevnt, bør du vurdere et IIR uendelig impulsresponsfilter i stedet for det FIR-finale impulsresponsfilteret du bruker nå Det er mer til det, men ved første øyekast implementeres FIR-filtre som eksplisitte konvolutter og IIR-filtre med ligninger. bestemt IIR-filter Jeg bruker mye i mikrokontrollere er et enkeltpolet lavpasfilter Dette er den digitale ekvivalenten til et enkelt RC-analogfilter For de fleste applikasjoner vil disse ha bedre egenskaper enn det boksfilter du bruker Mest bruk av et eskefilter som jeg har møtt, er et resultat av at noen ikke betaler oppmerksomhet i digital signalbehandlingsklasse, ikke som følge av at de trenger deres spesielle egenskaper. Hvis du bare vil dempe høyfrekvenser som du vet er støy, er et enkeltpolet lavpasfilter bedre. beste måten å implementere en digital på en mikrokontroller er vanligvis. FILT - FILT FF NEW - FILT. FILT er et stykke vedvarende tilstand Dette er den eneste vedvarende va pålitelig må du beregne dette filteret NYTT er den nye verdien som filteret blir oppdatert med denne iterasjonen. FF er filterfraksjonen som justerer filterets tyngde. Se på denne algoritmen, og se at for FF 0 er filteret uendelig tungt siden utgangen endres aldri For FF 1 er det egentlig ikke noe filter i det hele tatt, siden utgangen bare følger inngangen. Nyttige verdier er i mellom På små systemer velger du FF til 1 2 N slik at multipliseringen med FF kan oppnås som en høyre skift ved N biter For eksempel kan FF være 1 16 og multipliserer med FF derfor en riktig skift på 4 biter. Ellers trenger dette filteret bare en subtrahering og ett tillegg, selv om tallene vanligvis må være bredere enn inngangsverdien mer på numerisk presisjon i et eget avsnitt nedenfor. Jeg bruker vanligvis AD-lesinger betydelig raskere enn de trengs, og bruker to av disse filtre kaskad Dette er den digitale ekvivalenten til to RC-filtre i serie, og demper med 12 dB oktav over rollen frekvens For AD-avlesninger er det imidlertid vanligvis mer relevant å se på filteret i tidsdomene ved å vurdere trinnresponsen. Dette forteller deg hvor fort systemet ditt vil se en endring når tinget du måler forandringer. For å lette utformingen av disse filtrene som bare betyr å plukke FF og bestemme hvor mange av dem som skal kaskade, bruker jeg mitt program FILTBITS Du angir antall skiftbiter for hver FF i den kaskade serien av filtre, og den beregner trinnresponsen og andre verdier. Egentlig kjører jeg vanligvis dette via min wrapper script PLOTFILT Dette kjører FILTBITS, som lager en CSV-fil, og plottar deretter CSV-filen. For eksempel, her er resultatet av PLOTFILT 4 4.De to parameterne til PLOTFILT betyr at det vil være to filtre kaskade av typen beskrevet ovenfor. Verdiene av 4 angir antall skiftbiter for å realisere multiplikasjonen med FF De to FF-verdiene er derfor 1 16 i dette tilfellet. Det røde sporet er enhetens trinnrespons, og er det viktigste å se på. Er det slik at hvis inngangen endres øyeblikkelig, vil utgangen av det kombinerte filteret sette seg til 90 av den nye verdien i 60 iterasjoner Hvis du bryr deg om 95 settlingstid, må du vente på 73 iterasjoner, og i 50 oppgjørstid bare 26 iterasjoner . Den grønne sporen viser deg utgangen fra en enkelt full amplitude spike Dette gir deg en ide om tilfeldig støyundertrykking. Det ser ut til at ingen enkelt prøve vil forårsake mer enn en 2 5 endring i utgangen. Det blå sporet er å gi en subjektiv følelse av hva dette filteret gjør med hvit støy Dette er ikke en streng test siden det ikke er noen garanti for nøyaktig hva innholdet av tilfeldige tall ble plukket som den hvite støyinngangen for denne runden av PLOTFILT Det er bare for å gi deg en grov følelse av hvor mye det vil bli squashed og hvor glatt det er. PLOTFILT, kanskje FILTBITS, og mange andre nyttige ting, spesielt for PIC-fastvareutvikling, er tilgjengelig i PIC Development Tools-programvareutgivelsen på min nedlastinger for programvare. dedikert til numerisk presisjon. Jeg ser fra kommentarene og nå et nytt svar at det er interesse i å diskutere antall bits som trengs for å implementere dette filteret Merk at multipliseringen med FF vil skape Log 2 FF nye biter under binærpunktet På små systemer , Er FF vanligvis valgt til å være 1 2 N slik at denne multipliseringen faktisk er realisert ved en rettforskyvning av N bits. FILT er derfor vanligvis et fast punkt heltall. Merk at dette ikke endrer noen av matematikken fra prosessorens synspunkt Hvis du for eksempel filtrerer 10 bit AD-avlesninger og N 4 FF 1 16, trenger du 4 brøkdeler under 10 biters heltall-AD-avlesninger. En av prosessorene gjør at du gjør 16 biters heltalloperasjoner på grunn av 10-biters AD-avlesningene. I dette tilfellet kan du likevel gjøre nøyaktig de samme 16 biters integeroperasjoner, men begynner med AD-avlesningene skiftet med 4 bits. Prosessoren vet ikke forskjellen og trenger ikke å gjøre matematikken på hele 16 bit heltall fungerer, uansett om du anser dem for å være 12 4 faste punkter eller ekte 16 bit heltall 16 0 fast punkt. Generelt må du legge til N bits hver filterpole hvis du ikke vil legge til lyd på grunn av den numeriske representasjonen. I eksemplet ovenfor ville det andre filteret av to ha å ha 10 4 4 18 biter for ikke å miste informasjon I praksis på en 8-bits maskin som betyr at du bruker 24 bitverdier Teknisk, bare den andre polen på to ville trenge den bredere verdien, men for enkelhet i fastvare bruker jeg vanligvis den samme representasjonen, og dermed den samme koden for alle polene i et filter. Normalt skriver jeg en subrutine eller makro for å utføre en filterpoleoperasjon, og deretter bruke det til hver pol. En subroutine eller makro avhenger av om sykluser eller programminne er viktigere i det bestemt prosjekt Uansett bruker jeg litt ripe til å passere NY inn i subrutinen makroen, som oppdaterer FILT, men laster også inn i den samme riperstaten NYTT var i Dette gjør det enkelt å bruke flere poler siden den oppdaterte FILT av en pol er NE W av den neste Når en subrutine er, er det nyttig å ha en pekepunkt til FILT på vei inn, som oppdateres til like etter FILT på vei ut. På den måten fungerer subrutinen automatisk på etterfølgende filtre i minnet hvis det kalles flere ganger Med en makro trenger du ikke en peker siden du sender inn adressen for å operere på hver iterasjon. Kodeeksempler. Her er et eksempel på en makro som beskrevet ovenfor for en PIC 18.Og her er en lignende makro for en PIC 24 eller dsPIC 30 eller 33.Both disse eksemplene er implementert som makroer ved hjelp av min PIC assembler preprocessor som er mer kapabel enn noen av de innebygde makroanleggene. clabacchio Et annet problem jeg burde ha nevnt, er implementering av fastvare Du kan skrive en enkeltpolet lavpassfilter subrutine en gang, og deretter bruke den flere ganger Faktisk skriver jeg vanligvis en slik subrutine for å ta en peker i minnet til filtertilstanden, så har du det på forhånd pekeren slik at den kan kalles i rekkefølge lett for å realisere flerpolige filtre Olin Lathrop Apr 20 12 til 15 03.1 Takk for svarene dine - alle av dem bestemte jeg meg for å bruke dette IIR-filteret, men dette filteret brukes ikke som et Standard LowPass-filter, siden jeg trenger gjennomsnittlige counterverdier og sammenligner dem for å oppdage endringer i et bestemt område, siden disse verdiene er av svært forskjellige dimensjoner avhengig av maskinvare jeg ønsket å ta et gjennomsnitt for å kunne reagere på disse maskinvarene spesifikke endringer automatisk senselen 21 mai 12 kl 12 06. Hvis du kan leve med begrensningen av en kraft på to antall elementer til gjennomsnittet, dvs. 2,4,8,16,32 etc, kan dividen enkelt og effektivt gjøres på en lav ytelse mikro med ingen dedikert deling fordi det kan gjøres som en bit skift Hvert skift høyre er en kraft på to f. eks. OPen trodde han hadde to problemer, delt i en PIC16 og minne for hans ring buffer Dette svaret viser at delingen Det er ikke vanskelig. Det tar ikke opp minneproblemet, men SE-systemet tillater delvise svar, og brukerne kan ta noe fra hvert svar for seg selv, eller til og med redigere og kombinere andre svar. Siden noen av de andre svarene krever en splittelse, er likevel ufullstendig fordi de ikke viser hvordan man effektivt oppnår dette på en PIC16 Martin 20 april 12 på 13 01. Det er et svar på et ekte glidende gjennomsnittsfilter aka boxcar filter med mindre minnebehov, hvis du ikke har det galt, kalt et kaskadeintegrator-kamfilter CIC Ideen er at du har en integrator som du tar forskjeller over en tidsperiode, og nøkkelminnebesparende enheten er at ved nedsampling behøver du ikke å lagre eve ry verdi av integratoren Det kan implementeres ved hjelp av følgende pseudokode. Din effektive bevegelige gjennomsnittslengde er decimationFactor stateize, men du trenger bare å beholde stateize-prøver. Selvfølgelig kan du få bedre ytelse dersom stateize og decimationFactor er krefter på 2, slik at divisjon og resten operatører blir erstattet av skift og maske-og. Postscript Jeg er enig med Olin om at du alltid bør vurdere enkle IIR-filtre før et glidende gjennomsnittlig filter. Hvis du ikke trenger frekvens-nullene til et boxcarfilter, en 1-polet eller 2-polet lavpasfilter vil trolig fungere fint. Hvis du imidlertid filtrerer med henblikk på dekimering, tar du en høyprøve-hastighetsinngang og gjennomsnittsverdi den for bruk ved en lavprosessprosess, da et CIC-filter kan være akkurat det du leter etter, spesielt hvis du kan bruke stateize 1 og unngå ringbufferen helt med bare en enkelt tidligere integrator verdi. Det er noen grundig analyse av matematikken bak ved å bruke de første ordene er IIR-filteret som Olin Lathrop allerede har beskrevet over på Digital Signal Processing-stakkutvekslingen, inneholder mange flotte bilder. Ligningen for dette IIR-filteret er. Dette kan implementeres ved hjelp av heltall, og ingen deling ved hjelp av følgende kode kan trenge litt feilsøking som jeg var å skrive fra minnet. Dette filteret tilnærmer et glidende gjennomsnitt av de siste K-prøvene ved å sette verdien av alfa til 1 K Gjør dette i forrige kode ved å definere BITS til LOG2 K, dvs. for K 16 sett BITS til 4, for K 4 sett BITS til 2, etc. Jeg vil verifisere koden som er oppført her så snart jeg får en endring og rediger dette svaret hvis nødvendig. Ansatt Jun 23 12 kl 04 04. Her er enpolet lavpasfilter glidende gjennomsnitt, med cutoff frekvens CutoffFrequency Svært enkel, veldig rask, fungerer bra, og nesten ingen minne overhead. Note Alle variabler har omfang utover filterfunksjonen, bortsett fra det passerte i newInput. Note Dette er et enkeltstadiefilter Flere stadier kan bli kaskad sammen for å øke skarphet av filteret Hvis du bruker mer enn ett trinn, må du justere DecayFactor som angår Cutoff-Frequency for å kompensere. Og åpenbart alt du trenger er de to linjene plassert hvor som helst, de trenger ikke egen funksjon. Dette filteret har en rampetid før det bevegelige gjennomsnittet representerer det av inngangssignalet. Hvis du trenger å omgå denne oppkjøretiden, kan du bare initialisere MovingAverage til den første verdien av newInput istedenfor 0, og håper at den første newInput ikke er en outlier. CutoffFrequency SampleRate har en rekkevidde mellom 0 og 0 5 DecayFactor er en verdi mellom 0 og 1, vanligvis i nærheten av 1.Single-presisjon flyter er gode nok for de fleste ting, jeg foretrekker bare dobbeltrom Hvis du trenger å holde fast med heltall, kan du konvertere DecayFactor og Amplitude Factor til brøkdelte tall, hvor telleren er lagret som heltallet, og nevneren er et heltall på 2, slik at du kan bitskifte til høyre som nevner i stedet for å måtte dele seg under filtersløyfen For For eksempel, hvis DecayFactor 0 99, og du vil bruke heltall, kan du angi DecayFactor 0 99 65536 64881 Og så når du multipliserer med DecayFactor i filtersløyfen, skift du bare resultatet 16.For mer informasjon om dette, en utmerket bok som s online, kapittel 19 om rekursive filtre. PS For det Moving Average paradigmet, en annen tilnærming til å sette DecayFactor og AmplitudeFactor som kan være mer relevant for dine behov, la oss si at du vil ha det forrige, ca 6 elementer i gjennomsnitt tog eter, gjør det diskret, du d legger til 6 elementer og deler med 6, slik at du kan sette AmplitudeFactor til 1 6 og DecayFactor til 1 0 - AmplitudeFactor. answered 14 mai 12 på 22 55. Alle andre har kommentert grundig på verktøyet av IIR vs FIR, og på power-of-two divisjon Jeg vil bare gi noen implementasjonsdetaljer. Nedenfor fungerer bra på små mikrocontrollere uten FPU. Det er ingen multiplikasjon, og hvis du beholder N en kraft på to, vil hele divisjonen er single-cycle bit-shifting. Basic FIR ring buffer holde en kjører buffer av de siste N verdiene, og en kjører SUM av alle verdiene i bufferen Hver gang en ny prøve kommer inn, trekker du den eldste verdien i bufferen fra SUM , erstatt den med den nye prøven, legg til den nye prøven til SUM, og utdata SUM N. Modified IIR ringbufferen holde en løpende SUM av de siste N-verdiene Hver gang en ny prøve kommer inn, SUM - SUM N, legger du til den nye prøve og utdata SUM N. answered 28 Aug 13 på 13 45. Hvis jeg leser deg riktig, beskriver du en første ordre IIR filtrere verdien du trekker, er ikke den eldste verdien som faller ut, men er i stedet gjennomsnittet av tidligere verdier. Førstegangs IIR-filtre kan sikkert være nyttig, men jeg er ikke sikker på hva du mener når du foreslår at utgangen er den samme for alle periodiske signaler Ved en 10 kHz samplingsfrekvens vil fôring av en 100 Hz firkantbølge i et 20-trinns boksfilter gi et signal som stiger jevnt for 20 prøver, sitter høyt for 30, faller jevnt for 20 prøver og sitter lavt for 30 En førstegangs IIR filter supercat Aug 28 13 til 15 31. vil gi en bølge som skarpt begynner å stige og gradvis avtar nær, men ikke ved inngangs maksimum, så begynner det å falle og gradvis avstand nær, men ikke ved inngangen minimum Svært ulik adferd supercat Aug 28 13 til 15 32. Et problem er at et enkelt bevegelige gjennomsnitt kan eller ikke kan være nyttig Med et IIR-filter kan du få et fint filter med relativt få beregninger. Den FIR du beskriver kan bare gi deg en rektangel i tid - en sync i freq - og du kan ikke styre sidelobene. Det kan være vel verdt det å kaste inn noen få heltall multipliserer for å gjøre det til en fin symmetrisk tunbar FIR hvis du kan spare klokken ticks Scott Seidman Aug 29 13 på 13 50. ScottSeidman Nei behov for multipliserer hvis man bare har hvert trinn i FIR, enten utdataene gjennomsnittet av inngangen til det stadiet og dets tidligere lagrede verdi, og deretter lagre inngangen hvis man har numerisk rekkevidde, man kan bruke summen heller enn gjennomsnittet, enten det s bedre enn et boksfilter avhenger av applikasjonen, vil trinnresponsen til et boksfilter med en total forsinkelse på 1 ms for eksempel ha en stygg d2 dt spike når inngangen endres, og igjen 1 m senere, men vil ha det minste mulige d dt for et filter med totalt 1ms forsinkelse supercat Aug 29 13 på 15 25. Hvis mikeselektriske stoffer sa at hvis du virkelig trenger å redusere minnebehovet, og du ikke husker at ditt impulsrespons er eksponentielt i stedet for en rektangulær puls, ville gå for en eksponentiell flytende ave raser filter Jeg bruker dem i stor grad Med den typen filter trenger du ikke noen buffer Du trenger ikke å lagre N forbi prøvene Bare en Så, dine minnekrav blir kuttet ned med en faktor N. Også du trenger ikke noen divisjon for det Bare multiplikasjoner Hvis du har tilgang til flytpunkt-aritmetikk, bruk flytende punktmultiplikasjoner Ellers gjør vi multipeltall og skift til høyre Vi er imidlertid i 2012, og jeg vil anbefale deg å bruke kompilatorer og MCUer som tillater deg for å arbeide med flytende punktnumre. I tillegg til å være mer minneeffektiv og raskere, trenger du ikke å oppdatere elementer i noen sirkulær buffer, jeg vil si det er også mer naturlig fordi en eksponentiell impulsrespons passer bedre til måten naturen oppfører seg, i de fleste tilfeller. ansvaret 20. april 12 på 9 59. Et problem med IIR-filteret som nesten berørt av olin og supercat, men tilsynelatende ignorert av andre, er at avrundingen introduserer noe upresisjon og potensielt bias trunkering forutsatt at N jeg en kraft av to, og bare heltall aritmetikk er brukt, skiftet rett eliminerer systematisk LSBene i den nye prøven. Det betyr at hvor lenge serien kan være, vil gjennomsnittet aldri ta hensyn til disse. For eksempel antar du sakte fallende serie 8,8,8 8,7,7,7 7,6,6, og antar at gjennomsnittet faktisk er 8 i begynnelsen. Neven 7-prøven vil gi gjennomsnittet til 7, uansett filterstyrken Bare for en prøve Samme historie for 6 osv. Tenk på det motsatte serien går opp. Gjennomsnittet vil forbli på 7 for alltid, inntil prøven er stor nok til å gjøre det endres. Selvfølgelig kan du korrigere for bias ved å legge 1 2 N 2, men som vant t virkelig løse presisjon problemet i så fall vil den avtagende serien forbli for alltid ved 8 til prøven er 8-1 2 N 2 For N 4 for eksempel vil enhver prøve over null holde gjennomsnittet uendret. Jeg tror en løsning for Det ville innebære å holde en akkumulator av de tapte LSBene. Men jeg gjorde det ikke så langt å ha kode klar, og jeg er ikke sikker på at det ikke ville skade IIR-strømmen i noen andre tilfeller av serier, for eksempel om 7,9,7,9 ville gjennomsnittlig til 8 da. Olin, din to-trinns kaskade vil også trenge noen forklaring. Mener du å holde to gjennomsnittsverdier med resultatet av den første som er matet inn i det andre i hver iterasjon. Hva er fordelen av dette? Gjennomsnitt Enkel glidende gjennomsnitt. Gjennomsnitt Enkel glidende gjennomsnitt Du er oppfordres til å løse denne oppgaven i henhold til oppgavebeskrivelsen, ved hjelp av hvilket som helst språk du kan kjenne til det enkle glidende gjennomsnittet av en serie av tall. Opprett en tilstandsfunksjonsklasseseksempel som tar en periode og returnerer en rutine som tar et tall som argument og returnerer en enkelt bevegelige gjennomsnitt av sine argumenter så langt. En enkel glidende gjennomsnitt er en metode for å beregne et gjennomsnitt av en strøm av tall ved bare å gjennomsnittsføre de siste P-tallene fra strømmen, hvor P er kjent som perioden. Det kan implementeres ved å ringe en initialiseringsrutine med P som argument, IP, som da skal returnere en rutine som når det kalles med individuelle, etterfølgende medlemmer av en strøm av tall, beregner gjennomsnittet av opp til, den siste P o f dem, kan vi ringe denne SMA. Ordet stateful i oppgavebeskrivelsen refererer til behovet for SMA å huske visse opplysninger mellom samtaler til den. Perioden, P. An bestilt beholder med minst de siste P-tallene fra hver enkelt person calls. Stateful betyr også at etterfølgende anrop til jeg, initialisereren, skal returnere separate rutiner som ikke deler lagret tilstand, slik at de kan brukes på to uavhengige datastrømmer. Pseudo-kode for en implementering av SMA er. Denne versjonen bruker en vedvarende kø for å holde de nyeste p-verdiene Hver funksjon som returneres fra init-moving-gjennomsnittet, har sin tilstand i et atom som holder en køverdi. Denne implementeringen bruker en sirkulær liste for å lagre tallene i vinduet i begynnelsen av hver iterasjonspeker refererer til til listen celle som holder verdien bare flytte ut av vinduet og å bli erstattet med den nettopp verdiene. Bruke en Closure edit. Currently denne sma kan ikke være nok fordi den tildeler en lukning på bunken Noen escape analyse sis kunne fjerne heap allokering. Under en struktur edit. This versjon unngår heap allokering av lukking holde data i stabelen rammen av hovedfunksjonen Samme output. To unngå at flytende punkt tilnærminger holde hoper opp og vokser, kunne koden utfør en periodisk sum på hele sirkulær kø-array. Denne implementeringen produserer to funksjonsobjekter delingstilstand Det er idiomatisk i E for å skille inndata fra utdata lese fra skrive i stedet for å kombinere dem i ett objekt. Strukturen er den samme som implementeringen av Standard Avvik E. Elixir-programmet nedenfor genererer en anonym funksjon med en innebygd periode p, som brukes som perioden for det enkle glidende gjennomsnittet. Kjøringsfunksjonen leser numerisk inngang og overfører den til den nyopprettede anonyme funksjonen, og deretter kontrollerer resultatet til STDOUT. Produksjonen er vist under, med gjennomsnittet, etterfulgt av gruppert inngang, som danner grunnlaget for hvert bevegelige gjennomsnitt. Langt har nedleggelser, men uendelig variasjon bles En løsning er da å bruke prosesser og en enkel melding som passerer basert API. Matrix-språk har rutiner for å beregne glidende avarages for en gitt sekvens av elementer. Det er mindre effektivt å sløyfe som i de følgende kommandoene. Kontinuerlig ber om en inngang jeg som legges til slutten av en liste L1 L1 kan bli funnet ved å trykke 2ND 1, og gjennomsnitt kan finnes i Liste OPS. Press ON for å avslutte programmet. Funksjon som returnerer en liste som inneholder gjennomsnittlig data for det medfølgende argumentet. Program som returnerer en enkel verdi ved hver invocation. list er listen som er gjennomsnittlig p er perioden 5 returnerer den gjennomsnittlige listen. Eksempel 2 Bruke programmet movinav2 i, 5 - Initialisere glidende gjennomsnittlig beregning og definer periode på 5 movinav2 3, xx - nye data i listen verdi 3, og resultatet blir lagret på variabel x, og vises movinav2 4, xx - ny dataverdi 4, og det nye resultatet blir lagret på variabel x og vises 4 3 2.Beskrivelse av funksjonen movinavg variabel r - er r esult den gjennomsnittlige listen som vil bli returnert variabel i - er indeksvariabelen, og den peker til slutten av underlisten listen er gjennomsnittlig variabel z - en hjelperverdi. Funksjonen bruker variabel i for å bestemme hvilke verdier på listen vil bli vurdert i neste gjennomsnittlige beregning Ved hver iterasjon peker variabel jeg på den siste verdien i listen som skal brukes i gjennomsnittlig beregning. Så vi trenger bare å finne ut hvilken som vil være den første verdien i listen. Vi vil vanligvis ha å vurdere p-elementer, så det første elementet vil være det som er indeksert av ip 1 Men i de første iterasjonene vil denne beregningen vanligvis være negativ, slik at følgende ligning vil unngå negative indekser maksimalt ip 1,1 eller, ordne ligningen, maksimal ip , 0 1 Men antall elementer på de første iterasjonene vil også være mindre, den riktige verdien vil være sluttindeks - begynn indeks 1 eller ordne ligningen, i - maks ip, 0 1 1 og deretter i-max ip , 0 Variabel z holder den vanlige verdien maks ip, 0 s o startindex vil være z 1 og nummerfelementene vil være iz. mid liste, z 1, iz vil returnere listen over verdi som vil være gjennomsnittlig sum vil summe dem summen vil gjennomsnittlig dem og lagre resultatet på riktig sted i Resultatlisten. fp1 oppretter en delvis applikasjon som fastsetter i dette tilfellet den andre og tredje parameteren. Det kan være hvis du bruker en vekt som er omvendt proporsjonal med vinduet size. public klasse AverageCounter int RunningAvg int RunningCount Dette erstatter den sirkulære listen int WindowSize. public AverageCounter int windowSize WindowSize windowSize. public void AddValue float NewValue vokser vinduets størrelse etter hvert som flere prøver blir registrert hvis RunningCount WindowSize RunningCount. rekursiv glidende gjennomsnittlig avg n W - 1 W avg n-1 1 W prøve hvor W er vinduets størrelse RunningAvg RunningCount - 1 RunningCount RunningAvg 1 RunningCount NewValue. public flyte Gjennomsnittlig avkastning RunningAvg .-- endret 1353 fredag ​​9. november 2007.pwasser 8-Jan-08 16 25.Denne formelen fungerer fint for å beregne bevegelige gjennomsnitt, så lenge noen begrensninger holdes i bakhodet. Det beregner et estimat av det bevegelige gjennomsnittet, ikke det virkelige bevegelige gjennomsnittet basert på den viktige antagelsen om at verdiene er Normalt fordelt på gjennomsnittet. Jeg pekte dette ut i en tidligere post. toad 9-okt-11 15 46. Vel det var dumt var det ikke 4 år på, og jeg kan ha et bedre forslag I stedet for å bruke en sirkulær liste, bruk en koblet liste og opprettholde maksimal listestørrelse manuelt På denne måten kan du holde en løpende sum av aggregatet. Når du legger til lenkelisten, legger du til aggregatet når du trimmer en node, trekker den verdien fra aggregatet. For en gjennomsnittlig teller med 5 noder, kanskje du ikke fikk vite ap Forbedring forbedring, men i mange tilfeller med tusenvis av noder det ville matter.1 I AddValue-metoden legger du til en ny koblingsliste knutepunkt, og legger til AVERAGE 2 Etter å legge til, kontroller størrelsen 3 Hvis størrelsestærskelen trekker fra AVERAGE og deretter trimmer av node. For enda mer effektivitet, i stedet for å bruke koblet liste, kan du implementere din egen sirkulære liste basert på en rekke verdier - subtraherer fra AVERAGE når du erstatter en array-verdi. Marc Clifton 10-okt-11 1 37,4 år på, og jeg kan ha et bedre forslag. Innenfor, det ville fungere bedre. Jeg er ikke sikker på den riktige løsningen, men siden summeringen av gjennomsnittet av hver prøve ville introdusere en god mengde avrundingsfeil. Jeg lurer på om det skal skilles fra den delte delen fra hele delen ville hjelpe Dele hele delen av hvert tall med tellingen Hold tre løpssummer 1 Gjennomsnittet av hele delene, 2 Resten av hver deling og 3 Den delte delen av hvert nummer. Hver gang hele delen av en tallet er delt deles hele delresultatet til gjennomsnittlig løpende sum og resten blir lagt til gjenværende løpende sum. Når gjenværende løpende sum oppnår en verdi som er større enn eller lik tellingen, divideres den med tellingen med hele delresultatet legges til gjennomsnittlig løpende sum og resten legges til gjenværende løpende sum. Ved hver beregning blir også brøkdelen lagt til den brøkdelte løpende summen. Når gjennomsnittet er ferdig, blir resten av løpende sum delt av tallet og resultatet legges til gjennomsnittlig løpende sum som et flytende tall. For eksempel. Nå hva du skal gjøre med brøkdelingsløpet. Faren for overløp er mye mindre sannsynlig her, men likevel mulig, så en måte å håndtere det ville være å dele brøkdelingen sum av tallet på slutten og legg det til vårt resultat. Et alternativ ville være å sjekke den brøkdelte summen ved hver beregning for å se om den er større enn eller lik tellingen. Når det skjer, gjør bare det samme t hing som vi gjør med gjenværende løpende sum.

Comments

Popular posts from this blog

Etf Options Handels Timer

Tips 7 - Trading ETF Options Exchange-Traded Funds. eller ETFer. er indeksfond som handler akkurat som aksjer på større børser. Alle de store aksjeindeksene har ETFer basert på dem, inkludert: Dow Jones Industrial Average (DIA), Standard Amp Poors 500 Index (SPX) og Nasdaq 100 Composite (QQQQ). I tillegg har omtrent enhver stor industri en ETF for investorer som ønsker å velge en hel bransje i stedet for individuelle aksjer. ETF er fundamentalt forskjellig fra tradisjonelle fond, som ikke handler i løpet av dagens normale handelstid. Tradisjonelle verdipapirfond tar bestillinger i Wall Street-handelstidene, men transaksjonene skjer faktisk ved markedsavslutningen. Prisen de mottar er summen av sluttdagsprisene på alle aksjene i fondet. Ikke så for ETFs, som handler øyeblikkelig hele dagen lang (akkurat som vanlig lager). Siden ETFs handler hele dagen, er opsjoner tilgjengelig på dem. Disse alternativene gir interessante muligheter for bestemte strategier, inkludert det jeg kaller 10K-s...

Forex Trade Ideer

Advanced Candlesticks og Ichimoku Strategier for Forex Trading For første gang avslører våre Action Forex-analytikere strategiene de bruker til å formulere handelsideer i vår populære Candlesticks og Ichimoku Analysis-seksjon. Disse strategiene presenteres i vår nylig utgitte ebook quotAdvanced Candlesticks og Ichimoku Strategies for Forex Trading. Quot Ikke gå glipp av denne muligheten når du lærer disse teknikkene som profesjonelle handelsfolk bruker. Last ned både del I og del II NU Lysestaker Intradag Handel Ideer Handel Idea Wrap-up: USDCHF - Hold lenge inntatt på 1.0065 Som greenback har latt etter marginal økning til 1.0146 i går, foreslår mindre konsolidering under dette nivået imidlertid. - Mar 03 15:41 GMT Trade Idea Wrap-up: GBPUSD - Selg på 1.2350 Siden kabelen har holdt seg under press etter denne uken, faller under tidligere støtte på 1.2347 (nå motstand), og legger til tro på vårt syn. - Mar 03 15:37 GMT Trade Idea Wrap-up: EURUSD - Hold kort oppgitt på 1,0570 Euro intra...

Forex Turnering 2014

Tråd: Forex Finals: Turneringsbeskrivelse og vilkår Forex Finals: Turneringsbeskrivelse og vilkår Forex Finals ForexCup Forum Turnering på Live Accounts Vi ønsker handelsmenn velkommen til å delta i Forex Finals, den nye ForexCup-turneringen på Live Accounts. Vinneren av hver tur blir en PAMM STP Provider (analog til PAMM Account Manager) med et innskudd på 1000 (premien er subsidiert av FXOpen). Videre kan de tre første vinnerne av hele turneringen (består av 6 turer) også bli PAMM ECN Providers med henholdsvis 3000, 1000 og 1000 på kontoen. Jo før du begynner å delta i turneringen, desto høyere er din sjanse. Hovedbetingelser for Forex Finals: Alle tradinginstrumenter som er tilgjengelige på FXOpen STP, regner med eventuelle handelsstrategier, ekspertrådgivere (AEA, MEA, etc.), noen andre standardprogrammer for MT4. Gå til ForexCup forumet for å få detaljert informasjon om Forex Finals terms.1. Konkurransen holdes på live FXOpen STP kontoer. 2. Registrering: 2.1. Registreringen er åp...