Sisukord:
- Samm: tööriistad ja materjalid
- 2. etapp: katse loomine
- 3. samm: katse läbiviimine
- Samm 4: Katse: proovi määr
- 5. samm: katsetage: müra kuvatakse
- 6. samm: katsetage: vähendage müra liikuva keskmise abil
- Samm 7: Katse: keskmine liikuvus ja proovivõtu kiirus
- 8. samm: Katse: logimine käivitajaga
- 9. samm: Katse: logimine päästikuga - valjem müra
- 10. samm: tehke oma katseid
- 11. samm: logimistarkvara tehnikate kasutamine
Video: Katsed täiustatud andmete logimisel (Pythoni kasutamine): 11 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
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
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 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
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
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
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
Selles katses võrdleme toorsignaali müraga ja kahte erinevat müra vähendamise varianti.
- Keskmine proovivõtu sagedus ja keskmine jooksev keskmine
- 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
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
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
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
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:
Pythoni kasutamine mitte-inglise klaviatuuripaigutuste õppimiseks: 8 sammu
Pythoni kasutamine mitte-inglise klaviatuuripaigutuste õppimiseks: Tere, ma olen Julien! Olen informaatikatudeng ja täna näitan teile, kuidas saate Pythoni abil õpetada endale mitte-inglise keele klaviatuuripaigutust. Tänapäeval toimub palju keeleõpet veebis ja üks asi, mida inimesed saavad
Temperatuurianduri (TMP006) reaalajas andmete joonistamine MSP432 LaunchPadi ja Pythoni abil: 9 sammu
Temperatuurianduri (TMP006) reaalajas andmete joonistamine MSP432 LaunchPadi ja Pythoni abil: TMP006 on temperatuuriandur, mis mõõdab objekti temperatuuri, ilma et oleks vaja objektiga ühendust võtta. Selles õpetuses joonistame Pythoni abil BoosterPackist (TI BOOSTXL-EDUMKII) reaalajas temperatuuri andmed
Liikumise juhtimine Raspberry Pi ja LIS3DHTR abil, 3-teljeline kiirendusmõõtur, Pythoni kasutamine: 6 sammu
Liikumise juhtimine Raspberry Pi ja LIS3DHTR, 3-teljelise kiirendusmõõturi abil, kasutades Pythoni: Ilu ümbritseb meid, kuid tavaliselt peame selle tundmiseks aias jalutama. - RumiAsame haritud rühmana, kes me näime olevat, investeerime valdava osa oma energiast töötamiseks enne arvutite ja mobiiltelefonide kasutamist. Seetõttu laseme sageli oma heaolul
Kompleksse kunsti anduriplaadi kasutamine puhaste andmete juhtimiseks WiFi kaudu: 4 sammu (piltidega)
Kompleksse kunstianduriplaadi kasutamine puhaste andmete juhtimiseks WiFi kaudu: kas olete kunagi tahtnud katsetada žestikontrolli? Paned asjad käeliigutusega liikuma? Muusika juhtimine randme keerdumisega? See juhend annab teile teada, kuidas! Complex Arts Sensor Board (complexarts.net) on mitmekülgne mikro
Andmete hankimise ja andmete visualiseerimise süsteem MotoStudent elektrilise võidusõiduratta jaoks: 23 sammu
Andmete hankimise ja andmete visualiseerimise süsteem MotoStudent Electric Racing Bike jaoks: Andmete kogumise süsteem on riist- ja tarkvara kogum, mis töötab koos, et koguda andmeid välisanduritelt, salvestada ja töödelda neid hiljem, et neid oleks võimalik graafiliselt visualiseerida ja analüüsida, võimaldades inseneridel teha