Turinys:

Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“): 11 žingsnių
Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“): 11 žingsnių

Video: Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“): 11 žingsnių

Video: Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“): 11 žingsnių
Video: Įgaliojimų registras: išrašų paieška sudarius duomenų teikimo sutartį 2024, Liepa
Anonim
Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“)
Išplėstinio duomenų registravimo eksperimentai (naudojant „Python“)

Yra daug duomenų registravimo instrukcijų, todėl kai norėjau sukurti savo medienos ruošos projektą, apsidairiau krūvoje. Kai kurie buvo geri, kai kurie ne tokie, todėl nusprendžiau pasinaudoti geresnėmis idėjomis ir pateikti savo paraišką. Dėl to projektas buvo tobulesnis ir sudėtingesnis, nei tikėjausi iš pradžių. Viena jo dalis tapo eksperimentų serija apdorojant jutiklių duomenis. Ši instrukcija leidžia išbandyti tuos pačius ar panašius eksperimentus.

(Visą kodą galite peržiūrėti ir atsisiųsti adresu: „GitHub“kodas Galite patekti į vaizdą, galbūt kitame lange, vos 2 paspaudimais)

Paprastai duomenų registravimas apima šiuos dalykus:

  • Duomenų surinkimas: perskaitykite kai kuriuos jutiklio duomenis. Dažnai tai tik skaitymas iš analoginio į skaitmeninį keitiklį (ADC) tokiame įrenginyje kaip „Arduino“.
  • Duomenų apdorojimas: skaitant ADC vertę, keitiklių išvestį paprastai reikia pakeisti tinkamais vienetais. Taip pat gali tekti šiek tiek pakoreguoti, kad būtų sukalibruotos vertės, kad būtų pašalintos jutiklio klaidos.
  • Filtravimas: Duomenys paprastai turi tam tikrą triukšmą, todėl juos galima filtruoti, todėl jūs ieškote signalo savo duomenyse, o ne triukšmo.
  • Duomenų saugojimas: duomenys išsaugomi galbūt teksto faile, galbūt debesyje. Duomenys turėtų išlikti, net jei maitinimas nutrūksta. Lengva išsaugoti per daug duomenų, turime mažą triuką, kaip sumažinti duomenų saugojimo vietą.
  • Duomenų rodymas: metodai, kaip peržiūrėti jūsų duomenis, o ne iš tikrųjų duomenų registravimas, bet jei nerodote tam tikro duomenų, kodėl juos rinkti?
  • Nuotolinė prieiga: nebūtina, bet malonu turėti.

Daugelyje nurodymų yra keletas, bet ne visi aukščiau išvardyti dalykai, arba jie atliekami labai paprastai. Ši instrukcija padės išspręsti 2 dažnai praleistas registravimo problemas ir kaip premiją suteiks jums galimybę nubraižyti duomenis nenaudojant debesies paslaugos. Galite naudoti visą dalyką arba ištraukti gabalus ir permaišyti juos į savo projektą.

1 žingsnis: įrankiai ir medžiagos

Įrankiai ir medžiagos
Įrankiai ir medžiagos

Šis pavyzdys yra „Python“, todėl jis bus paleistas ir komponentus galima naudoti beveik bet kurioje OS, įskaitant „Mac“, asmeninį kompiuterį, „Linux“ir „Raspberry Pi“.

Taigi, jei norite naudoti šią instrukciją, jums tereikia paleisti „Python 3.6“aplinką ir atsisiųsti pridėtą kodą. Paleidę mano nustatytą kodą, galite jį pakeisti savo eksperimentams. Kaip įprasta naudojant „Python“, gali tekti pridėti keletą paketų/modulių, kad viskas veiktų. Mano „Spyder“aplinkoje yra beveik visos reikalingos dalys (žr. „Grafiko instrukciniai vaizdai su„ Python “ekrano grandymu). Kai pirmą kartą paleidžiate, stebėkite, ar nėra klaidų pranešimų, jie praneš apie visas trūkstamas jūsų aplinkos dalis.

Kiti du veiksmai jums pasakys, kaip sukurti ir vykdyti savo eksperimentą, tačiau tikriausiai geriau palaukti, kol atliksite įtrauktus eksperimentus, prieš bandydami atlikti savo.

Kad suprastumėte kodą, turėsite turėti šiek tiek patirties dirbant su objektais orientuotu „Python“ir paaiškinti, kad tai nėra šios instrukcijos taikymo sritis, tačiau „Google“turėtų suteikti jums bet kokios pagalbos, kurios jums gali prireikti.

Atkreipkite dėmesį į kodą: („GitHub“kodas Galite patekti į vaizdą, galbūt kitame lange, vos 2 paspaudimais) dabar yra „Python 3.6“, todėl geriausia turėti 3.6. Senesnę kodo versiją rasite čia esančiose nuorodose.

2 žingsnis: eksperimento kūrimas

Eksperimento kūrimas
Eksperimento kūrimas

Kuriant eksperimentą yra trys programavimo žingsniai (ir eilutės). Kiekvienas eksperimentas yra funkcija „LoggingSim“objekte faile simulate_logging.py. Pažvelkime į 1 eksperimentą (tik pirmą diagramą), kurį atliksime kitame žingsnyje:

def eksperimentas_su_sample_rates (savarankiškai):

print "" "Eksperimentas su mėginių dažniu Žvelgiant į skirtingus mėginių dažnius, keičiant delta T" "" self.start_plot (plot_title = "Sample Rates - 1/3 dalis: Delta T = 1,0") self.add_sensor_data (name = "dt = 1. ", amplitudė = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Kiekvienas eksperimentas yra parašytas kaip sava funkcija, todėl mes turime eilutę, apibrėžiančią funkciją (def eksperimentas…..)

Kita eilutė be komentarų (start_plot (…)) sukuria eksperimento objektą ir suteikia jam pavadinimą.

Kita eilutė be komentarų (add_sensor_data (…)) yra padalyta į kelias eilutes. Ji imituoja jutiklį, matuojantį signalą su potencialiai triukšmu ir tam tikru apdorojimu. Funkcijos argumentai yra šie:

  • vardas: vardas, įrašytas į galutinę diagramą duomenims identifikuoti
  • amplitudė: koks didelis signalas, mes visada naudosime amplitudę 1. šioje instrukcijoje.
  • noise_amp: koks didelis triukšmas, 0. nėra triukšmo, pradėsime čia.
  • delta_t: laikas tarp matavimų, kontroliuoja imties dažnį.
  • max_t: maksimalus laikas, kai renkame duomenis, šioje instrukcijoje visada naudosime 10.
  • run_ave: apdorojimas naudojant einamąjį vidurkį, 0 reiškia jokio apdorojimo.
  • trigger_value: apdorojimas naudojant paleidimą, 0 reiškia jokio apdorojimo

paskutinėje, nekomentuojančioje eilutėje (self.show_plot ……) rodoma diagrama.

Kad viskas būtų šiek tiek sudėtingiau, eksperimente galite turėti kelias eilutes arba kelias diagramas, tai turėtų būti aišku iš tolesnių eksperimentų.

3 žingsnis: atlikite eksperimentą

Tai yra eksperimento vykdymo kodas. Kaip įprasta „Python“, jis dedamas failo pabaigoje.

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

Tai tik 2 eilutės:

  • Sukurkite registravimo simuliatorių (LoggingSim ())
  • Vykdykite (sim_logging.experiment_with_sample_rates ())

Atsisiųstame kode turiu dar keletą eilučių ir komentarų, tai turėtų būti lengva išsiaiškinti.

4 žingsnis: eksperimentas: mėginio dažnis

Eksperimentas: mėginio dažnis
Eksperimentas: mėginio dažnis
Eksperimentas: mėginio dažnis
Eksperimentas: mėginio dažnis
Eksperimentas: mėginio dažnis
Eksperimentas: mėginio dažnis

Čia sukurtas simuliatorius visada išleidžia gražią, lygią 1 amplitudės sinusinę bangą. Šiam eksperimentui mes susipainiosime su imties dažniu, pakoreguotu delta_t, laiko skirtumu tarp mėginių. Mes neturėsime triukšmo ar kitokio apdorojimo. Kodas naudoja 3 imties dažnius (delta_t = 1,0, 0,1 ir 0,01.) Kadangi diagramos krenta viena ant kitos, eksperimentas nustatytas taip, kad būtų sudarytos 3 skirtingos diagramos. Gautos diagramos yra šio žingsnio vaizdai.

def eksperimentas_su_sample_rates (savarankiškai):

print "" "Eksperimentas su mėginių dažniu Žvelgiant į skirtingus mėginių dažnius, keičiant delta T" "" self.start_plot (plot_title = "Eksperimento mėginių dažnis 1/3: Delta T = 1,0") self.add_sensor_data (vardas = "dt = 1"). ", amplitudė = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Eksperimento mėginių dažnis 2/3: Delta T = 0,1 ") self.add_sensor_data (vardas =" dt = 1. ", amplitudė = 1., triukšmo_amp =.0, delta_t = 0,1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ savarankiškai.start_plot (plot_title = "Experiment Sample Rates 3/3: Delta T = 0,01") self.add_sensor_data (pavadinimas = "dt = 1.", amplitudė = 1., triukšmo_amp =.0, delta_t = 0,01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Norėdami jį paleisti, naudokite eilutę: sim_logging.experiment_with_sample_rates ()

Galimos išvados:

  • Per mažas mėginių ėmimo dažnis yra tikrai blogas.
  • Aukštos normos dažnai yra geresnės.

(„Python 3.6“kodas „GitHub“nuorodoje žemiau instrukcijose, 2.7)

5 žingsnis: eksperimentas: rodomas triukšmas

Eksperimentas: rodomas triukšmas
Eksperimentas: rodomas triukšmas

Šiame eksperimente mes išlaikome tą patį signalą, naudojame vidutinį atrankos dažnį ir turime skirtingą triukšmo kiekį (noise_amp =.0,.1, 1.0.) Vykdykite jį naudodami: sim_logging.experiment_showing_noise (). Rezultatas yra vienas grafikas su 3 eilutėmis.

Galima išvada:

Dėl triukšmo sunku matyti signalą, jei įmanoma, sumažinkite

Kodas:

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

def experiment_showing_noise (self): print "" "Eksperimentas, rodantis triukšmą Žiūrint į skirtingą triukšmo kiekį keičiant triukšmo amplitudę." "" self.start_plot (plot_title = "Experiment Showing Noise") self.add_sensor_data (name = "noise = 0.0") ", amplitudė = 1., triukšmo_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (pavadinimas =" triukšmas = 0,1 ", amplitudė = 1., triukšmo lemputė =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (pavadinimas = "triukšmas = 1.0", amplitudė = 1., triukšmo lemputė = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

6 žingsnis: eksperimentuokite: sumažinkite triukšmą naudodami slenkantį vidurkį

Eksperimentas: sumažinkite triukšmą naudodami slenkantį vidurkį
Eksperimentas: sumažinkite triukšmą naudodami slenkantį vidurkį
Eksperimentas: sumažinkite triukšmą naudodami slenkantį vidurkį
Eksperimentas: sumažinkite triukšmą naudodami slenkantį vidurkį

Slenkamasis vidurkis (pavyzdžiui, su 8 ilgiu) atlieka paskutinius 8 matavimus ir juos įvertina. Jei triukšmas atsitiktinis, tikimės, kad jo vidurkis bus beveik 0. Vykdykite eksperimentą naudodami: sim_logging.experiment_showing_noise (). Išveskite vieną grafiką.

Galimos išvados:

  • Slenkamasis vidurkis pašalina daug triukšmo
  • Kuo ilgesnis slenkamasis vidurkis, tuo labiau sumažėja triukšmas
  • Ilgesnis slenkamasis vidurkis gali sumažinti ir iškraipyti signalą

Kodas:

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

def experiment_with_moving_average (self): print "" "Eksperimentas su„ MovingAverage “Žiūrint į skirtingus„ MovingAverage “, keičiant ilgį. Visi turi tą patį triukšmą." "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-1/2: No Moving Average") self.add_sensor_data (vardas = "ave len = 0", amplitudė = 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-2/2 dalis: Len 8 ir 32") self.add_sensor_data (pavadinimas = "ave len = 8", amplitudė = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_value = 0) self.add_sensor_data (name = "ave len = 32", amplitudė = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()

7 žingsnis: eksperimentas: slenkamasis vidurkis ir mėginio dažnis

Eksperimentas: slankusis vidurkis ir mėginio dažnis
Eksperimentas: slankusis vidurkis ir mėginio dažnis

Šiame eksperimente mes lyginame neapdorotą signalą su triukšmu ir 2 skirtingais triukšmo mažinimo variantais.

  1. Vidutinis imties dažnis ir vidutinis veikimo vidurkis
  2. Didelis mėginių dažnis ir ilgas veikimo vidurkis

Vykdykite jį su: sim_logging …… Išėjimas yra vienas grafikas. Manau, aišku, kad antrasis numato geresnį triukšmo mažinimo darbą, todėl galime daryti išvadą, kad:

Didelis mėginių dažnis ir ilgas bėgimo vidurkis yra geri

Bet jūs turite nepamiršti, kad tai kainuoja. #2 reikia daug daugiau apdorojimo, todėl išsaugoma daug daugiau duomenų. Kaina gali būti verta arba ne. Kitame eksperimente pridėsime trigerį - įrenginį, kuris sumažins saugomų duomenų kiekį.

Kodas:

def eksperimento_su judančiu_vidutiniu_ ir_sample_rate (savarankiškai):

spausdinti "" "Eksperimentas su slankiuoju vidurkiu ir mėginių dažniu, dt, paleisti vidurkis yra įvairus" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Moving Average and Sample Rate") self.add_sensor_data (vardas = "dt =.1 ra = 0 trig = 0 ", amplitudė = 1., triukšmo_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (vardas =" dt =.1 ra = 10 trig = 0 ", amplitudė = 1., triukšmo lempa =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (vardas = "dt =.01 ra = 100 trig = 0", amplitudė = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

8 žingsnis: eksperimentas: registravimas naudojant trigerį

Eksperimentas: registravimas naudojant trigerį
Eksperimentas: registravimas naudojant trigerį

Šiame eksperimente pridedame trigerį. Pirma, ką aš turiu galvoje sakydamas trigerį? Aktyviklis yra metodas, kai mes renkame duomenis, bet išsaugome juos tik po to, kai kuris nors kintamasis gerokai pasikeičia. Šiuose eksperimentuose aš įjungiau laiko (x ašies) kintamąjį. Naudodamas trigerį galiu paimti didelį duomenų kiekį iš greito atrankos ir sumažinti jį iki protingesnio duomenų kiekio. Tai ypač naudinga esant dideliam imties dažniui ir ilgam veikimo vidurkiui.

Aš paėmiau 2 eilutę iš paskutinio eksperimento, kuris buvo „geras“, ir pridėjau trigerį. Vykdykite jį su: sim_logging ……. Išėjimas yra vienas grafikas, x eilutės.

Kas atsitinka? Mes gauname „gerą“grafiką su pagrįstu duomenų kiekiu (toks pat kaip 1). Didesnis apdorojimas kainavo šiek tiek. Tačiau apskritai rezultatai yra maždaug tokie patys kaip ir mažesnis filtravimo koeficientas #1. Galite padaryti išvadą:

  • Ilgai veikiantis vidurkis su paleidimu gali gerai sumažinti triukšmą, turėdamas pagrįstą duomenų kiekį.
  • Papildomas apdorojimas gali nesuteikti daug geresnių rezultatų ir kainuoja.

Kodas:

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

def experiment_with_trigger (self): print "" "Eksperimentas su paleidimu, dt, paleisti vidurkį ir suaktyvinti, kad visi būtų įvairūs" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (vardas = "dt =.1 ra = 10, trig = 0 ", amplitudė = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (vardas =" dt =.01 " ra = 100, trig =.1 ", amplitudė = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

9 veiksmas: eksperimentas: registravimas naudojant trigerį - garsesnis triukšmas

Eksperimentas: Prisijungimas naudojant trigerį - garsesnis triukšmas
Eksperimentas: Prisijungimas naudojant trigerį - garsesnis triukšmas

Leiskite atlikti tą patį eksperimentą kaip paskutinis žingsnis ir sustiprinti triukšmą. Vykdykite jį su: sim_logging …… Išvestis yra viena diagrama, 2 eilutės.

Dabar papildomas apdorojimas atrodo vertesnis. Čia gali būti pagrįsta išvada:

Triukšmo mažinimo apdorojimo kiekio ir tipo pasirinkimas priklauso nuo jūsų signalo ir triukšmo

Kodas:

def experiment_with_trigger_louder_noise (savarankiškai):

print "" "Garsesnis triukšmas nei ankstesnis eksperimentas" "" self.start_plot (plot_title = "An Experiment with Trigger-Louder Noise") self.add_sensor_data (vardas = "… dt =.1 ra = 10", amplitudė = 1., noise_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (vardas = "..dt =.01 ra = 100 tv =.1", amplitudė = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

10 žingsnis: atlikite savo eksperimentus

Atlikite savo eksperimentus
Atlikite savo eksperimentus

Tikiuosi, kad šiuo metu matote, kad šios instrukcijos metodai gali būti naudingi registruojant duomenis, tačiau jie taip pat turi būti naudojami pagalvojus. Eksperimentai su jais gali padėti šiam procesui.

Keletas pastabų apie eksperimentus ir dalykus, į kuriuos galėtumėte atkreipti dėmesį:

  • Sinusinės bangos nėra vienintelis įdomus signalo tipas, išbandykite kitus, kitas bangas ar rampas ar …
  • Triukšmui naudoju normalų paskirstymą, yra tiek daug triukšmo rūšių; turėtumėte atsižvelgti į kitus
  • Bėgimo vidurkiai yra paprastas, bet ne vienintelis būdas pažvelgti į triukšmą

Pastaba: nuotraukų registravimas iš Vikipedijos.

11 veiksmas: registravimo programinės įrangos metodų naudojimas

Naudodamiesi savo registravimo programinės įrangos metodais
Naudodamiesi savo registravimo programinės įrangos metodais

Mano kodas yra orientuotas į objektą, o vidutinio ir trigerio apdorojimą galima tiesiog nukopijuoti į jūsų „Python“aplinką ir naudoti. Objektai yra:

  • „DataTrigger“, esantis „data_trigger.py“
  • „MovingAverage“, esantis „move_average.py“

Mano pagrindinis objektas „LoggingSim“, esantis simulate_logging.py, turėtų parodyti gerą jo naudojimo pavyzdį. Jei naudojate kitą kalbą, galite perskaityti mano kodą ir įdiegti jį savo kalba.

Šis kodas gali pagerinti jūsų projekto duomenų registravimą, pabandykite.

Aukščiau pateiktas grafikas yra iš russ_hensel, kuris naudoja tą patį bėgimo vidurkį, objektą „Graph Your Solar Power“.

Rekomenduojamas: