Thursday 9 November 2017

Labview Bevegelig Gjennomsnitt Eksempel


Beregning av flytende gjennomsnitt Denne VI beregner og viser det bevegelige gjennomsnittet, ved hjelp av et forhåndsvalgt nummer. For det første initierer VI to skiftregister. Toppskiftregisteret initialiseres med ett element, og legger kontinuerlig den forrige verdien med den nye verdien. Dette skiftregisteret beholder summen av de siste x-målingene. Etter å ha delt resultatene av add-funksjonen med den forvalgte verdien, beregner VI VI den bevegelige gjennomsnittsverdien. Bunnskiftregisteret inneholder en matrise med dimensjonen Gjennomsnitt. Dette skiftregisteret holder alle verdier av målingen. Byttefunksjonen erstatter den nye verdien etter hver løkke. Denne VI er veldig effektiv og rask fordi den bruker erstatningselementfunksjonen i løpet av mens sløyfen, og den initialiserer oppstillingen før den går inn i sløyfen. Denne VI ble opprettet i LabVIEW 6.1. Bookmark amp ShareSimple Moving Average VI Vanligvis når folk snakker om en Moving Average, betyr de Bytt punkt N med gjennomsnittet av M poeng rundt Point N. Anta at jeg har 100 poeng hvis verdier er 1, 2, 3. 100, og jeg vil Gjør en 5-punkts flytende gjennomsnitt. Første ting å merke seg er at det er et glidende gjennomsnitt på det tredje punktet er gjennomsnittet av 1, 2, 3, 4, 5 3. Gjennomsnittet av det fjerde punktet er gjennomsnittet av 2, 3, 4, 5, 6 4. Dette er imidlertid kanskje for enkelt et eksempel. Hva med gjennomsnittet av en trinnfunksjon, 0 fra 1 til 10, deretter 20 deretter. Igjen, kast ut poeng 1 og 2. Gjennomsnittet av poeng 1-5 (for å gå inn i punkt 3) 0 (siden alle poengene er 0). På samme måte som punkt 4, 5, 6,7 og 8. Imidlertid er punkt 9 gjennomsnittet 0, 0, 0, 0, 20 4. Hva med punkt 10 Vel, det skal være gjennomsnittet på 0, 0, 0 , 20, 20 8, men husket du ikke å overskrive Punkt 9 Hmm, virker som om vi må beholde to kopier av Array (som generelt er dyrt). Det er flere måter du kan unngå å gjøre dette på. Forstår du hvor problemet oppstår i forrige avsnitt Hvis ikke, prøv å gjøre dette med blyant og papir (eller prøv å kode det i LabVIEW). Jeg gir deg svaret slik at du kan sjekke - det bevegelige gjennomsnittet av trinnfunksjonen er -, -, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 20, 20 , 20. -, - (hvor - er de tomme verdiene i enden av arrayet, poengene du ikke har sufficent naboer). PS! - det ville ikke overraske meg hvis det var en LabVIEW-funksjon som gjør dette for deg. Men hvis du lærer LabVIEW og vil ha en bedre forståelse av hvordan algoritmene du plugger i arbeid, gjør det aldri vondt å spille og prøve det selv. Du kan til og med komme med en forbedring (flere av oss har gjort det.). takk for sensibiliserende angående de finere punktene i Moving Average-metoden. Dette etterpå er et statistisk verktøy som bidrar til å se hva du vil se abstraherer distraktorene. Så metoden er bundet til å ha noen mangler i enkelte situasjoner eller kontekst. Men jeg antar at den passer perfekt til min slags DOS-datalogging - det er et trykk eller et temperatur - eller flyt-signal - og jeg kjøper på noe som 400 eksemplarer sek og bruker deretter en gjennomsnittlig enkeltprøve. Og prosessen er ganske treg da hovedkoden kjører på ikke mer enn 20 Hz. Så når jeg gjør et 5 eksempelslagende gjennomsnitt, kommer min første prøve 5 x 50 ms senere, så for hver 50 ms får jeg en gyldig prøve. I utgangspunktet er jeg mer opptatt av trender og ikke spotverdier. I dette er det lite å bekymre seg om ubesvarte prøver eller falske verdier. Selvfølgelig ville jeg ikke tør å bruke dette til en Step-funksjon. Det ville være grusomt. Raghunathan LV2012 å automatisere hydrauliske test rigger. Melding 4 av 15 (1,047 Visninger) Re: Simple Moving Average VI 03-30-2016 11:58 Det er gjennomsnittlig ptbypt som gjør det samme. Du kan inspisere koden hvis du vil. En stor feil i koden er det faktum at du stadig vokser og krymper et eksisterende utvalg. Du bør prøve å finne en løsning som fungerer på plass på en fast størrelse-array. Kan eksempler være lagt ut på forumet gjennom årene (se hee for eksempel). Den gjennomsnittlige bryr seg ikke om elementene er ute av drift, så du kan bare erstatte det eldste elementet, uansett hvor det er plassert. Du forbereder også det nye elementet til begynnelsen av et eksisterende utvalg, som alltid er mye dyrere enn å legge til i slutten. Eksempelstørrelsen din kan ikke endres når VI kjører. Skiftregisteret ditt skal initialiseres med en tom matrise, ikke en matrise som allerede inneholder et enkeltelement som er null. (Denne ekstra null vil gi feil gjennomsnitt) Koden din skal gjøres til en subVI, slik at den kan brukes på nytt (ligner ptbypt-versjonen). Din VI kan aldri stoppes, bare avbrutt. Gode ​​optimaliseringstips. Poenget med å initialisere med Zero savnet meg. Og ja, brukeren bør ikke endre prøveformatet når den begynner å løpe. Til slutt vil jeg lage en SubVI og håndtere ting som stopper osv. Når det gjelder poenget med å legge ut på forhånd enn å legge til den nye verdien til array, er det kanskje en ytelsesstraff, men gitt størrelsen på mitt array, er jeg sikker på at CPUen ikke bryr seg annerledes . Men for meg må det være slik at jeg bruker de endelige dataene for å tegne en trend av en fysisk parameter. Takk for din tid. Raghunathan LV2012 å automatisere hydrauliske test rigger. takk for sensibiliserende angående de finere punktene i Moving Average-metoden. Dette etterpå er et statistisk verktøy som bidrar til å se hva du vil se abstraherer distraktorene. Så metoden er bundet til å ha noen mangler i enkelte situasjoner eller kontekst. Men jeg antar at den passer perfekt til min slags DOS-datalogging - det er et trykk eller et temperatur - eller flyt-signal - og jeg kjøper på noe som 400 eksemplarer sek og bruker deretter en gjennomsnittlig enkeltprøve. Og prosessen er ganske treg da hovedkoden kjører på ikke mer enn 20 Hz. Så når jeg gjør et 5 eksempelslagende gjennomsnitt, kommer min første prøve 5 x 50 ms senere, så for hver 50 ms får jeg en gyldig prøve. Aha Så du vil ikke ha et glidende gjennomsnitt, men bare et enkelt gjennomsnitt. Det er mye enklere. Heres ideen (som fungerer mye bedre med en ProducerConsumer Design) - Si at du er prøvetaking ved 400Hz, vil lagre dataene ved 400 Hz (dvs. lagre alle dataene til disken), men vil vise ved 20 Hz (fordi du ønsker å se trender, en lengre tidsbase, etc.). Sett opp ditt AD-system for å samle 20 prøver ved 400Hz (merk at du kan samle N-kanaler samtidig, og gi deg et 2D utvalg av prøver. Da du får dataene (ved 20 Hz) fra AD (gjør dette til produsenten) Forbrukeren begynner med å skrive dataene til disk (burde ikke ta mye tid). Nå har du en 2D-serie - i en For Loop, på kanal for kanal, gjennomsnittlig de 20 poengene. Nå har du en 1D-array, med et gjennomsnittspunkt for hver kanal. Gå videre og plott den. Merk at denne ordningen (a) bruker alle dataene, (b) håndterer flerkanalsdata med aplomb (og hvis du er fra Midt-Østen hvor de vokser, kan du også håndtere dataene dine med en saftig plomme), og (c) lar deg samle dataene dine fra AD-utstyret, lagre dataene dine til disken, holde alle poengene og vise dataene dine på skjermen ved hjelp av alle poengene dine, men også gjennomsnittlig for å forbedre det visuelle signalet til støyforholdet, alt uten å miste data (jeg har gjort det nøyaktig med 24 kanaler ved 1KHz, med dataene blir tatt på et eksternt system og sendt til PCen via TCPIP, så vi har også TCP-behandling i loop). Velkommen til den spennende verden av dataoppkjøp og behandling med LabVIEW. Stol på meg, dette er et flott system for å gjøre denne typen arbeid Basert på tilbakemeldingene jeg fikk på min opprinnelige VI, har jeg raffinert Moving Average-koden til en subVI. Jeg brukte den til å gjennomsnittlig en simulert 10Channel-data - bare for å holde ting enkelt, sørget jeg for at all10 kanaler hadde identiske data. Man regner med å få det samme glidende gjennomsnittet for alle 10 kanaler. Jeg er overrasket over den lille variansen jeg legger merke til mellom kanaler - generelt er de nært, men ikke eksakte. Og bare for å forklare prosessen jeg prøver, har jeg også enclsoed en XLS. Så hvor kommer variasjonen inn fra. Det enhetlige skiftregisteret i del VI. Raghunathan LV2012 å automatisere hydrauliske test rigger. Melding 9 av 15 (950 Visninger) Re: Simple Moving Average VI altenbach 04-01-2016 10:25 Koden din gir fortsatt ingen mening. Når du ringer til subVI en skalar av gangen, får du ikke det du vil, fordi skiftregisteret bare rememeberer de siste N-skalarene, uansett hvilken kanal den er fra. Koden din er fortsatt svært ineffektiv og innviklet. (f. eks. hvorfor bruker du fortsatt innsats i array for å legge til (både i mani nad i underdelen). (Du kan bruke en reenetrant subVI og en parallell innerste FOR-sløyfe, men det virker altfor komplisert også) Hvis du vil gjøre en kjører gjennomsnittet på hver kanal, må subVI beholde en 2D-array i subVI. Alt dette har blitt gjort før. Melding 10 av 15 (934 Visninger) Flytte gjennomsnittlige og eksponensielle utjevningsmodeller Som et første skritt i å bevege seg utover gjennomsnittlige modeller, tilfeldig walk-modeller, og lineære trendmodeller, ikke-sone-mønstre og trender kan ekstrapoleres ved hjelp av en glidende eller utjevningsmodell. Den grunnleggende forutsetningen bak gjennomsnittlige og utjevningsmodeller er at tidsseriene er lokalt stasjonære med et sakte varierende gjennomsnitt. Derfor tar vi et flytende (lokalt) gjennomsnitt for å estimere nåverdien av gjennomsnittet og deretter bruke det som prognose for nær fremtid. Dette kan betraktes som et kompromiss mellom den gjennomsnittlige modellen og den tilfeldige gang uten drift-modellen. samme strategi kan brukes t o estimere og ekstrapolere en lokal trend. Et glidende gjennomsnitt kalles ofte en quotsmoothedquot-versjon av den opprinnelige serien, fordi kortsiktig gjennomsnittsverdi medfører utjevning av støtene i den opprinnelige serien. Ved å justere graden av utjevning (bredden på det bevegelige gjennomsnittet), kan vi håpe å finne en slags optimal balanse mellom ytelsen til de gjennomsnittlige og tilfeldige turmodellene. Den enkleste typen gjennomsnittlig modell er. Enkel (likevektet) Flytende gjennomsnitt: Værvarselet for verdien av Y på tidspunktet t1 som er laget på tidspunktet t, er det enkle gjennomsnittet av de nyeste m-observasjonene: (Her og andre steder vil jeg bruke symbolet 8220Y-hat8221 til å stå for en prognose av tidsserien Y som ble gjort så tidlig som mulig ved en gitt modell.) Dette gjennomsnittet er sentrert ved period-t (m1) 2, noe som innebærer at estimatet av det lokale middel vil ha en tendens til å ligge bak den sanne verdien av det lokale gjennomsnittet med ca. (m1) 2 perioder. Således sier vi at gjennomsnittsalderen for dataene i det enkle glidende gjennomsnittet er (m1) 2 i forhold til perioden for prognosen beregnes. Dette er hvor lang tid det vil være å prognostisere prognoser bak vendepunkter i dataene . For eksempel, hvis du er i gjennomsnitt de siste 5 verdiene, vil prognosene være omtrent 3 perioder sent i å svare på vendepunkter. Merk at hvis m1, den enkle glidende gjennomsnittlige (SMA) modellen er lik den tilfeldige turmodellen (uten vekst). Hvis m er veldig stor (sammenlignbar med lengden på estimeringsperioden), svarer SMA-modellen til den gjennomsnittlige modellen. Som med hvilken som helst parameter i en prognosemodell, er det vanlig å justere verdien av k for å oppnå den beste kvote kvoten til dataene, dvs. de minste prognosefeilene i gjennomsnitt. Her er et eksempel på en serie som ser ut til å vise tilfeldige svingninger rundt et sakte varierende middel. Først kan vi prøve å passe den med en tilfeldig walk-modell, noe som tilsvarer et enkelt bevegelige gjennomsnitt på 1 sikt: Den tilfeldige turmodellen reagerer veldig raskt på endringer i serien, men i så måte velger den mye av kvotenivået i data (tilfeldige svingninger) samt quotsignalquot (det lokale gjennomsnittet). Hvis vi i stedet prøver et enkelt glidende gjennomsnitt på 5 termer, får vi et smidigere sett med prognoser: Det 5-tiden enkle glidende gjennomsnittet gir betydelig mindre feil enn den tilfeldige turmodellen i dette tilfellet. Gjennomsnittsalderen for dataene i denne prognosen er 3 ((51) 2), slik at den har en tendens til å ligge bak vendepunktene med tre perioder. (For eksempel ser det ut til at en nedtur har skjedd i perioden 21, men prognosene vender seg ikke til flere perioder senere.) Legg merke til at de langsiktige prognosene fra SMA-modellen er en horisontal rettlinje, akkurat som i tilfeldig gang modell. Således antar SMA-modellen at det ikke er noen trend i dataene. Mens prognosene fra den tilfeldige turmodellen ganske enkelt er lik den siste observerte verdien, er prognosene fra SMA-modellen lik et veid gjennomsnitt av de siste verdiene. De konfidensgrenser som beregnes av Statgraphics for de langsiktige prognosene for det enkle glidende gjennomsnittet, blir ikke større da prognoseperioden øker. Dette er åpenbart ikke riktig. Dessverre er det ingen underliggende statistisk teori som forteller oss hvordan konfidensintervallene skal utvide seg for denne modellen. Det er imidlertid ikke så vanskelig å beregne empiriske estimater av konfidensgrensene for lengre horisontprognoser. For eksempel kan du sette opp et regneark der SMA-modellen skulle brukes til å prognose 2 trinn foran, 3 trinn fremover, etc. i den historiske dataprøven. Du kan deretter beregne utvalgsstandardavvikene til feilene i hver prognosehorisont, og deretter konstruere konfidensintervaller for langsiktige prognoser ved å legge til og trekke ut multipler av riktig standardavvik. Hvis vi prøver et 9-sikt enkelt glidende gjennomsnitt, får vi enda jevnere prognoser og mer av en bremseeffekt: Gjennomsnittsalderen er nå 5 perioder (91) 2). Hvis vi tar et 19-årig glidende gjennomsnitt, øker gjennomsnittsalderen til 10: Legg merke til at prognosene nå faller bakom vendepunkter med ca 10 perioder. Hvilken mengde utjevning er best for denne serien Her er et bord som sammenligner feilstatistikken sin, også et gjennomsnitt på tre sikt: Modell C, 5-års glidende gjennomsnitt, gir den laveste verdien av RMSE med en liten margin over 3 term og 9-sikt gjennomsnitt, og deres andre statistikker er nesten identiske. Så, blant modeller med svært like feilstatistikk, kan vi velge om vi foretrekker litt mer respons eller litt mer glatt i prognosene. (Tilbake til toppen av siden.) Browns Simple Exponential Smoothing (eksponentielt vektet glidende gjennomsnitt) Den enkle glidende gjennomsnittsmodellen beskrevet ovenfor har den uønskede egenskapen som den behandler de siste k-observasjonene, like og fullstendig ignorerer alle foregående observasjoner. Intuitivt bør tidligere data diskonteres på en mer gradvis måte - for eksempel bør den siste observasjonen få litt mer vekt enn 2. siste, og den 2. siste skal få litt mer vekt enn den 3. siste, og så videre. Den enkle eksponensielle utjevning (SES) - modellen oppnår dette. La 945 betegne en quotsmoothing constantquot (et tall mellom 0 og 1). En måte å skrive modellen på er å definere en serie L som representerer dagens nivå (dvs. lokal middelverdi) av serien som estimert fra data til nå. Verdien av L ved tid t beregnes rekursivt fra sin egen tidligere verdi slik: Således er den nåværende glattede verdien en interpolering mellom den forrige glattede verdien og den nåværende observasjonen, hvor 945 styrer nærheten til den interpolerte verdien til den nyeste observasjon. Forventningen for neste periode er bare den nåværende glatte verdien: Tilsvarende kan vi uttrykke neste prognose direkte i forhold til tidligere prognoser og tidligere observasjoner, i en hvilken som helst av de tilsvarende versjoner. I den første versjonen er prognosen en interpolasjon mellom forrige prognose og tidligere observasjon: I den andre versjonen blir neste prognose oppnådd ved å justere forrige prognose i retning av den forrige feilen med en brøkdel av 945. Er feilen gjort ved tid t. I den tredje versjonen er prognosen et eksponentielt vektet (dvs. nedsatt) glidende gjennomsnitt med rabattfaktor 1-945: Interpolasjonsversjonen av prognoseformelen er den enkleste å bruke hvis du implementerer modellen på et regneark: det passer inn i en enkeltcelle og inneholder cellehenvisninger som peker på forrige prognose, forrige observasjon og cellen der verdien av 945 er lagret. Merk at hvis 945 1 er SES-modellen tilsvarer en tilfeldig turmodell (uten vekst). Hvis 945 0 er SES-modellen ekvivalent med den gjennomsnittlige modellen, forutsatt at den første glattede verdien er satt lik gjennomsnittet. (Gå tilbake til toppen av siden.) Gjennomsnittsalderen for dataene i prognosen for enkel eksponensiell utjevning er 1 945 i forhold til perioden for prognosen beregnes. (Dette skal ikke være åpenbart, men det kan enkelt vises ved å vurdere en uendelig serie.) Derfor har den enkle, glidende gjennomsnittlige prognosen en tendens til å ligge bak vendepunktene med rundt 1 945 perioder. For eksempel, når 945 0,5 lag er 2 perioder når 945 0.2 lag er 5 perioder når 945 0,1 lag er 10 perioder, og så videre. For en gitt gjennomsnittlig alder (det vil si mengden lag), er prognosen for enkel eksponensiell utjevning (SES) noe bedre enn SMA-prognosen (Simple Moving Average) fordi den legger relativt mer vekt på den siste observasjonen - dvs. det er litt mer quotresponsivequot for endringer som oppstod i den siste tiden. For eksempel har en SMA-modell med 9 vilkår og en SES-modell med 945 0,2 begge en gjennomsnittlig alder på 5 for dataene i prognosene, men SES-modellen legger mer vekt på de siste 3 verdiene enn SMA-modellen og ved Samtidig er det ikke 8220forget8221 om verdier som er mer enn 9 år gamle, som vist i dette diagrammet. En annen viktig fordel ved SES-modellen over SMA-modellen er at SES-modellen bruker en utjevningsparameter som er kontinuerlig variabel, slik at den lett kan optimaliseres ved å bruke en quotsolverquot-algoritme for å minimere den gjennomsnittlige kvadratfeilen. Den optimale verdien av 945 i SES-modellen for denne serien viser seg å være 0,2961, som vist her: Gjennomsnittsalderen for dataene i denne prognosen er 10,2961 3,4 perioder, noe som ligner på et 6-sikt enkelt glidende gjennomsnitt. De langsiktige prognosene fra SES-modellen er en horisontal rett linje. som i SMA-modellen og den tilfeldige turmodellen uten vekst. Vær imidlertid oppmerksom på at konfidensintervallene som beregnes av Statgraphics, divergerer nå på en rimelig måte, og at de er vesentlig smalere enn konfidensintervallene for den tilfeldige turmodellen. SES-modellen antar at serien er noe mer forutsigbar enn den tilfeldige turmodellen. En SES-modell er faktisk et spesielt tilfelle av en ARIMA-modell. slik at den statistiske teorien om ARIMA-modeller gir et solid grunnlag for beregning av konfidensintervall for SES-modellen. Spesielt er en SES-modell en ARIMA-modell med en ikke-sesongforskjell, en MA (1) og ikke en konstant periode. ellers kjent som en quotARIMA (0,1,1) modell uten constantquot. MA (1) - koeffisienten i ARIMA-modellen tilsvarer mengden 1-945 i SES-modellen. For eksempel, hvis du passer på en ARIMA (0,1,1) modell uten konstant til serien analysert her, viser den estimerte MA (1) - koeffisienten seg å være 0,7029, som er nesten nøyaktig en minus 0,2961. Det er mulig å legge til antagelsen om en konstant lineær trend uten null som en SES-modell. For å gjøre dette oppgir du bare en ARIMA-modell med en ikke-sesongforskjell og en MA (1) - sikt med en konstant, dvs. en ARIMA-modell (0,1,1) med konstant. De langsiktige prognosene vil da ha en trend som er lik den gjennomsnittlige trenden observert over hele estimeringsperioden. Du kan ikke gjøre dette i forbindelse med sesongjustering, fordi sesongjusteringsalternativene er deaktivert når modelltypen er satt til ARIMA. Du kan imidlertid legge til en konstant langsiktig eksponensiell trend for en enkel eksponensiell utjevningsmodell (med eller uten sesongjustering) ved å bruke inflasjonsjusteringsalternativet i prognoseprosedyren. Den aktuelle kvoteringskvoten (prosentvekst) per periode kan estimeres som hellingskoeffisienten i en lineær trendmodell som er montert på dataene i forbindelse med en naturlig logaritme transformasjon, eller det kan være basert på annen uavhengig informasjon om langsiktige vekstutsikter . (Tilbake til toppen av siden.) Browns Lineær (dvs. dobbel) Eksponensiell utjevning SMA-modellene og SES-modellene antar at det ikke er noen trend av noe slag i dataene (som vanligvis er OK eller i det minste ikke altfor dårlig for 1- trinnvise prognoser når dataene er relativt støyende), og de kan modifiseres for å inkorporere en konstant lineær trend som vist ovenfor. Hva med kortsiktige trender Hvis en serie viser en varierende vekstnivå eller et syklisk mønster som skiller seg tydelig ut mot støyen, og hvis det er behov for å prognose mer enn 1 periode framover, kan estimering av en lokal trend også være et problem. Den enkle eksponensielle utjevningsmodellen kan generaliseres for å oppnå en lineær eksponensiell utjevning (LES) modell som beregner lokale estimater av både nivå og trend. Den enkleste tidsvarierende trendmodellen er Browns lineær eksponensiell utjevningsmodell, som bruker to forskjellige glatte serier som er sentrert på forskjellige tidspunkter. Forutsigelsesformelen er basert på en ekstrapolering av en linje gjennom de to sentrene. (En mer sofistikert versjon av denne modellen, Holt8217s, blir diskutert nedenfor.) Den algebraiske form av Brown8217s lineær eksponensiell utjevningsmodell, som den enkle eksponensielle utjevningsmodellen, kan uttrykkes i en rekke forskjellige, men liknende former. Denne standardmodellen er vanligvis uttrykt som følger: La S betegne den enkeltglattede serien som er oppnådd ved å anvende enkel eksponensiell utjevning til serie Y. Dvs. verdien av S ved period t er gitt av: (Husk at, under enkle eksponensiell utjevning, dette ville være prognosen for Y ved periode t1.) Lad deretter Squot betegne den dobbeltslettede serien oppnådd ved å anvende enkel eksponensiell utjevning (ved hjelp av samme 945) til serie S: Endelig prognosen for Y tk. for noe kgt1, er gitt av: Dette gir e 1 0 (det vil si lure litt, og la den første prognosen være den samme første observasjonen) og e 2 Y 2 8211 Y 1. hvoretter prognosene genereres ved å bruke ligningen ovenfor. Dette gir de samme monterte verdiene som formelen basert på S og S dersom sistnevnte ble startet med S 1 S 1 Y 1. Denne versjonen av modellen brukes på neste side som illustrerer en kombinasjon av eksponensiell utjevning med sesongjustering. Holt8217s Lineær eksponensiell utjevning Brown8217s LES-modell beregner lokale estimater av nivå og trend ved å utjevne de siste dataene, men det faktum at det gjør det med en enkelt utjevningsparameter, stiller en begrensning på datamønstrene som den kan passe: nivået og trenden er ikke tillatt å variere til uavhengige priser. Holt8217s LES-modellen løser dette problemet ved å inkludere to utjevningskonstanter, en for nivået og en for trenden. Til enhver tid t, som i Brown8217s modell, er det et estimat L t på lokalt nivå og et estimat T t av den lokale trenden. Her beregnes de rekursivt fra verdien av Y observert ved tid t og de forrige estimatene av nivået og trenden ved to likninger som gjelder eksponensiell utjevning til dem separat. Hvis estimert nivå og trend ved tid t-1 er L t82091 og T t-1. henholdsvis, da var prognosen for Y tshy som ville vært gjort på tidspunktet t-1, lik L t-1 T t-1. Når den faktiske verdien er observert, beregnes det oppdaterte estimatet av nivået rekursivt ved å interpolere mellom Y tshy og dens prognose, L t-1 T t 1, med vekt på 945 og 1- 945. Forandringen i estimert nivå, nemlig L t 8209 L t82091. kan tolkes som en støyende måling av trenden på tidspunktet t. Det oppdaterte estimatet av trenden beregnes deretter rekursivt ved å interpolere mellom L t 8209 L t82091 og det forrige estimatet av trenden, T t-1. ved bruk av vekter av 946 og 1-946: Fortolkningen av trend-utjevningskonstanten 946 er analog med den for nivåutjevningskonstanten 945. Modeller med små verdier på 946 antar at trenden bare endrer seg veldig sakte over tid, mens modeller med større 946 antar at det endrer seg raskere. En modell med en stor 946 mener at den fjerne fremtiden er veldig usikker, fordi feil i trendberegning blir ganske viktig når det regnes med mer enn en periode framover. (Tilbake til toppen av siden.) Utjevningskonstantene 945 og 946 kan estimeres på vanlig måte ved å minimere gjennomsnittlig kvadratfeil i de 1-trinns prognosene. Når dette gjøres i Statgraphics, viser estimatene seg å være 945 0.3048 og 946 0.008. Den svært små verdien av 946 betyr at modellen tar svært liten endring i trenden fra en periode til den neste, så i utgangspunktet prøver denne modellen å estimere en langsiktig trend. I analogi med begrepet gjennomsnittlig alder av dataene som brukes til å estimere det lokale nivået i serien, er gjennomsnittsalderen for dataene som brukes til estimering av lokal trenden, proporsjonal med 1 946, men ikke akkurat lik den . I dette tilfellet viser det seg å være 10 006 125. Dette er et svært nøyaktig tall, forutsatt at nøyaktigheten av estimatet av 946 er virkelig 3 desimaler, men det er av samme generelle størrelsesorden som prøvestørrelsen på 100, så denne modellen er i gjennomsnitt over ganske mye historie i estimering av trenden. Prognoseplanet nedenfor viser at LES-modellen anslår en litt større lokal trend i slutten av serien enn den konstante trenden som er estimert i SEStrend-modellen. Også den estimerte verdien på 945 er nesten identisk med den som oppnås ved å montere SES-modellen med eller uten trend, så dette er nesten den samme modellen. Nå ser disse ut som rimelige prognoser for en modell som skal estimere en lokal trend. Hvis du 8220eyeball8221 ser dette, ser det ut som om den lokale trenden har vendt nedover på slutten av serien. Hva har skjedd Parametrene til denne modellen har blitt estimert ved å minimere den kvadriske feilen på 1-trinns prognoser, ikke langsiktige prognoser, i hvilket tilfelle trenden gjør ikke en stor forskjell. Hvis alt du ser på er 1-trinns feil, ser du ikke det større bildet av trender over (si) 10 eller 20 perioder. For å få denne modellen mer i tråd med øyehals ekstrapoleringen av dataene, kan vi manuelt justere trendutjevningskonstanten slik at den bruker en kortere basislinje for trendestimering. Hvis vi for eksempel velger å sette 946 0,1, er gjennomsnittsalderen for dataene som brukes til å estimere den lokale trenden 10 perioder, noe som betyr at vi gjennomsnittsverdi trenden over de siste 20 perioder eller så. Here8217s hva prognosen tomten ser ut hvis vi setter 946 0,1 mens du holder 945 0.3. Dette ser intuitivt fornuftig ut på denne serien, selv om det er sannsynlig farlig å ekstrapolere denne trenden mer enn 10 perioder i fremtiden. Hva med feilstatistikken Her er en modell sammenligning for de to modellene vist ovenfor, samt tre SES-modeller. Den optimale verdien av 945. For SES-modellen er ca. 0,3, men tilsvarende resultater (med henholdsvis litt mer responstid) oppnås med 0,5 og 0,2. (A) Holts lineær eksp. utjevning med alfa 0,3048 og beta 0,008 (B) Holts lineær eksp. utjevning med alfa 0,3 og beta 0,1 (C) Enkel eksponensiell utjevning med alfa 0,5 (D) Enkel eksponensiell utjevning med alfa 0,3 (E) Enkel eksponensiell utjevning med alfa 0,2 Deres statistikk er nesten identisk, slik at vi virkelig kan velge på grunnlag av 1-trinns prognosefeil i dataprøven. Vi må falle tilbake på andre hensyn. Hvis vi sterkt tror at det er fornuftig å basere dagens trendoverslag på hva som har skjedd i løpet av de siste 20 perioder eller så, kan vi gjøre en sak for LES-modellen med 945 0,3 og 946 0,1. Hvis vi ønsker å være agnostiker om det er en lokal trend, kan en av SES-modellene være enklere å forklare, og vil også gi mer mid-of-the-road prognoser for de neste 5 eller 10 periodene. (Tilbake til toppen av siden.) Hvilken type trend-ekstrapolering er best: Horisontal eller lineær Empirisk bevis tyder på at hvis dataene allerede er justert (om nødvendig) for inflasjon, kan det være uhensiktsmessig å ekstrapolere kortsiktig lineær trender veldig langt inn i fremtiden. Trender som tyder på i dag, kan løsne seg i fremtiden på grunn av ulike årsaker som forverring av produkt, økt konkurranse og konjunkturnedganger eller oppgang i en bransje. Av denne grunn utfører enkel eksponensiell utjevning ofte bedre ut av prøven enn det ellers kunne forventes, til tross for sin kvadratiske kvadratiske horisontal trend-ekstrapolering. Dampede trendmodifikasjoner av den lineære eksponensielle utjevningsmodellen brukes også i praksis til å introdusere en konservatismeddel i sine trendprognoser. Den demonstrede LES-modellen kan implementeres som et spesielt tilfelle av en ARIMA-modell, spesielt en ARIMA-modell (1,1,2). Det er mulig å beregne konfidensintervall rundt langsiktige prognoser produsert av eksponentielle utjevningsmodeller, ved å betrakte dem som spesielle tilfeller av ARIMA-modeller. (Pass på: ikke alle programmer beregner konfidensintervaller for disse modellene riktig.) Bredden på konfidensintervaller avhenger av (i) RMS-feilen i modellen, (ii) type utjevning (enkel eller lineær) (iii) verdien (e) av utjevningskonstanten (e) og (iv) antall perioder fremover du forutsetter. Generelt sprer intervallene raskere da 945 blir større i SES-modellen, og de sprer seg mye raskere når lineær snarere enn enkel utjevning brukes. Dette emnet blir diskutert videre i ARIMA-modellene i notatene. (Gå tilbake til toppen av siden.) LabVIEW Programmering Spesielle emneregister FØRSTE LabVIEW FeilsøkingLabVIEW Feilsøking Spesielt notat på biblioteket Vis: Fra 2013 ble cRIO-simulatoren lagt til. Dette introduserte to forskjellige versjoner av mange av WPILib vis, en for å utføre frittstående på en PC og en annen for standard drift på roboten cRIO. Den riktige versjonen av bibliotekskoden blir lastet avhengig av nåværende Target (PC vs. cRIO). En merkelig bivirkning av dette er at hvis du slipper et bibliotek vi på et tomt vi bare driller ned for å studere internalerne, så vil du sannsynligvis få PC-versjonen og du vil studere hvordan cRIO-simulatoren fungerer, ikke hvordan robotversjonen av koden fungerer. Vanlige robotoperasjoner Her er eksempler på måter å gjøre noen av de vanligste roboten funksjoner på. Fordi rammen sprer de nødvendige elementene over flere filer, er disse eksemplene i bildeform for å få alle delene sammen hvor du kan se alt med ett blikk. Hvert eksempel inkluderer menybanene til hvor alle ikonene som brukes i bildet, er funnet. LabVIEW tilbyr også frittstående eksempler fra vinduet Komme i gang som inkluderer koblingsskjemaer for tilkobling av enheter på riktig måte. Disse prøveprosjektene er flotte for testing hvis en enhet fungerer og kobles riktig. Siden de er frittstående programmer, tar det litt mellomliggende forståelse av standardrammen for å finne ut hvordan man skal integrere konseptene riktig i LabVIEW-prosjektet. JoystickExample (2015) WPI Robotics Library-DriverStation-Joystick Programmering-Array-Index Array Digital Input Eksempel. f. eks WPI Robotics Library-IO-DigitalInput Analog Input Eksempel (2015) WPI Robotics Library-IO-AnalogChannel Relay Eksempel (2015) WPI Robotics Library-Actuators-Relay WPI Robotics Library-DriverStation-Joystick Programmerings-Sammenligning Programmering-Array - Index Array Servo-eksempel (2015) WPI Robotics Library-Actuators-Servo WPI Robotics Library-DriverStation-Joystick Programmering-Sammenligning Programmering-Array-Index Array Single Motor Eksempel (2015) WPI Robotics Library-Actuators-MotorControl WPI Robotics Library-DriverStation - Joystick Programmering-Array-Index Array-knapp Slå på handling (2015) WPI Robotics Library-DriverStation-Joystick Programmering-Strukturer Programmering og sammenligning Programmering-Cluster, Klasse, Variant Programmering-Array-Index Array Button Kontroll av Motoreksempel (2015) WPI Robotics Library - Actuators-MotorControl WPI Robotics Library-DriverStation-Joystick Programmering-Sammenligning Programmering-Array-Index Array Ønsker flere knapper Legg til en Velg for hver slik slik: Ikke wan t må fortsette å holde knappen nede. Legg deretter til en tilbakekoblingsnode for å huske: Bruke en xBox hvor utløserne faktisk leses som en aksel: Enkeltmagneteksempel (2015) WPI Robotics Library-Actuators-Solenoid WPI Robotics Library-DriverStation-Joystick Programmering-Array-Index Array Dobbel Solenoid Eksempel (2015) WPI Robotics Library-Aktuatorer-Solenoid Programmering-Boolean WPI Robotics Library-DriverStation-Joystick Programmering-Array-Index Array Arcade Drive Eksempel (2015) WPI Robotics Library-RobotDrive WPI Robotics Library - DriverStation-Joystick Programmering-Array-Index Array Tank Drive Eksempel (2015) WPI Robotics Library-RobotDrive WPI Robotics Library-DriverStation-Joystick Programmering-Array-Index Array Holonomisk eller Mecanum Drive Eksempel (2015) WPI Robotics Library-RobotDrive WPI Robotics Library - DriverStation-Joystick Programmering-Array-Index Array CAN Arcade Drive Eksempel (2017) WPI Robotics Library-Actuators-Motor Control-CAN Motor Talon SRX WPI Robotics Library-DriverStation-J Oystick Programmering-Array-Index Array Button Start av Timed Action (2015) - de tidsforsinkelser som brukes her som et eksempel, kan erstattes med sensorer som forteller positivt når mekanismen er cocked eller er ferdig med å skyte. WPI Robotics Library-DriverStation-Joystick Programmering-Strukturer Programmerings-Sammenligning Programmering-Array-Index Array Hvilken knapp ble presset (2015) - Nyttig for å avgjøre hvilken av flere joystick eller Custom Driver Station-knappene som ble presset. Dette virker basert på hvilken av en rekke knapper som ble presset. Laveste nummerknapp vinner hvis flere trykkes på en gang. WPI Robotics Library-DriverStation-Enhanced IO Programmering-Strukturer Programmering-Arrays Programmering-Numerisk Programmering-Boolean Programmering-Array-Search 1D Array Button Increment Power (2015) - Dette øker eller senker strømmen til en motor når en av knappene trykkes , så det øker kraften ett trinn med hvert trykk. Programmering-Strukturer Programmering-Sammenligning Programmering-Array-Index Array POV (Punkt eller Hattkontroll) (2017) - POV eller Hat-bryteren er en felles kontrollbryter på spillkontrollere. Den håndteres på en uvanlig måte, fordi det er en 360 graders knapp som sender retningsvinkelen den trykkes på (i 45 graders trinn). Servos solenoider brukes bare her som eksempel. Programmering-Strukturer Programmering-Array-Indeks Array WPI Bibliotek-Aktuatorer-Servo WPI Bibliotek-Aktuatorer-Solenoid Switch (2015) - har en bytte for å velge Normalt lukket eller Normalt åpen ledning. Har en tellermodus som teller antall ganger bryteren er aktivert. WPI Robotics Library-Sensors-Switch Programmering-Array-Index Array Limit Switch (2015) WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-IO-DigitalInput Programmering-Strukturer Programmering og Sammenligning Programmering-Boolean Limit Throttle (2015) - dette eksemplet fungerer KUN i Teleop. vi fordi det avhenger av den vanlige 50Hz-frekvensen som Teleop. vi blir kalt til. For å bruke det i Periodiske Oppgaver, for eksempel, ville det bli kalt inne i en loop og en loop forsinkelse ville bli lagt til. WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-Actuators-MotorControl Programmering-Numerisk Programmering-Array-Index Array Joystick Response Curve (2015) - Eksempel er en enkel kubet responskurve WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-Actuators - MotorControl Programmering-Sammenligning Programmering-Numerisk Programmering-Array-Index Array Joystick Deadband (2015) - Hvordan håndtere en slurvet joystick som ikke går helt tilbake til null når den slippes ut. Det første eksemplet har det samme dødbåndet, men avkorter motorutgangen som leverer mellom .1 og 1 (eller -.1 og -1), slik at ingen .05-effekt noen gang kommer opp. Dette er bra for enheter, for eksempel drivetrainer, som ikke vil flytte med mindre enn .3 kraft uansett. Det gir joysticken litt mer spekter. I det andre eksemplet ignoreres joysticken innenfor dødbåndet (.1 til -1 i dette eksemplet) og utenfor det båndet leverer motorkraft fra 0 til 1. WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-Actuators-MotorControl Programmering - Sammenligning Programmering-Numerisk Programmering-Array-Index Array Joystick Maks. Gassgrense (2015) - Hvordan håndtere et stasjonstog som er for fort (vel, hvis du ikke kan klare det ned). Det første eksemplet bruker gasspaken på en ekstrem 3D-joystick som en variabel kontroll for å begrense maksimal drivkraft til mellom 50-100. En mulig variasjon kan være å tillate mer strøm til Arcade-rotasjonsinngangen. I det andre eksemplet er maksimal kraft begrenset til en hardkodet 80. WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-Actuators-MotorControl Programmering og sammenligning Programmering-Numerisk programmering-Array-Index Array Spenning Korrigert tankdrev Eksempel (2015) - dette WPI Robotics Library-DriverStation-Joystick 3-posisjonsbryter (2015) WPI Robotics Library-IO-DigitalInput Programmering og sammenligning Programmering-Numerisk Digital 0-9 er en enkel måte å gjøre stasjonskontrollene dine til en litt mer konsistent WPI Robotics Library-RobotDrive. BCD Switch (2015) WPI Robotics Library-IO-DigitalInput Programmering-Boolean Programmering-Array Skriv data til disk (2015) Programmering-fil IO Programmering-fil IO-filkonstanter Skriv bilde til disk (2015) Programmering-fil IO Programmeringsfil IO-filkonstanter FIRST Vision-Image Management Tachometer (2015) - antar en digital sensor, som for eksempel en reflekterende lyssensor, brukes til å oppdage et spinnende objekt. En advarsel om Counter - det kan produsere krypterte eller falske verdier ved oppstart, så vær forsiktig og undersøk resultatet når du først bruker den. WPI Robotics Library-Sensors-Counter Encoder (2015) Tillater bare at fire kodere blir samplet på 4x, men mange ved 2X. WPI Robotics Library-Sensors-Encoder WPI Robotics Library-IO-DigitalInput Gyroscope (2015) WPI Robotics Library-Sensors-Gyro Accelerometer (2015) WPI Robotics Library-Sensors-Accelerometer Potentiometer (2015) WPI Robotics Library-Sensors - Potentiometer Ultrasonic Sensor - Bare for parret emittersensor Vex-stil (2015) WPI Robotics Library-Sensors-Ultrasonic I2C-sensor (2015) WPI Robotics Library-Communications-I2C Programmering-Array Programmering-Numerisk-Data Manipulering Programmering-Array-Indeks Array Omvendt eller Bytt Hva er Front of Robot (2017) Programmering-Strukturer Programmering-Boolean Programmering-Numerisk Programmering-Array-Index Array Counting Ting (2015) WPI Robotics Library-IO-DigitalInput Programmering-Strukturer Programmering-Sammenligning Programmering-Boolean Moving Average (2015) - Du ringer denne subvi å legge til en ny verdi med hver samtale, og den gir gjennomsnittet over et vindu i de siste n-prøvene. Du forteller det antall verdier (n) til gjennomsnittet bare med det første anropet, deretter blir innspillingen ignorert. Den lar deg også vite når du har nådd et fullt sett med verdier. Dette eksemplet illustrerer initialisering, sekvensering for å unngå clobbering-verdier som du bruker dem, beskytter mot endrede innganger som ikke kan endres, array manipulering og opprette en syklingsindeks. LabVIEW har ganske mange innebygde filtre som gjør arbeidet for deg som ligger i Funksjoner pallete under Signal Processing-Filters. Programmering-Array Programmering-Strukturer Programmering-Sammenligning Programmering-Numerisk Programmering-Numerisk-Konvertering Programmering-Boolean Programmering-Synkronisering State Machine (2015) - ideen her er at du vil gjøre forskjellige ting basert på en bestemt tilstand programmet ditt følger med. I dette eksemplet legger du til noen slags aktiviteter for hver stat, for eksempel aktivering av solenoider eller motorer. Stater kan endres basert på sensor tilbakemelding, for eksempel en ball sensor. WPI Robotics Library-DriverStation-Joystick Programmering-Strukturer Programmering-Sammenligning Programmering-Numerisk Programmering-Array-Index Array Delayed Event (2015) - Dette er for bruk innen iterativ vis, for eksempel Teleop, og kan bare starte en handling, og stoppe den n sekunder senere. Denne typen handling kan også utføres for deg ved Forløpt tid vi. WPI Robotics Library-DriverStation-Joystick Programmering-Strukturer Programmering-Sammenligning Programmering-Timing Programmering-Numerisk Programmering-Numerisk Konvertering Programmering-Array-Index Array P (ID) Eksempel (2015) - Denne koden slaver en pott på roboten til x - aks av en joystick via proporsjonal tilbakemelding. Ingen I - eller D-termer brukes. Mesteparten av arbeidet her er bare den delen som kartlegger hele spekteret av styrespakbevegelse til styremotorpotensiometeret (potten). PID-delen er ganske enkel. Jo vanskeligere del er å justere P-koeffisienten ved å eksperimentere med den virkelige roboten. WPI Robotics Library-DriverStation-Joystick WPI Robotics Library-IO-AnalogChannel WPI Robotics Library-Actuators-MotorControl PID Programmering-Numerisk Programmering-Array-Index Array Kamera Eksempel (2015) WPI Robotics Library-Camera FIRST Vision-Image Management Programmering-Strukturer Avbryt (2015) Bruk av dette vil være sjeldent, men dette kan brukes med enten en digital inngang eller en analog utløser. WPI Robotics Library-Utilities-Interrupts WPI Robotics Library-IO-DigitalInput Equations (2015) Programmering-Numerisk Matematikk-Elementær Spesielle Funksjoner-Trigonometriske Funksjoner Programmering-Strukturer Formelnoden gjør det mulig å sette inn et ganske godt delmengde av C. Det er ikke bare lar deg skrive ligninger, men også sløyfer og betinget kode. Kaller C-kode (2015) For å ringe til C-funksjoner fra LabVIEW kan du opprette et C-kildebibliotek, og deretter ringe inn i det biblioteket ved hjelp av en samtalebiblioteksfunksjon. For enkel kode bruk formelnoden nevnt ovenfor. Formelnoden tillater innføring av et ganske godt delmengde av C. Det lar deg ikke bare skrive ligninger, men også sløyfer og betinget kode. Autonom Programmering Autonom Independent. vi kan være flere parallelle oppgaver. For eksempel kan de følgende to prøvene eksistere ganske komfortabelt i samme vi. To uavhengige sekvenser som opererer samtidig, man kjører roboten mens den andre blinker et solenoid statuslys. Denne saken er ganske enkel, men det illustrerer at mye mer komplisert parallell uavhengig oppgave som dette er mulig. Kanskje en robot som jonglerer mens du navigerer på en labyrint. Flat sekvens - Sannsynligvis den enkleste metoden for programmering av en fast sekvens av autonome trekk. Alt i en ramme må fullføres før neste ramme starter. Det ser ut som filmfilm. Dette eksemplet forutsetter at Enabled Motor Safetys har blitt deaktivert: Få Microsoft Excel Viewer Få Microsoft PowerPoint Viewer Få WinZip Copyright copy 2005 - 2017 Hauppauge Robotics. Alle rettigheter reservert. Om dette nettstedet.

No comments:

Post a Comment