Mundarija:

Kengaytirilgan ma'lumotlarni jurnalga yozish bo'yicha tajribalar (Python yordamida): 11 qadam
Kengaytirilgan ma'lumotlarni jurnalga yozish bo'yicha tajribalar (Python yordamida): 11 qadam

Video: Kengaytirilgan ma'lumotlarni jurnalga yozish bo'yicha tajribalar (Python yordamida): 11 qadam

Video: Kengaytirilgan ma'lumotlarni jurnalga yozish bo'yicha tajribalar (Python yordamida): 11 qadam
Video: Jurnalni qanday to‘ldirish kerak? Как заполнить журнал? 2024, Iyul
Anonim
Ma'lumotlarni kengaytirilgan qayd qilish bo'yicha tajribalar (Python yordamida)
Ma'lumotlarni kengaytirilgan qayd qilish bo'yicha tajribalar (Python yordamida)

Ma'lumotlarni yozish bo'yicha ko'rsatmalari juda ko'p, shuning uchun men o'zim yozish loyihasini qurmoqchi bo'lganimda, atrofga qaradim. Ba'zilar yaxshi, ba'zilari unchalik yaxshi emas edi, shuning uchun men yaxshiroq g'oyalarni ko'rib chiqishga va o'z arizamni tuzishga qaror qildim. Bu men kutganimdan ham rivojlangan va murakkab loyihaga olib keldi. Uning bir qismi sensor ma'lumotlarini qayta ishlash bo'yicha bir qator tajribalarga aylandi. Bu sizga bir xil yoki shunga o'xshash tajribalarni sinab ko'rishga imkon beradi.

(Siz barcha kodlarni ko'rishingiz va uni yuklab olishingiz mumkin: GitHub -dagi kodni ko'rish mumkin, ehtimol boshqa oynada, faqat 2 marta bosish bilan)

Ma'lumotlarni ro'yxatga olish odatda quyidagilarni o'z ichiga oladi.

  • Ma'lumot yig'ish: Sensordan olingan ba'zi ma'lumotlarni o'qing. Ko'pincha bu Arduino kabi qurilmada analogni raqamli konvertorga (ADC) o'qishdir.
  • Ma'lumotni qayta ishlash: ADC qiymatini o'qiyotganda, konvertorlarning chiqishi odatda kerakli birliklarga o'lchanishi kerak. Sensor xatolarini tuzatish uchun qiymatlarni kalibrlash uchun ba'zi sozlashlarni amalga oshirish kerak bo'lishi mumkin.
  • Filtrlash: Ma'lumotlar odatda shovqinni o'z ichiga oladi, shuning uchun uni filtrlash mumkin, shunda siz shovqin emas, balki ma'lumotlaringiz signaliga qaraysiz.
  • Ma'lumotni saqlash: Ma'lumotlar, ehtimol, matnli faylga, balki bulutga saqlanadi. Ma'lumotlar elektr quvvati uzilgan taqdirda ham saqlanib qolishi kerak. Ma'lumotni ortiqcha saqlash juda oson, bizda ma'lumotlarni saqlash joyini qisqartirishning hiylasi bor.
  • Ma'lumotlarni ko'rsatish: Ma'lumotlarni ko'rish usullari, bu ma'lumotlarni ro'yxatga olish emas, lekin agar siz biron bir ma'lumotni ko'rsatmasangiz, nima uchun uni yig'ish kerak?
  • Masofadan kirish: kerak emas, lekin juda yoqimli.

Ko'rsatmalarning aksariyati yuqorida aytilganlarning hammasini o'z ichiga olmaydi yoki ularni juda sodda tarzda bajaradi. Bu yo'riqnoma tez -tez o'tkazib yuboriladigan 2 ta muammolarni hal qiladi va bonus sifatida sizga bulutli xizmatdan foydalanmasdan ma'lumotlaringizni chizish imkoniyatini beradi. Siz hamma narsani ishlatishingiz yoki bo'laklarni chiqarib, o'zingizning loyihangizga qo'shishingiz mumkin.

1 -qadam: asboblar va materiallar

Asboblar va materiallar
Asboblar va materiallar

Bu misol Python -da, shuning uchun u ishlaydi va komponentlarni ishlatish mumkin, deyarli har qanday OS, shu jumladan Mac, PC, Linux va Raspberry Pi.

Shunday qilib, ushbu ko'rsatmalarni ishlatish uchun faqat Python 3.6 ishlaydigan muhit kerak va unga biriktirilgan kodni yuklab oling. Men o'rnatgan kodni ishga tushirgandan so'ng, uni o'zingizning tajribangiz uchun o'zgartirishingiz mumkin. Python -da odatdagidek, hamma narsa ishlashi uchun sizga ba'zi paketlar/modullarni qo'shish kerak bo'lishi mumkin. Mening Spyder muhitim deyarli barcha kerakli qismlar bilan ta'minlangan (qarang: Python ekranini qirib tashlash bilan grafikli ko'rsatmalarni ko'rish). Har qanday xato xabarlarini kuzatishni birinchi marta ishga tushirganingizda, ular sizga atrofingizdagi etishmayotgan qismlar haqida xabar beradi.

Keyingi ikkita qadam sizga o'z tajribangizni qanday tuzish va ishga tushirish haqida aytib beradi, lekin o'z tajribangizni o'tkazishdan oldin, shu tajribalarni o'tkazguncha kutish yaxshiroqdir.

Kodni tushunish uchun siz ob'ektga yo'naltirilgan Python bilan bir oz tajribaga ega bo'lishingiz kerak, buni tushuntirish mumkin emas, lekin Google sizga kerak bo'lishi mumkin bo'lgan yordamni berishi kerak.

Kodga e'tibor bering: (GitHub -dagi kodni, ehtimol siz boshqa oynada, faqat 2 marta bosish orqali ko'rishingiz mumkin) hozir Python 3.6 da, shuning uchun 3.6 ga ega bo'lish yaxshiroq bo'lardi. Kodning eski versiyasi quyidagi havolalarda.

2 -qadam: tajriba yaratish

Tajriba qurish
Tajriba qurish

Tajribani tuzishda uchta dasturlash bosqichlari (va chiziqlar) mavjud. Har bir tajriba simulate_logging.py faylidagi LoggingSim ob'ektidagi vazifadir. Keling, keyingi bosqichda bajariladigan 1 -tajribani (faqat birinchi grafik) ko'rib chiqaylik:

def Experience_with_sample_rates (o'zini):

chop etish "" "Namuna stavkalari bo'yicha tajriba delta T ni o'zgartirish orqali turli xil namuna stavkalarini ko'rib chiqish" "" self.start_plot (plot_title = "Namuna stavkalari - 1/3 qism: Delta T = 1.0") self.add_sensor_data (ismi = "dt = 1. ", amplituda = 1., shovqin_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Har bir tajriba o'z vazifasi sifatida yozilgan, shuning uchun bizda funktsiyani belgilaydigan qator bor (eksperiment …)

Keyingi, izoh bermaydigan satr (start_plot (….)) Eksperiment uchun ob'ektni yaratadi va unga nom beradi.

Keyingi izohlanmagan qator (add_sensor_data (…) bir necha qatorga bo'linadi. Bu signalni o'lchash uchun potentsial shovqinli signalni va ba'zi ishlovlarni taqlid qiladi. Funktsiya argumentlari quyidagicha:

  • Ism: ma'lumotlarni aniqlash uchun oxirgi grafikka qo'yilgan ism
  • amplituda: signal qanchalik katta bo'lsa, biz har doim bu ko'rsatmada 1. amplitudasini ishlatamiz.
  • noise_amp: shovqin qanchalik katta, 0. shovqin emas, biz shu yerdan boshlaymiz.
  • delta_t: o'lchovlar orasidagi vaqt, namuna olish tezligini nazorat qiladi.
  • max_t: ma'lumotlarni to'plashning maksimal vaqti, biz har doim bu ko'rsatmada 10 dan foydalanamiz.
  • run_ave: ishlaydigan o'rtacha yordamida ishlov berish, 0 ishlov berilmasligini bildiradi.
  • trigger_value: tetik yordamida ishlov berish, 0 ishlov berilmasligini bildiradi

yakuniy, sharhlanmagan satr, (self.show_plot ……) grafikni ko'rsatadi.

Tajribada grafikada bir nechta satr yoki bir nechta grafik bo'lishi mumkin bo'lgan narsalarni biroz murakkabroq qilish uchun, bu keyingi tajribalardan aniq bo'lishi kerak.

3 -qadam: tajriba o'tkazish

Bu tajriba o'tkazish uchun kod. Python -da bo'lgani kabi, u faylning oxirida joylashgan.

sim_logging = LoggingSim ()

sim_log.experiment_with_sample_rates ()

Bu faqat 2 qator:

  • Kirish simulyatorini yarating (LoggingSim ())
  • Uni ishga tushiring (sim_logging.experiment_with_sample_rates ())

Yuklab olingan kodda menda yana bir nechta satr va sharhlar bor, ularni tushunish oson bo'lishi kerak.

4 -qadam: Tajriba: Namuna darajasi

Tajriba: namuna darajasi
Tajriba: namuna darajasi
Tajriba: namuna darajasi
Tajriba: namuna darajasi
Tajriba: namuna darajasi
Tajriba: namuna darajasi

Simulyator, bu erda o'rnatilgandek, har doim amplitudali silliq sinus to'lqinni chiqaradi. Bu tajriba uchun biz delta_t, namunalar orasidagi vaqt farqiga ko'ra, namuna tezligini buzamiz. Bizda shovqin yoki boshqa ishlov berish bo'lmaydi. Kod 3 ta namuna stavkasidan foydalanadi (delta_t = 1.0, 0.1 va 0.01.) Grafiklar bir -birining ustiga tushgani uchun tajriba 3 xil grafik hosil qilish uchun o'rnatiladi. Olingan grafiklar bu qadam uchun tasvirlardir.

def Experience_with_sample_rates (o'zini):

chop etish "" "Namuna stavkalari bo'yicha tajriba delta T ni o'zgartirish orqali turli xil namuna stavkalarini ko'rib chiqish" "" self.start_plot (plot_title = "Tajriba namunaviy stavkalari 1/3: Delta T = 1.0") self.add_sensor_data (ismi = "dt = 1. ", amplituda = 1., shovqin_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Tajriba namunaviy tezligi 2/3: Delta T = 0.1 ") self.add_sensor_data (name =" dt = 1. ", amplituda = 1., shovqin_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ o'zini.start_plot (plot_title = "Tajriba namunaviy tezligi 3/3: Delta T = 0.01") self.add_sensor_data (name = "dt = 1.", amplituda = 1., noise_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Uni ishga tushirish uchun quyidagi satrdan foydalaning: sim_logging.experiment_with_sample_rates ()

Mumkin bo'lgan xulosalar:

  • Namuna olish tezligining juda pastligi haqiqatan ham yomon.
  • Yuqori stavkalar odatda yaxshiroqdir.

(Python 3.6 kodi GitHub -dagi havola ostidagi ko'rsatmalar, 2.7)

5 -qadam: Tajriba: shovqin ko'rsatish

Tajriba: shovqin ko'rsatish
Tajriba: shovqin ko'rsatish

Bu tajribada biz bir xil signalni saqlaymiz, o'rtacha namuna olish tezligidan foydalanamiz va har xil miqdordagi shovqinlarga ega bo'lamiz (noise_amp =.0,.1, 1.0.). Chiqish 3 chiziqli bitta grafikdan iborat.

Mumkin bo'lgan xulosa:

Shovqin signalni ko'rishni qiyinlashtiradi, agar iloji bo'lsa, uni kamaytiring

Kod:

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

def tajriba_showing_noise (o'zini): chop etish "" "Shovqin ko'rsatadigan tajriba Shovqin amplitudasini o'zgartirib, shovqinning turli miqdorlarini ko'rib chiqish." "" self.start_plot (plot_title = "Shovqin ko'rsatuvchi tajriba") self.add_sensor_data (name = "shovqin = 0.0) ", amplituda = 1.. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (name = "shovqin = 1.0", amplituda = 1., shovqin_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

6 -qadam: Tajriba: Harakatlanuvchi o'rtacha bilan shovqinni kamaytiring

Tajriba: Harakatlanuvchi o'rtacha bilan shovqinni kamaytiring
Tajriba: Harakatlanuvchi o'rtacha bilan shovqinni kamaytiring
Tajriba: Harakatlanuvchi o'rtacha bilan shovqinni kamaytiring
Tajriba: Harakatlanuvchi o'rtacha bilan shovqinni kamaytiring

Harakatlanuvchi o'rtacha (masalan, uzunligi 8 bilan) oxirgi 8 o'lchovni oladi va ularni o'rtacha oladi. Agar shovqin tasodifiy bo'lsa, umid qilamizki, u o'rtacha 0 ga yaqinlashadi. Tajribani sim_logging.experiment_showing_noise () bilan bajaring. Bitta grafikani chiqarish.

Mumkin bo'lgan xulosalar:

  • Harakatlanuvchi o'rtacha shovqinning katta qismini yo'q qiladi
  • Harakatlanuvchi o'rtacha qancha uzoq bo'lsa, shovqin kamayadi
  • Uzunroq harakatlanuvchi signal signalni kamaytirishi va buzishi mumkin

Kod:

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

def Experience_with_moving_average (o'zini): chop etish "" "MovingAverage bilan tajriba Uzunligini o'zgartirish orqali har xil MovingAverage-ga qarang. Hamma bir xil shovqinga ega" "" # ------------------ ------------------------------ self.start_plot (plot_title = "Harakatlanuvchi O'rtacha 1/2 qism: harakatlanuvchi o'rtacha yo'q") o'zini.add_sensor_data (name = "ave len = 0", amplituda = 1., shovqin_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: Len 8 va 32") self.add_sensor_data (name = "ave len = 8", amplituda = 1., noise_amp =.1, delta_t =.1, max_t = 10., run_ave = 8. ()

7 -qadam: Tajriba: harakatlanuvchi o'rtacha va namuna tezligi

Tajriba: harakatlanuvchi o'rtacha va namuna tezligi
Tajriba: harakatlanuvchi o'rtacha va namuna tezligi

Ushbu tajribada biz xom signalni shovqin va shovqinni kamaytirishning 2 xil o'zgarishi bilan solishtiramiz.

  1. O'rtacha namuna tezligi va o'rtacha ishlaydigan o'rtacha
  2. Yuqori namuna tezligi va yuqori uzunlikdagi o'rtacha ishlash

Buni ishga tushiring: sim_logging …… Chiqish bitta grafikdir. O'ylaymanki, №2 shovqinni kamaytirishda yaxshiroq ishlaydi, shuning uchun biz shunday xulosaga kelishimiz mumkin:

Yuqori namuna tezligi va yuqori uzunlikdagi o'rtacha ishlash yaxshi

Ammo shuni yodda tutish kerakki, xarajat bor. #2 juda ko'p ishlov berishni talab qiladi va natijada ko'proq ma'lumot saqlanadi. Xarajat bunga arziydi yoki bo'lmasligi mumkin. Keyingi tajribada biz tetikni, saqlangan ma'lumotlarning hajmini kamaytiradigan qurilmani qo'shamiz.

Kod:

def Experim_with_moving_average_and_sample_rate (o'zini):

chop etish "" "Harakatlanuvchi o'rtacha va namuna tezligi bo'yicha tajriba, dt, o'rtacha ish vaqti" " # # ---------------------------- -------------------- self.start_plot (plot_title = "Harakatlanuvchi o'rtacha va namuna tezligi") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", amplituda = 1., shovqin_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 ", amplituda = 1., shovqin_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (ism = "dt =.01 ra = 100 trig = 0", amplituda = 1)., noise_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()

8 -qadam: Tajriba: Trigger bilan yozish

Tajriba: Trigger yordamida yozish
Tajriba: Trigger yordamida yozish

Ushbu tajribada biz tetik qo'shamiz. Birinchidan, tetik deganda nimani nazarda tutyapman? Trigger - bu ma'lumot to'plash usuli, lekin uni faqat ba'zi o'zgaruvchilar sezilarli darajada o'zgarganidan keyin saqlaymiz. Bu tajribalarda vaqt (x o'qi) o'zgaruvchisiga tetik qo'ydim. Triggerdan foydalanib, men tez namuna olishdan katta hajmdagi ma'lumotlarni olishim va uni oqilona ma'lumotlarga kamaytirishim mumkin. Bu yuqori namuna olish stavkalari va uzoq davom etadigan o'rtacha ko'rsatkich bilan foydalidir.

Men oxirgi tajribadan №2 qatorni oldim, bu "yaxshi" va tetik. Buni ishga tushiring: sim_logging …… Chiqish bitta grafik, x chiziq.

Nima bo'ladi? Biz o'rtacha ma'lumotlarga ega bo'lgan "yaxshi" uchastkani olamiz (№1 bilan bir xil). Yuqori ishlov berishda ma'lum xarajatlar kelib chiqdi. Umuman olganda, natijalar, filtrlash kamroq bo'lgan namuna tezligi №1 bilan bir xil. Siz xulosa qilishingiz mumkin:

  • O'rtacha tetiklanish bilan ishlaydigan o'rtacha ma'lumot miqdori bilan yaxshi shovqinni kamaytirishi mumkin.
  • Qo'shimcha ishlov berish unchalik yaxshi natija bermasligi mumkin va narx bilan birga keladi.

Kod:

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

def Experience_with_trigger (o'zini): chop etish "" "Triggering bilan tajriba, dt, o'rtacha ishlash va tetiklash" "- # # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering on") self.add_sensor_data (name = "dt =.1 ra = 10, trig = 0 ", amplituda = 1., shovqin_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (ism =" dt =.01 ra = 100, trig =.1 ", amplituda = 1., shovqin_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

=

9 -qadam: Tajriba: Trigger bilan yozish - balandroq shovqin

Tajriba: Trigger bilan yozish - balandroq shovqin
Tajriba: Trigger bilan yozish - balandroq shovqin

Keling, oxirgi qadam bilan bir xil tajribani o'tkazaylik va shovqinni kuchaytiraylik. Buni ishga tushiring: sim_logging …… Chiqish bitta grafik, 2 satr.

Endi qo'shimcha ishlov berish ancha qimmatga tushadi. Bu erda oqilona xulosa bo'lishi mumkin:

Shovqinni kamaytirish uchun ishlov berish miqdori va turini tanlash sizning signalingiz va shovqiningizga bog'liq

Kod:

def Experience_with_trigger_louder_noise (o'zini):

"" "oldingi tajribadan ko'ra balandroq shovqin" "" self.start_plot (plot_title = "Trigger-Louder shovqin bilan tajriba") self.add_sensor_data (name = "… dt =.1 ra = 10", amplituda = 1., shovqin_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (ism = "..dt =.01 ra = 100 tv =.1", amplituda = 1., shovqin_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

10 -qadam: O'z tajribangizni qiling

O'z tajribalaringizni qiling
O'z tajribalaringizni qiling

Umid qilamanki, siz ushbu qo'llanmada ko'rsatilgan usullar ma'lumotni yozishda foydali bo'lishi mumkin, lekin ular ham o'ylab ishlatilgan bo'lishi kerakligini ko'rasiz deb umid qilaman. Ular bilan tajriba o'tkazish bu jarayonga yordam beradi.

Tajribalar va siz ko'rib chiqadigan narsalar haqida ba'zi izohlar:

  • Sinus to'lqinlar - bu signalning yagona qiziqarli turi emas, boshqalarni sinab ko'ring, boshqa to'lqinlar yoki rampalar yoki ….
  • Men shovqin uchun oddiy taqsimotdan foydalandim, shovqin juda ko'p. siz boshqalarni hisobga olishingiz kerak
  • O'rtacha yugurish - bu oddiy, ammo shovqinni ko'rishning yagona usuli emas

Eslatma: rasmlarni Vikipediyadan yozib olish.

11 -qadam: Texnologiyalarni ro'yxatga olish dasturida ishlatish

Texnologiyalarni ro'yxatga olish dasturida ishlatish
Texnologiyalarni ro'yxatga olish dasturida ishlatish

Mening kodim ob'ektga yo'naltirilgan va o'rtacha va tetikni qayta ishlashni Python muhitiga ko'chirish va keyin ishlatish mumkin. Ob'ektlar quyidagilar:

  • Data_trigger.py -da DataTrigger
  • Move_Average.py da MovingAverage

Simulate_logging.py -dagi mening asosiy obyektim LoggingSim sizga uni ishlatishning yaxshi namunasini berishi kerak. Agar siz boshqa tildan foydalansangiz, mening kodimni o'qishingiz va o'z tilingizda amalga oshirishingiz mumkin.

Ushbu kod sizning loyihangizga ma'lumotlarni yaxshiroq yozib berishi mumkin, uni sinab ko'ring.

Yuqoridagi grafik bir xil ishlaydigan o'rtacha ob'ektni ishlatadigan russ_hensel tomonidan sizning quyosh energiyangizni chizish.

Tavsiya: