Sisukord:

Katsed täiustatud andmete logimisel (Pythoni kasutamine): 11 sammu
Katsed täiustatud andmete logimisel (Pythoni kasutamine): 11 sammu

Video: Katsed täiustatud andmete logimisel (Pythoni kasutamine): 11 sammu

Video: Katsed täiustatud andmete logimisel (Pythoni kasutamine): 11 sammu
Video: Täitke Nextjs-kursus – õppige Nextjs-i 2 tunniga! | Reage SSR + ajakoodid 2024, Juuli
Anonim
Katsed täiustatud andmete logimisel (Pythoni kasutamine)
Katsed täiustatud andmete logimisel (Pythoni kasutamine)

Andmete registreerimise juhendeid on palju, nii et kui ma tahtsin ise oma logimisprojekti koostada, vaatasin ringi hunniku. Mõned olid head, mõned mitte nii palju, nii et otsustasin võtta mõned paremad ideed ja teha oma taotluse. Selle tulemuseks oli nii arenenum kui ka keerulisem projekt, kui ma alguses ootasin. Üks osa sellest sai seeria andurite andmete töötlemise katseid. See juhend võimaldab teil proovida samu või sarnaseid katseid.

(Saate kogu koodi vaadata ja alla laadida aadressilt: Kood GitHubis Saate vaadata, võib -olla teises aknas, vaid kahe klõpsuga)

Tavaliselt hõlmab andmete registreerimine järgmist.

  • Andmete kogumine: lugege andurilt mõningaid andmeid. Sageli on see lihtsalt analoog -digitaalmuunduri (ADC) lugemine sellises seadmes nagu Arduino.
  • Andmetöötlus: ADC väärtuse lugemisel tuleb muundurite väljund tavaliselt skaleerida õigete ühikuteni. Võimalik, et väärtuste kalibreerimiseks andurite vigade parandamiseks võib tekkida vajadus ka mõningaid kohandusi teha.
  • Filtreerimine: andmed sisaldavad tavaliselt müra, seda saab filtreerida, nii et otsite oma andmetes signaali, mitte müra.
  • Andmete salvestamine: andmed salvestatakse võib -olla tekstifaili, võib -olla pilve. Andmed peaksid säilima isegi siis, kui toide katkeb. Liiga palju andmeid on lihtne salvestada, meil on väike trikk andmete salvestusruumi vähendamiseks.
  • Andmete kuvamine: meetodid teie andmete vaatamiseks, mitte tegelikult andmete logimine, kuid kui te ei kuva neid mingil viisil, siis miks neid koguda?
  • Kaugjuurdepääs: pole vajalik, kuid tore omada.

Enamik juhendeid sisaldab mõnda, kuid mitte kõiki ülaltoodut, või tehke neid väga lihtsal viisil. See juhend annab lahenduse kahele sageli vahele jäetud logimisprobleemile ja annab teile boonusena võimaluse andmete kuvamiseks ilma pilveteenust kasutamata. Võite kasutada kogu asja või tõmmata tükke välja ja segada need oma projektiks.

Samm: tööriistad ja materjalid

Tööriistad ja materjalid
Tööriistad ja materjalid

See näide on kõik Pythonis, nii et see töötab ja komponente saab kasutada peaaegu igas OS -is, sealhulgas Mac, PC, Linux ja Raspberry Pi.

Seega on selle juhendamise kasutamiseks vaja ainult töötavat Python 3.6 keskkonda ja allalaaditud kood. Pärast minu seadistatud koodi käivitamist saate seda oma katsete jaoks muuta. Nagu Pythoni puhul tavaliselt, peate võib -olla lisama mõned paketid/moodulid, et kõik toimiks. Minu Spyderi keskkonnas on peaaegu kõik vajalikud osad paigas (vt: Graafiku juhitavad vaated Pythoni ekraani kraapimisega). Esmakordsel käivitamisel vaadake veateateid, mis teavitavad teid teie keskkonna puuduvatest osadest.

Järgmised kaks sammu räägivad teile, kuidas oma katse üles ehitada ja käivitada, kuid tõenäoliselt on parem oodata kaasatud katsete käivitamist, enne kui ise katsetate.

Koodi mõistmiseks peab teil olema natuke kogemusi objektorienteeritud Pythoni kasutamisega, selgitades, et see ei kuulu selle juhendi reguleerimisalasse, kuid Google peaks teile abi andma.

Pange tähele koodi: (kood GitHubis Saate vaadata, võib -olla teises aknas, vaid 2 klõpsuga), on nüüd Python 3.6 -s, nii et parim oleks omada 3.6. Koodi vanem versioon on siin allolevatel linkidel.

2. etapp: katse loomine

Katse ehitamine
Katse ehitamine

Katse koostamisel on kolm programmeerimisetappi (ja rida). Iga katse on funktsioon Simging_logging.py faili LoggingSim objektis. Vaatame katset 1 (ainult esimene graafik), mida järgmises etapis teostame:

def eksperimendi_proovi_hinnad (ise):

print "" "Eksperiment proovivõtu kiirustega Erinevate proovivõtu sageduste muutmine delta T" "" self.start_plot (plot_title = "Proovimäärad - osa 1/3: Delta T = 1,0") self.add_sensor_data (nimi = "dt = 1. ", amplituud = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Iga katse on kirjutatud oma funktsioonina, nii et meil on funktsiooni määratlev rida (def katse…..)

Järgmine rida kommentaarideta (start_plot (…)) loob katse jaoks objekti ja annab sellele nime.

Järgmine, kommentaarideta rea rida (add_sensor_data (…) on jagatud mitmeks reaks. See simuleerib andurit, mis mõõdab potentsiaalselt müra ja mõningase töötlusega signaali. Funktsiooni argumendid on järgmised:

  • nimi: nimi, mis pannakse lõplikule graafikule andmete tuvastamiseks
  • amplituud: kui suur on signaal, kasutame selles juhendis alati amplituudi 1.
  • noise_amp: kui suur on müra, 0. ei ole müra, alustame siit.
  • delta_t: mõõtmiste vaheline aeg kontrollib proovivõtu sagedust.
  • max_t: maksimaalne andmete kogumise aeg, kasutame selles juhendis alati 10.
  • run_ave: töötlemine jooksva keskmise abil, 0 tähendab töötlemise puudumist.
  • trigger_value: töötlemine päästiku abil, 0 tähendab töötlemise puudumist

viimane kommentaarivaba rida (self.show_plot ……) kuvab graafiku.

Asja natuke keerulisemaks muutmiseks võib graafikus olla mitu rida või katses mitu graafikut, see peaks olema selge järgnevatest katsetest.

3. samm: katse läbiviimine

See on katse läbiviimise kood. Nagu Pythonis tavaline, paigutatakse see faili lõppu.

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

See on ainult 2 rida:

  • Logimissimulaatori loomine (LoggingSim ())
  • Käivitage see (sim_logging.experiment_with_sample_rates ())

Allalaaditud koodis on mul veel paar rida ja kommentaare, see peaks olema lihtne välja mõelda.

Samm 4: Katse: proovi määr

Katse: proovi määr
Katse: proovi määr
Katse: proovi määr
Katse: proovi määr
Katse: proovi määr
Katse: proovi määr

Siin seadistatud simulaator väljastab alati kena sujuva siinuslaine amplituudiga 1. Selle katse jaoks segame proovide sagedust, mida on korrigeeritud delta_t, proovide vahelist ajavahemikku. Meil pole müra ega muud töötlemist. Kood kasutab 3 valimissagedust (delta_t = 1,0, 0,1 ja 0,01.) Kuna graafikud langevad üksteise peale, on katse seadistatud tootma 3 erinevat graafikut. Saadud graafikud on selle sammu pildid.

def eksperimendi_proovi_hinnad (ise):

print "" "Eksperiment proovivõtu kiirustega Erinevate proovivõtu sageduste muutmine delta T muutmisega" "" self.start_plot (plot_title = "Eksperimendi näidismäärad 1/3: Delta T = 1,0") self.add_sensor_data (nimi = "dt = 1. ", amplituud = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Katse proovide määr 2/3: Delta T = 0,1 ") self.add_sensor_data (name =" dt = 1. ", amplituud = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ ise.start_plot (plot_title = "Experiment Sample Rates 3/3: Delta T = 0,01") self.add_sensor_data (name = "dt = 1.", amplituud = 1., noise_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Selle käivitamiseks kasutage rida: sim_logging.experiment_with_sample_rates ()

Võimalikud järeldused:

  • Liiga madal proovivõtu määr on tõesti halb.
  • Kõrge hind on sageli parem.

(Python 3.6 kood GitHubi lingil allpool juhendite juures, 2.7)

5. samm: katsetage: müra kuvatakse

Katse: kuvatakse müra
Katse: kuvatakse müra

Selles katses hoiame sama signaali, kasutame keskmist diskreetimissagedust ja müra on erinev (noise_amp =.0,.1, 1.0.) Käivitage see järgmiselt: sim_logging.experiment_showing_noise (). Väljundiks on üks graafik, millel on 3 rida.

Võimalik järeldus:

Müra raskendab signaali nägemist, vähendage seda, kui saate

Kood:

# ------------------------------------------------

def experiment_showing_noise (self): print "" "Eksperiment, mis näitab müra Vaadates erinevat müra, muutes müra amplituudi." "" self.start_plot (plot_title = "Experiment Showing Noise") self.add_sensor_data (name = "noise = 0.0 ", amplituud = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =" noise = 0.1 ", amplituud = 1., noise_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = "noise = 1.0", amplituud = 1., noise_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

6. samm: katsetage: vähendage müra liikuva keskmise abil

Katse: vähendage müra liikuva keskmise abil
Katse: vähendage müra liikuva keskmise abil
Katse: vähendage müra liikuva keskmise abil
Katse: vähendage müra liikuva keskmise abil

Liikuv keskmine (näiteks pikkusega 8) võtab viimased 8 mõõtmist ja keskmistab need. Kui müra on juhuslik, loodame, et selle keskmine väärtus on peaaegu 0. Käivitage katse järgmiselt: sim_logging.experiment_showing_noise (). Väljendage üks graafik.

Võimalikud järeldused:

  • Liikuv keskmine kõrvaldab suure osa mürast
  • Mida pikem on libisev keskmine, seda rohkem müra vähendatakse
  • Pikem libisev keskmine võib signaali vähendada ja moonutada

Kood:

# ------------------------------------------------

def experiment_with_moving_average (self): print "" "Experiment with MovingAverage Vaadates erinevaid MovingAverage pikkust muutes. Kõigil on sama müra." "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: No Moving Average") ise.add_sensor_data (nimi = "ave len = 0", amplituud = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () self.start_plot (plot_title) = "MovingAverage-Part 2/2: Len 8 ja 32") self.add_sensor_data (nimi = "ave len = 8", amplituud = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_value = 0) self.add_sensor_data (name = "ave len = 32", amplituud = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()

Samm 7: Katse: keskmine liikuvus ja proovivõtu kiirus

Katse: liikuv keskmine ja proovi määr
Katse: liikuv keskmine ja proovi määr

Selles katses võrdleme toorsignaali müraga ja kahte erinevat müra vähendamise varianti.

  1. Keskmine proovivõtu sagedus ja keskmine jooksev keskmine
  2. Kõrge proovivõtu sagedus ja pikk jooksev keskmine

Käivitage see järgmiselt: sim_logging …… Väljund on üks graafik. Ma arvan, et on selge, et nr 2 teeb müra vähendamisel paremat tööd, nii et võime järeldada, et:

Suur proovivõtu sagedus ja pikk jooksev keskmine on head

Kuid peate meeles pidama, et see maksab. #2 võtab palju rohkem tööd ja selle tulemusel salvestatakse palju rohkem andmeid. Kulud võivad olla seda väärt või mitte. Järgmises katses lisame päästiku, seadme salvestatud andmete hulga vähendamiseks.

Kood:

def eksperimendi_liikuvate_keskmiste_ja_proovi_hinnaga (ise):

print "" "Eksperiment liikuva keskmise ja proovivõtu määraga, dt, jooksu keskmine on varieeruv" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Liikuv keskmine ja proovi määr") self.add_sensor_data (nimi = "dt =.1 ra = 0 trig = 0 ", amplituud = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =" dt =.1 ra = 10 trig = 0 ", amplituud = 1., müra_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (nimi = "dt =.01 ra = 100 trig = 0", amplituud = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

8. samm: Katse: logimine käivitajaga

Katse: logimine päästikuga
Katse: logimine päästikuga

Selles katses lisame päästiku. Esiteks, mida ma pean silmas päästiku all? Päästik on meetod, mille abil me kogume andmeid, kuid salvestame need alles pärast seda, kui mõni muutuja on märkimisväärselt muutunud. Nendes katsetes panin aja (x -telje) muutujale päästiku. Kasutades päästikut, võin kiirelt proovivõttelt võtta suure hulga andmeid ja vähendada neid mõistlikumaks. See on eriti kasulik kõrge proovivõtu sageduse ja pika jooksva keskmise korral.

Ma võtsin viimase katse "nr 2" rea, mis oli "hea", ja lisasin päästiku. Käivitage see järgmiselt: sim_logging …… Väljund on üks graafik, x rida.

Mis juhtub? Saame mõistliku hulga andmetega "sama" graafiku (sama mis #1). Kõrgemal töötlemisel on olnud mõningaid kulusid. Kokkuvõttes on tulemused siiski umbes samad, mis väiksema filtreerimisega #1 madalam proovivõtu sagedus. Võite järeldada:

  • Pikaajaline keskmine käivitamisega võib anda mõistliku andmemahu korral hea müra.
  • Lisatöötlus ei pruugi anda palju paremaid tulemusi ja sellega kaasnevad kulud.

Kood:

# ------------------------------------------------

def experiment_with_trigger (self): print "" "Eksperiment käivitamisega, dt, jooksu keskmine ja käivita kõik varieeruvad" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (nimi = "dt =.1 ra = 10, trig = 0 ", amplituud = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (name =" dt =.01 ra = 100, trig =.1 ", amplituud = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

9. samm: Katse: logimine päästikuga - valjem müra

Katse: logimine päästikuga - valjem müra
Katse: logimine päästikuga - valjem müra

Teeme sama katse, mis viimane samm, ja suurendame müra. Käivitage see järgmiselt: sim_logging …… Väljund on üks graafik, 2 rida.

Nüüd tundub lisatöötlus rohkem väärt. Siin võib olla mõistlik järeldus:

Müra vähendamiseks vajaliku töötlemise hulga ja tüübi valimine sõltub teie signaalist ja mürast

Kood:

def experiment_with_trigger_louder_ioise (ise):

print "" "Valjem müra kui eelmine eksperiment" "" self.start_plot (plot_title = "An Experiment with Trigger-Louder Noise") self.add_sensor_data (name = "… dt =.1 ra = 10", amplituud = 1., noise_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (nimi = "..dt =.01 ra = 100 tv =.1", amplituud = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

10. samm: tehke oma katseid

Tehke oma katseid
Tehke oma katseid

Loodan, et näete siinkohal, et selle juhendi tehnikad võivad olla kasulikud andmete logimisel, kuid neid tuleb ka veidi järele mõelda. Nendega katsetamine võib seda protsessi aidata.

Mõned märkused eksperimentide ja asjade kohta, mida võiksite uurida:

  • Siinuslained pole ainus huvitav signaalitüüp, proovige teisi, teisi laineid või kaldteid või…..
  • Kasutasin müra jaoks normaalset jaotust, müra on nii palju erinevaid; peaksite teistega arvestama
  • Jooksvad keskmised on lihtne, kuid mitte ainus meetod müra vaatamiseks

Märkus: piltide logimine Vikipeediast.

11. samm: logimistarkvara tehnikate kasutamine

Logimistarkvara tehnikate kasutamine
Logimistarkvara tehnikate kasutamine

Minu kood on objektorienteeritud ning jooksva keskmise ja päästiku töötlemist saab lihtsalt kopeerida teie Pythoni keskkonda ja seejärel kasutada. Objektid on:

  • DataTrigger failis data_trigger.py
  • MovingAverage liikuv_keskmine.py

Minu peamine objekt LoggingSim saidil simulate_logging.py peaks andma teile hea näite selle kasutamise kohta. Kui kasutate mõnda muud keelt, saate minu koodi lugeda ja rakendada oma keeles.

See kood võib anda teie projektile parema andmete logimise, proovige seda.

Ülaltoodud graafik pärineb russ_hensel'i graafikult Päikeseenergia, mis kasutab sama jooksvat keskmist objekti.

Soovitan: