Sadržaj:
- Korak 1: Alati i materijali
- Korak 2: Izgradnja eksperimenta
- Korak 3: Izvođenje eksperimenta
- Korak 4: Eksperiment: Brzina uzorkovanja
- Korak 5: Eksperiment: Pokazivanje buke
- Korak 6: Eksperiment: Smanjite buku pokretnim prosjekom
- Korak 7: Eksperiment: pomični prosjek i brzina uzorkovanja
- Korak 8: Eksperiment: Zapisivanje s okidačem
- Korak 9: Eksperiment: Zapisivanje s okidačem - glasnija buka
- Korak 10: Napravite vlastite eksperimente
- Korak 11: Upotreba tehnika u vašem softveru za bilježenje
Video: Eksperimenti u naprednom bilježenju podataka (pomoću Pythona): 11 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
Postoji mnogo instrukcija za bilježenje podataka, pa kad sam htio izgraditi vlastiti projekt zapisivanja, pogledao sam uokolo u hrpu. Neki su bili dobri, neki ne toliko, pa sam odlučio uzeti neke bolje ideje i podnijeti vlastitu aplikaciju. To je rezultiralo naprednijim i kompliciranijim projektom nego što sam isprva očekivao. Jedan dio toga postao je niz eksperimenata u obradi podataka senzora. Ova instrukcija omogućuje vam isprobavanje istih ili sličnih eksperimenata.
(Možete pogledati cijeli kôd i preuzeti ga na: Kôd na GitHubu Možete pristupiti pregledu, možda u drugom prozoru, sa samo 2 klika)
Zapisivanje podataka obično uključuje sljedeće:
- Prikupljanje podataka: Pročitajte neke podatke sa senzora. Često je ovo samo čitanje analogno -digitalnog pretvarača (ADC) na uređaju poput Arduina.
- Obrada podataka: Prilikom čitanja ADC vrijednosti izlaz pretvarača obično se mora skalirati na prave jedinice. Možda će također biti potrebno učiniti neke prilagodbe za kalibriranje vrijednosti kako bi se ispravile greške senzora.
- Filtriranje: Podaci obično sadrže malo šuma, to se može filtrirati tako da tražite signal u svojim podacima, a ne šum.
- Pohrana podataka: Podaci se spremaju, možda u tekstualnu datoteku, možda u oblak. Podaci bi trebali preživjeti čak i ako nestane struje. Lako je uštedjeti previše podataka, imamo mali trik za smanjenje prostora za pohranu podataka.
- Prikaz podataka: Metode pregleda vaših podataka, a ne zapisivanja podataka, ali ako ne prikazujete podatke na neki način, zašto ih prikupljati?
- Daljinski pristup: Nije potrebno, ali lijepo ga je imati.
Većina instrukcija uključuje neke, ali ne sve gore navedene, ili ih čini na vrlo jednostavan način. Ovo uputstvo će riješiti 2 od često preskakanih problema s bilježenjem i kao bonus će vam dati način grafičkog prikaza vaših podataka bez korištenja usluge u oblaku. Možete upotrijebiti cijelu stvar ili izvući komadiće i izmiješati ih u vlastiti projekt.
Korak 1: Alati i materijali
Ovaj primjer je sav u Pythonu pa će se raditi na njemu, a komponente se mogu koristiti na gotovo svakom OS -u, uključujući Mac, PC, Linux i Raspberry Pi.
Dakle, za korištenje ovog instruktora sve što trebate je pokrenuto okruženje Python 3.6 i preuzmite priloženi kod. Nakon pokretanja koda koji sam postavio, možete ga izmijeniti za vlastite eksperimente. Kao što je uobičajeno s Pythonom, možda ćete morati dodati neke pakete/module kako bi sve funkcioniralo. Moje okruženje Spyder dolazi s gotovo svim potrebnim dijelovima (vidi: Grafički prikaz instrukcija s Python ekranom za struganje). Kada prvi put pokrenete program Watch for any messages, obavijestit će vas o svim dijelovima koji nedostaju u vašem okruženju.
Sljedeća dva koraka reći će vam kako izgraditi i pokrenuti vlastiti eksperiment, ali vjerojatno je bolje pričekati dok ne pokrenete uključene eksperimente prije nego što pokušate sami.
Da biste razumjeli kôd, morat ćete imati malo iskustva s objektno orijentiranim Pythonom, objašnjavajući da to izlazi iz okvira ovog uputstva, ali Google bi vam trebao pružiti pomoć koja vam može zatrebati.
Obratite pažnju na kôd: (Kôd na GitHub -u Možete pristupiti gledanju, možda u drugom prozoru, sa samo 2 klika) sada je u Pythonu 3.6, pa bi 3.6 bilo najbolje. Starija verzija koda nalazi se ovdje na donjim vezama.
Korak 2: Izgradnja eksperimenta
Postoje tri programska koraka (i linije) u izgradnji eksperimenta. Svaki eksperiment je funkcija u objektu LoggingSim u datoteci simulate_logging.py. Pogledajmo eksperiment 1 (samo prvi grafikon) koji ćemo izvesti u sljedećem koraku:
def_eksperiment_s_uzorcima_smjera (sam):
print "" "Eksperimentirajte s uzorcima Stopa gledajući različite stope uzorkovanja promjenom delte T" "" self.start_plot (plot_title = "Uzorke - dio 1/3: Delta T = 1.0") self.add_sensor_data (name = "dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
Svaki eksperiment je napisan kao vlastita funkcija pa imamo redak koji definira funkciju (def eksperiment …..)
Sljedeći redak bez komentara, (start_plot (….)) Stvara objekt za eksperiment i daje mu ime.
Sljedeća linija bez komentara, (add_sensor_data (…) podijeljena je u nekoliko redaka. Simulira senzor koji mjeri signal s potencijalno šumom i određenom obradom. Argumenti funkcije su sljedeći:
- name: naziv stavljen na završni grafikon za identifikaciju podataka
- amplitude: koliko je signal velik, uvijek ćemo koristiti amplitudu 1. u ovom uputstvu.
- noise_amp: kolika je buka, 0. nema buke, počet ćemo ovdje.
- delta_t: vrijeme između mjerenja, kontrolira brzinu uzorkovanja.
- max_t: maksimalno vrijeme prikupljanja podataka, uvijek ćemo koristiti 10 u ovom uputstvu.
- run_ave: obrada pomoću tekućeg prosjeka, 0 znači da nema obrade.
- trigger_value: obrada pomoću okidanja, 0 znači da nema obrade
posljednji redak bez komentara, (self.show_plot ……) prikazuje grafikon.
Kako bismo stvari učinili malo kompliciranijima, u eksperimentu možete imati više linija na grafikonu ili više grafikona, to bi trebalo biti jasno iz sljedećih eksperimenata.
Korak 3: Izvođenje eksperimenta
Ovo je kôd za izvođenje eksperimenta. Kao i obično u Pythonu, nalazi se na kraju datoteke.
sim_logging = LoggingSim ()
sim_logging.experiment_with_sample_rates ()
Ovo su samo 2 retka:
- Izradite simulator zapisivanja (LoggingSim ())
- Pokreni ga (sim_logging.experiment_with_sample_rates ())
U preuzetom kodu imam još nekoliko redaka i komentara, to bi trebalo biti lako shvatiti.
Korak 4: Eksperiment: Brzina uzorkovanja
Simulator, kako je ovdje postavljen, uvijek daje lijepi glatki sinusni val amplitude 1. Za ovaj eksperiment ćemo se petljati sa brzinom uzorkovanja, prilagođenom delta_t, vremenskom razlikom između uzoraka. Nećemo imati buku ili drugu obradu. Kod koristi 3 brzine uzorkovanja (delta_t = 1,0, 0,1 i 0,01.) Budući da grafovi padaju jedan na drugi, eksperiment je postavljen za stvaranje 3 različita grafikona. Dobiveni grafikoni su slike za ovaj korak.
def_eksperiment_s_uzorcima_smjera (sam):
print "" "Eksperimentirajte sa uzorkovnim stopama Gledajući različite stope uzorkovanja promjenom delte T" "" self.start_plot (plot_title = "Ogledne brzine eksperimenta 1/3: Delta T = 1.0") self.add_sensor_data (name = "dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Stope uzorka eksperimenta 2/3: Delta T = 0.1 ") self.add_sensor_data (name =" dt = 1. ", amplitude = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ sebe.start_plot (plot_title = "Omjeri uzorka eksperimenta 3/3: Delta T = 0,01") self.add_sensor_data (name = "dt = 1.", amplitude = 1., noise_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
Da biste ga pokrenuli, koristite redak: sim_logging.experiment_with_sample_rates ()
Mogući zaključci:
- Preniska stopa uzorkovanja je jako loša.
- Visoke stope su često bolje.
(Kod Python 3.6 na GitHub -u donja veza na uputama, 2.7)
Korak 5: Eksperiment: Pokazivanje buke
U ovom eksperimentu zadržavamo isti signal, koristimo srednju frekvenciju uzorkovanja i imamo različite količine šuma (noise_amp =.0,.1, 1.0.) Pokrenite ga sa: sim_logging.experiment_showing_noise (). Izlaz je jedan graf s 3 linije.
Mogući zaključak:
Buka otežava gledanje signala, smanjite ga ako možete
Kod:
# ------------------------------------------------
def eksperiment_showing_noise (self): print "" "Eksperiment prikazuje šum Gledajući različite količine šuma promjenom amplitude šuma." "" self.start_plot (plot_title = "Eksperiment prikazuje šum") self.add_sensor_data (name = "noise = 0.0 ", amplitude = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name =" noise = 0.1 ", amplitude = 1., noise_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = "noise = 1.0", amplitude = 1., noise_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
Korak 6: Eksperiment: Smanjite buku pokretnim prosjekom
Pokretni prosjek (na primjer s duljinom 8) uzima zadnjih 8 mjerenja i prosjekuje ih. Ako je buka slučajna, nadamo se da će biti u prosjeku blizu 0. Pokrenite eksperiment s: sim_logging.experiment_showing_noise (). Ispišite jedan grafikon.
Mogući zaključci:
- Pokretni prosjek uklanja većinu buke
- Što je dulji pokretni prosjek, to je smanjenje buke veće
- Dulji pokretni prosjek može smanjiti i iskriviti signal
Kod:
# ------------------------------------------------
def Experiment_with_moving_average (self): print "" "Eksperimentirajte s MovingAverage Gledajući različite MovingAverage promjenom duljine. Svi imaju istu buku." "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: No Moving Average") self.add_sensor_data (name = "ave len = 0", amplitude = 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 and 32") self.add_sensor_data (name = "ave len = 8", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_value = 0) self.add_sensor_data (name = "ave len = 32", amplitude = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()
Korak 7: Eksperiment: pomični prosjek i brzina uzorkovanja
U ovom eksperimentu uspoređujemo sirovi signal sa šumom i 2 različite varijacije smanjenja šuma.
- Srednja stopa uzorkovanja i srednje tekući prosjek
- Velika stopa uzorkovanja i veliki prosječni trajanje
Pokrenite ga sa: sim_logging …… Ispis je jedan grafikon. Mislim da je jasno da #2 bolje radi na smanjenju buke pa bismo mogli zaključiti sljedeće:
Visoka stopa uzorkovanja i dugotrajni prosjek su dobri
Ali morate imati na umu da postoji trošak. #2 zahtijeva puno više obrade i rezultira spremanjem mnogo više podataka. Troškovi mogu, ali i ne moraju biti vrijedni. U sljedećem pokusu dodat ćemo okidač, uređaj za smanjenje količine pohranjenih podataka.
Kod:
def_eksperimenta_s_mjerljivim_srednjim_i_smjerom_smjera (samo):
print "" "Eksperimentirajte s pomičnim prosjekom i brzinom uzorkovanja, dt, mijenjajte prosjek" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Pokretni prosjek i brzina uzorkovanja") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", amplitude = 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 ", amplitude = 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 = 0", amplitude = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()
Korak 8: Eksperiment: Zapisivanje s okidačem
U ovom eksperimentu dodajemo okidač. Prvo, što mislim pod okidačem? Okidač je tehnika u kojoj prikupljamo podatke, ali ih spremamo samo nakon što se neka varijabla promijenila za značajnu količinu. U tim sam pokusima stavio okidač na varijablu vrijeme (os x). Korištenjem okidača mogu uzeti brzu količinu podataka iz brzog uzorkovanja i smanjiti je na razumniju količinu podataka. Posebnost je korisna s velikom stopom uzorkovanja i dugim prosjekom.
Uzeo sam liniju #2 iz prošlog eksperimenta koja je bila "dobra" i dodao okidač. Pokrenite ga sa: sim_logging …… Izlaz je jedan grafikon, x linija.
Što se događa? Dobivamo "dobru" plohu s razumnom količinom podataka (isto kao #1). Bilo je nekih troškova u višoj obradi. Sveukupno, međutim, rezultati su približno isti kao #1 niža stopa uzorkovanja s manje filtriranja. Možete zaključiti:
- Dugotrajni prosjek s okidanjem može dati dobro smanjenje buke uz razumne količine podataka.
- Dodatna obrada možda neće dati toliko bolje rezultate i dolazi s cijenom.
Kod:
# ------------------------------------------------
def expert_with_trigger (self): print "" "Eksperimentirajte s okidanjem, dt, pokrenite prosjek i pokrenite sve varijacije" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (name = "dt =.1 ra = 10, trig = 0 ", amplituda = 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 ", amplituda = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()
=
Korak 9: Eksperiment: Zapisivanje s okidačem - glasnija buka
Uzmimo isti eksperiment kao posljednji korak i pojačamo buku. Pokrenite ga sa: sim_logging …… Izlaz je jedan grafikon, 2 retka.
Sada se dodatna obrada više isplati. Razumni zaključak ovdje bi mogao biti:
Odabir količine i vrste obrade za smanjenje šuma ovisi o vašem signalu i šumu
Kod:
def eksperiment_s_trigger_louder_noise (self):
print "" "Jača buka od prethodnog eksperimenta" "" self.start_plot (plot_title = "Eksperiment s bukom jačom bukom") self.add_sensor_data (name = "… dt =.1 ra = 10", amplitude = 1., noise_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (name = "..dt =.01 ra = 100 tv =.1", amplituda = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()
Korak 10: Napravite vlastite eksperimente
Nadam se da ćete u ovom trenutku vidjeti da tehnike u ovom uputstvu mogu biti korisne u bilježenju podataka, ali da se također moraju koristiti s malo razmišljanja. Eksperimentiranje s njima može pomoći u tom procesu.
Neke napomene o pokusima i stvarima na koje biste mogli obratiti pažnju:
- Sinusni valovi nisu jedina zanimljiva vrsta signala, isprobajte druge, druge valove ili rampe ili…..
- Za buku sam koristio normalnu distribuciju, postoji toliko mnogo vrsta buke; trebali biste uzeti u obzir druge
- Trčanje prosjeka je jednostavna, ali ne i jedina metoda za promatranje buke
Napomena: bilježenje slika s Wikipedije.
Korak 11: Upotreba tehnika u vašem softveru za bilježenje
Moj kôd je objektno orijentiran, a obrada za trčanje prosjeka i okidač može se jednostavno kopirati u vaše Python okruženje i zatim koristiti. Objekti su:
- DataTrigger u data_trigger.py
- MovingAverage u moving_average.py
Moj glavni objekt LoggingSim u simulate_logging.py trebao bi vam dati dobar primjer kako ga koristiti. Ako koristite drugi jezik, možete pročitati moj kôd i implementirati ga na svom jeziku.
Ovaj kôd može vašem projektu omogućiti bolje bilježenje podataka, pokušajte.
Gornji grafikon je iz grafikona Vaše solarne energije od strane russ_hensel koji koristi isti objekt prosječnog trčanja.
Preporučeni:
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD karticom - DHT11 Simulator zapisivača podataka u Proteusu: 5 koraka
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD karticom | Simulacija DHT11 zapisničara u Proteusu: Uvod: Bok, ovdje Liono Maker, ovdje je veza na YouTube. Radimo na kreativnom projektu s Arduinom i radimo na ugrađenim sustavima. Zapisnik podataka: Zapisnik podataka (ujedno i zapisnik podataka ili snimač podataka) je elektronički uređaj koji bilježi podatke tijekom vremena s
Iscrtavanje podataka uživo senzora temperature (TMP006) pomoću MSP432 LaunchPada i Pythona: 9 koraka
Iscrtavanje podataka uživo senzora temperature (TMP006) pomoću MSP432 LaunchPada i Pythona: TMP006 je temperaturni senzor koji mjeri temperaturu objekta bez potrebe za dodirom s objektom. U ovom ćemo vodiču iscrtati žive podatke o temperaturi iz BoosterPack-a (TI BOOSTXL-EDUMKII) pomoću Pythona
Nadgledanje ubrzanja pomoću Raspberry Pi i AIS328DQTR pomoću Pythona: 6 koraka
Nadgledanje ubrzanja pomoću Raspberry Pi i AIS328DQTR Korištenje Pythona: Ubrzanje je konačno, mislim prema nekim zakonima fizike.- Terry Riley Gepard koristi nevjerojatno ubrzanje i brze promjene brzine pri lovu. Najbrže stvorenje s vremena na vrijeme iskoristi svoj najveći tempo za hvatanje plijena
Sustav prisutnosti slanjem RFID podataka na MySQL poslužitelj pomoću Pythona s Arduinom: 6 koraka
Sustav prisutnosti slanjem RFID podataka na MySQL poslužitelj pomoću Pythona s Arduinom: U ovom projektu sam spojio RFID-RC522 s arduinom, a zatim šaljem podatke RFID-a u bazu podataka phpmyadmin. Za razliku od naših prethodnih projekata, u ovom slučaju ne koristimo nikakav ethernet štit, ovdje samo čitamo serijske podatke koji dolaze iz ar
EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)
EAL-Industri4.0-RFID skupljanje podataka u bazi podataka: Dette projekt omhandler opsamling iz v æ gtdata, registracija od identiteta vha. RFID, zaostajanje podataka u MySQL bazi podataka. node-RED, samo ažuriranje i ponašanje u skladu s opsamlede podacima u et C# programu formiranim u aplikaciji Windows Form