Satura rādītājs:

Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python): 11 soļi
Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python): 11 soļi

Video: Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python): 11 soļi

Video: Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python): 11 soļi
Video: Generate Studio Quality Realistic Photos By Kohya LoRA Stable Diffusion Training - Full Tutorial 2024, Jūlijs
Anonim
Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python)
Eksperimenti uzlabotā datu reģistrēšanā (izmantojot Python)

Ir daudz norādījumu par datu reģistrēšanu, tāpēc, kad vēlējos izveidot savu mežizstrādes projektu, es paskatījos apkārt. Daži bija labi, daži ne tik daudz, tāpēc es nolēmu ņemt dažas labākas idejas un izveidot savu pieteikumu. Tā rezultātā projekts bija gan progresīvāks, gan sarežģītāks, nekā es sākotnēji gaidīju. Viena tā daļa kļuva par eksperimentu sēriju sensoru datu apstrādē. Šī pamācība ļauj izmēģināt tos pašus vai līdzīgus eksperimentus.

(Jūs varat apskatīt visu kodu un lejupielādēt to vietnē: Kods vietnē GitHub Jūs varat nokļūt skatīšanā, iespējams, citā logā tikai ar 2 klikšķiem)

Parasti datu reģistrēšana ietver šādas darbības:

  • Datu iegūšana: nolasiet dažus datus no sensora. Bieži vien tas ir tikai analogā ciparu pārveidotāja (ADC) lasīšana ierīcē, piemēram, Arduino.
  • Datu apstrāde: nolasot ADC vērtību, pārveidotāju izeja parasti ir jāmēro līdz pareizajām vienībām. Var būt nepieciešams veikt arī dažus pielāgojumus, lai kalibrētu vērtības, lai novērstu sensoru kļūdas.
  • Filtrēšana: dati parasti satur troksni, to var filtrēt, lai jūs meklētu signālu savos datos, nevis troksni.
  • Datu glabāšana: dati tiek saglabāti, iespējams, teksta failā, iespējams, mākonī. Datiem vajadzētu izdzīvot pat tad, ja strāva tiek izslēgta. Ir viegli saglabāt pārāk daudz datu, mums ir neliels triks, lai samazinātu datu glabāšanas vietu.
  • Datu attēlojums: metodes, kā apskatīt savus datus, nevis īsti datu reģistrēšana, bet, ja jūs neveicat sava veida datu attēlošanu, kāpēc tos apkopot?
  • Attālā piekļuve: nav nepieciešama, bet jauki.

Lielākajā daļā norādījumu ir daži, bet ne visi iepriekš minētie, vai arī tie tiek darīti ļoti vienkāršā veidā. Šī pamācība novērsīs 2 bieži izlaistās reģistrēšanas problēmas un kā bonuss dos jums iespēju attēlot savus datus, neizmantojot mākoņa pakalpojumu. Jūs varat izmantot visu lietu vai izvilkt gabalus un pārtaisīt tos savā projektā.

1. darbība: instrumenti un materiāli

Instrumenti un materiāli
Instrumenti un materiāli

Šis piemērs ir pieejams Python, tāpēc tas darbosies un komponentus var izmantot gandrīz jebkurā OS, ieskaitot Mac, PC, Linux un Raspberry Pi.

Tātad, lai izmantotu šo pamācību, viss, kas jums nepieciešams, ir darbojas Python 3.6 vide un lejupielādējiet pievienoto kodu. Pēc mana iestatītā koda palaišanas varat to mainīt saviem eksperimentiem. Kā parasti Python, jums, iespējams, būs jāpievieno dažas paketes/moduļi, lai viss darbotos. Manā Spyder vidē ir gandrīz visas nepieciešamās detaļas (sk. Instalējamo skatu grafiks ar Python ekrāna skrāpēšanu). Pirmoreiz palaižot skatieties, vai nav kļūdu ziņojumu, tie informēs jūs par trūkstošajām jūsu vides daļām.

Nākamās divas darbības jums pateiks, kā izveidot un izpildīt savu eksperimentu, taču, iespējams, labāk ir pagaidīt, līdz tiek palaisti iekļautie eksperimenti, pirms izmēģināt savu.

Lai saprastu kodu, jums ir jābūt nelielai pieredzei ar objektorientētu Python, paskaidrojot, ka tas nav šīs instrukcijas darbības jomā, taču uzņēmumam Google ir jāsniedz jums palīdzība.

Ievērojiet kodu: (Kods vietnē GitHub Jūs varat iekļūt skatīšanā, iespējams, citā logā, veicot tikai 2 klikšķus), tagad ir Python 3.6, tāpēc vislabāk būtu izmantot 3.6. Vecāka koda versija ir šeit zemāk esošajās saitēs.

2. darbība. Eksperimenta izveide

Eksperimenta veidošana
Eksperimenta veidošana

Eksperimenta veidošanai ir trīs programmēšanas soļi (un līnijas). Katrs eksperiments ir funkcija loggingSim objektā failā simulate_logging.py. Apskatīsim 1. eksperimentu (tikai pirmo grafiku), ko mēs veiksim nākamajā darbībā:

def eksperiments_ar_sample_rates (sevi):

print "" "Eksperiments ar parauga likmēm Skatoties uz dažādiem paraugu rādītājiem, mainot delta T" "" self.start_plot (plot_title = "Sample Rates - 1/3: Delta T = 1,0") self.add_sensor_data (name = "dt = 1. ", amplitūda = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Katrs eksperiments ir rakstīts kā sava funkcija, tāpēc mums ir līnija, kas definē funkciju (def eksperiments …..)

Nākamā rindiņa bez komentāriem (start_plot (…)) izveido eksperimenta objektu un piešķir tam nosaukumu.

Nākamā rindiņa bez komentāriem (add_sensor_data (…) ir sadalīta vairākās rindās. Tā simulē sensoru, kas mēra signālu ar potenciālu troksni un zināmu apstrādi. Funkcijas argumenti ir šādi:

  • nosaukums: vārds, kas uzrakstīts pēdējā grafikā, lai identificētu datus
  • amplitūda: cik liels ir signāls, šajā pamācībā mēs vienmēr izmantosim amplitūdu 1.
  • noise_amp: cik liels ir troksnis, 0. nav trokšņa, mēs sāksim šeit.
  • delta_t: laiks starp mērījumiem, kontrolē izlases ātrumu.
  • max_t: maksimālais datu vākšanas laiks, mēs šajā instrukcijā vienmēr izmantosim 10.
  • run_ave: apstrāde, izmantojot vidējo rādītāju, 0 nozīmē, ka apstrādes nav.
  • trigger_value: apstrāde, izmantojot aktivizēšanu, 0 nozīmē, ka apstrādes nav

pēdējā rindā bez komentāriem (self.show_plot ……) tiek parādīta diagramma.

Lai lietas padarītu nedaudz sarežģītākas, grafikā var būt vairākas rindas vai vairāki grafiki, tam vajadzētu būt skaidram no turpmākajiem eksperimentiem.

3. darbība. Eksperimenta veikšana

Šis ir kods eksperimenta veikšanai. Tāpat kā Python, tas tiek ievietots faila beigās.

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

Šīs ir tikai 2 rindas:

  • Reģistrācijas simulatora izveide (LoggingSim ())
  • Palaidiet to (sim_logging.experiment_with_sample_rates ())

Lejupielādētajā kodā man ir vēl dažas rindiņas un komentāri, to vajadzētu viegli saprast.

4. darbība. Eksperiments: parauga ātrums

Eksperiments: izlases ātrums
Eksperiments: izlases ātrums
Eksperiments: izlases ātrums
Eksperiments: izlases ātrums
Eksperiments: izlases ātrums
Eksperiments: izlases ātrums

Šeit izveidotais simulators vienmēr izvada jauku vienmērīgu sinusoidālo viļņu amplitūdu 1. Šim eksperimentam mēs sajauksimies ar izlases ātrumu, ko koriģē delta_t, laika starpību starp paraugiem. Mums nebūs trokšņa vai citas apstrādes. Kodā tiek izmantoti 3 izlases ātrumi (delta_t = 1,0, 0,1 un 0,01.) Tā kā grafiki krīt viens virs otra, eksperiments ir iestatīts, lai iegūtu 3 dažādus grafikus. Iegūtie grafiki ir šīs darbības attēli.

def eksperiments_ar_sample_rates (sevi):

print "" "Eksperiments ar parauga likmēm Skatoties uz dažādiem paraugu rādītājiem, mainot delta T" "" self.start_plot (plot_title = "Eksperimenta parauga likmes 1/3: Delta T = 1,0") self.add_sensor_data (name = "dt = 1. ", amplitūda = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Eksperimenta paraugu likmes 2/3: Delta T = 0,1 ") self.add_sensor_data (name =" dt = 1. ", amplitūda = 1., noise_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ pats.start_plot (plot_title = "Eksperimenta paraugu likmes 3/3: Delta T = 0,01") self.add_sensor_data (name = "dt = 1.", amplitūda = 1., noise_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Lai to palaistu, izmantojiet rindu: sim_logging.experiment_with_sample_rates ()

Iespējamie secinājumi:

  • Pārāk zems paraugu ņemšanas līmenis ir patiešām slikts.
  • Augstas likmes bieži vien ir labākas.

(Python 3.6 kods GitHub saitē zem instrukcijām, 2.7)

5. darbība: eksperiments: tiek parādīts troksnis

Eksperiments: tiek rādīts troksnis
Eksperiments: tiek rādīts troksnis

Šajā eksperimentā mēs saglabājam vienu un to pašu signālu, izmantojam vidēju izlases ātrumu un ir atšķirīgs trokšņa daudzums (noise_amp =.0,.1, 1.0.) Palaidiet to ar: sim_logging.experiment_showing_noise (). Rezultāts ir viens grafiks ar 3 rindām.

Iespējamais secinājums:

Trokšņa dēļ ir grūti redzēt signālu, ja iespējams, samaziniet to

Kods:

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

def experiment_showing_noise (self): print "" "Eksperiments, kas parāda troksni Skatoties uz dažādiem trokšņa apjomiem, mainot trokšņa amplitūdu." "" self.start_plot (plot_title = "Experiment Showing Noise") self.add_sensor_data (name = "noise = 0.0" ", amplitūda = 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 ()

6. darbība: eksperiments: samaziniet troksni ar mainīgo vidējo

Eksperiments: samaziniet troksni ar mainīgo vidējo
Eksperiments: samaziniet troksni ar mainīgo vidējo
Eksperiments: samaziniet troksni ar mainīgo vidējo
Eksperiments: samaziniet troksni ar mainīgo vidējo

Slīdošais vidējais rādītājs (piemēram, ar garumu 8) veic pēdējos 8 mērījumus un tos vidēji aprēķina. Ja troksnis ir nejaušs, mēs ceram, ka tā vidējais līmenis būs tuvu 0. Palaidiet eksperimentu ar: sim_logging.experiment_showing_noise (). Izvadiet vienu grafiku.

Iespējamie secinājumi:

  • Slīdošais vidējais lielums novērš lielu troksni
  • Jo ilgāk slīdošais vidējais, jo vairāk trokšņu samazinās
  • Ilgāks slīdošais vidējais var samazināt un izkropļot signālu

Kods:

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

def experiment_with_moving_average (self): print "" "Eksperiments ar MovingAverage Apskatot dažādus MovingAverage, mainot garumu. Visiem ir vienāds troksnis." "" # ------------------ ------------------------------ 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-2/2. Daļa: Len 8 un 32") self.add_sensor_data (nosaukums = "ave len = 8", amplitūda = 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 ()

7. darbība. Eksperiments: vidējais mainīgais un izlases ātrums

Eksperiments: vidējais mainīgais un izlases ātrums
Eksperiments: vidējais mainīgais un izlases ātrums

Šajā eksperimentā mēs salīdzinām neapstrādāto signālu ar troksni un 2 dažādām trokšņa samazināšanas variācijām.

  1. Vidējs izlases ātrums un vidējais darbības rādītājs
  2. Augsts izlases ātrums un augsts vidējais darbības ilgums

Palaidiet to ar: sim_logging ……. Rezultāts ir viens grafiks. Es domāju, ka ir skaidrs, ka 2. numurs veic labāku darbu trokšņa samazināšanā, tāpēc mēs varētu secināt, ka:

Augsts paraugu ņemšanas ātrums un vidējais darbības ilgums ir labs

Bet jums jāpatur prātā, ka ir izmaksas. #2 prasa daudz vairāk apstrādes, un tā rezultātā tiek saglabāti daudz vairāk datu. Izmaksas var būt vai nav tā vērtas. Nākamajā eksperimentā mēs pievienosim sprūdu - ierīci, lai samazinātu saglabāto datu apjomu.

Kods:

def eksperiments_ar kustīgu_ vidējo_un_parauga_vērtību (sevi):

izdrukāt "" "Eksperimentējiet ar mainīgo vidējo un parauga ātrumu, dt, vidējais rādītājs mainās" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Moving Average and Sample Rate") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", amplitūda = 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 ", amplitūda = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (nosaukums = "dt =.01 ra = 100 trig = 0", amplitūda = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

8. darbība. Eksperiments: reģistrēšana ar aktivizētāju

Eksperiments: reģistrēšana ar aktivizētāju
Eksperiments: reģistrēšana ar aktivizētāju

Šajā eksperimentā mēs pievienojam sprūdu. Pirmkārt, ko es domāju ar sprūdu? Aktivizētājs ir metode, kurā mēs apkopojam datus, bet saglabājam tos tikai pēc tam, kad kāds mainīgais ir ievērojami mainījies. Šajos eksperimentos es uzlieku laika (x ass) mainīgā sprūdu. Izmantojot sprūdu, es varu paņemt lielu datu daudzumu no ātras izlases un samazināt to līdz saprātīgākam datu apjomam. Tas ir īpaši noderīgi ar augstu izlases ātrumu un ilgu darbības vidējo rādītāju.

Esmu izvēlējies #2 līniju no pēdējā eksperimenta, kas bija "labs", un pievienoja sprūdu. Palaidiet to ar: sim_logging ……. Rezultāts ir viens grafiks, x līnijas.

Kas notiek? Mēs iegūstam "labu" diagrammu ar saprātīgu datu daudzumu (tāds pats kā #1). Augstāka apstrāde ir radījusi zināmas izmaksas. Tomēr kopumā rezultāti ir aptuveni tādi paši kā zemāks paraugu ņemšanas ātrums ar mazāku filtrēšanu. Jūs varētu secināt:

  • Ilgstošs vidējais rādītājs ar aktivizēšanu var nodrošināt labu trokšņa samazināšanu ar saprātīgu datu apjomu.
  • Papildu apstrāde var nedot tik daudz labākus rezultātus un ir saistīta ar izmaksām.

Kods:

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

def experiment_with_trigger (self): print "" "Eksperimentējiet ar aktivizēšanu, dt, palaidiet vidēji un aktivizējiet, lai viss tiktu mainīts" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (nosaukums = "dt =.1 ra = 10, trig = 0 ", amplitūda = 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 ", amplitūda = 1., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

9. solis: eksperiments: reģistrēšana ar trigeri - skaļāks troksnis

Eksperiments: mežizstrāde ar trigeri - skaļāks troksnis
Eksperiments: mežizstrāde ar trigeri - skaļāks troksnis

Veiksim to pašu eksperimentu kā pēdējo soli un pastiprināsim troksni. Palaidiet to ar: sim_logging ……. Rezultāts ir viens grafiks, 2 rindas.

Tagad papildu apstrāde izskatās vērtīgāka. Šeit varētu būt saprātīgs secinājums:

Apstrādes apjoma un veida izvēle trokšņa samazināšanai ir atkarīga no jūsu signāla un trokšņa

Kods:

def eksperiments_ar_trigger_louder_noise (pats):

print "" "Skaļāks troksnis nekā iepriekšējais eksperiments" "" self.start_plot (plot_title = "An Experiment with Trigger-Louder Noise") 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 (nosaukums = "..dt =.01 ra = 100 tv =.1", amplitūda = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

10. solis: veiciet savus eksperimentus

Veiciet savus eksperimentus
Veiciet savus eksperimentus

Šajā brīdī es ceru, ka redzat, ka šīs pamācības metodes var būt noderīgas datu reģistrēšanā, taču tās arī ir jāizmanto, pārdomājot. Eksperimentēšana ar viņiem var palīdzēt šajā procesā.

Dažas piezīmes par eksperimentiem un lietām, kuras jūs varētu izpētīt:

  • Sinusviļņi nav vienīgais interesants signāla veids, izmēģiniet citus, citus viļņus vai rampas vai…..
  • Es izmantoju normālu trokšņa sadalījumu, ir tik daudz trokšņu veidu; jums vajadzētu apsvērt citus
  • Vidējie rādītāji ir vienkārša, bet ne vienīgā metode, kā aplūkot troksni

Piezīme: attēlu reģistrēšana no Wikipedia.

11. darbība: reģistrēšanas programmatūras metožu izmantošana

Izmantojot tehniku mežizstrādes programmatūrā
Izmantojot tehniku mežizstrādes programmatūrā

Mans kods ir orientēts uz objektu, un vidējo un sprūda apstrādi var vienkārši nokopēt jūsu Python vidē un pēc tam izmantot. Objekti ir:

  • DataTrigger vietnē data_trigger.py
  • MovingAverage vietnē move_average.py

Manam galvenajam objektam LoggingSim vietnē simulate_logging.py ir jāsniedz labs piemērs, kā to izmantot. Ja izmantojat citu valodu, varat izlasīt manu kodu un ieviest to savā valodā.

Šis kods var uzlabot jūsu projekta datu reģistrēšanu, izmēģiniet to.

Iepriekš redzamais grafiks ir no russ_hensel, kas izmanto to pašu vidējo vidējo objektu.

Ieteicams: