Tartalomjegyzék:
- 1. lépés: Eszközök és anyagok
- 2. lépés: Kísérlet készítése
- 3. lépés: Kísérlet futtatása
- 4. lépés: Kísérlet: mintavételi arány
- 5. lépés: Kísérlet: Zaj megjelenítése
- 6. lépés: Kísérlet: Csökkentse a zajt mozgó átlaggal
- 7. lépés: Kísérlet: Mozgó átlag és mintavételi arány
- 8. lépés: Kísérlet: Naplózás a triggerrel
- 9. lépés: Kísérlet: Naplózás a triggerrel - hangosabb zaj
- 10. lépés: Készítse el saját kísérleteit
- 11. lépés: A naplózó szoftver technikáinak használata
Videó: Kísérletek a speciális adatnaplózásban (Python használatával): 11 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Sok adatnaplózási utasítás létezik, így amikor saját naplózási projektet akartam készíteni, körülnéztem egy csomó helyen. Néhányan jók voltak, mások nem annyira, ezért úgy döntöttem, hogy veszek néhány jobb ötletet, és elkészítem saját alkalmazásomat. Ennek eredményeként a projekt mind fejlettebb, mind bonyolultabb volt, mint amire először számítottam. Ennek egyik része az érzékelők adatainak feldolgozásával kapcsolatos kísérletsorozat lett. Ez az oktatóanyag lehetővé teszi ugyanazon vagy hasonló kísérletek kipróbálását.
(Az összes kódot megtekintheti és letöltheti a következőről: Kód a GitHub -on Csak 2 kattintással beléphet a megtekintésbe, esetleg egy másik ablakban)
Az adatnaplózás általában a következőket foglalja magában:
- Adatgyűjtés: Olvassa el az adatokat egy érzékelőből. Gyakran ez csak egy analóg -digitális konverter (ADC) olvasása egy olyan eszközön, mint egy Arduino.
- Adatfeldolgozás: ADC érték olvasásakor a konverterek kimenetét általában a megfelelő egységekre kell méretezni. Szükség lehet némi kiigazításra is az értékek kalibrálásához, hogy kijavítsák az érzékelő hibáit.
- Szűrés: Az adatok általában némi zajt tartalmaznak, ez szűrhető, így az adatokban lévő jelet keresi, nem a zajt.
- Adattárolás: Az adatok mentésre kerülnek, esetleg egy szöveges fájlba, esetleg a felhőbe. Az adatoknak akkor is fenn kell maradniuk, ha az áramellátás leáll. Könnyű túl sok adatot menteni, van egy kis trükkünk az adattároló hely csökkentésére.
- Adatmegjelenítés: Az adatok megtekintésének módszerei, valójában nem az adatnaplózás, de ha nem valamilyen formában jeleníti meg az adatokat, akkor miért gyűjti azokat?
- Távoli hozzáférés: Nem szükséges, de jó.
A legtöbb utasítás tartalmaz néhányat, de nem mindegyiket, vagy nagyon egyszerű módon. Ez az utasítás a gyakran kihagyott naplózási problémák közül kettővel foglalkozik, és bónuszként lehetőséget ad arra, hogy felhőszolgáltatás nélkül ábrázolja adatait. Használhatja az egészet, vagy kihúzhat darabokat, és remixelheti őket egy saját projektbe.
1. lépés: Eszközök és anyagok
Ez a példa a Python -ban található, így futni fog, és az összetevők szinte minden operációs rendszeren használhatók, beleértve a Mac -et, a PC -t, a Linuxot és a Raspberry Pi -t.
Tehát ennek az utasításnak a használatához mindössze egy futó Python 3.6 környezetre van szüksége, és töltse le a mellékelt kódot. Az általam beállított kód futtatása után módosíthatja azt saját kísérleteihez. A Pythonhoz hasonlóan szükség lehet néhány csomag/modul hozzáadására, hogy minden működjön. A Spyder környezetem nagyjából az összes szükséges alkatrészt tartalmazza (lásd: Grafikonok kezelhető nézetei Python képernyőkaparással). Amikor először futtatja a figyelést, keresse meg a hibaüzeneteket, és értesíteni fogják a környezet hiányzó részeiről.
A következő két lépés megmutatja, hogyan hozhat létre és futtathat saját kísérletet, de valószínűleg jobb, ha megvárja, amíg futtatja a mellékelt kísérleteket, mielőtt kipróbálná sajátját.
A kód megértéséhez némi tapasztalattal kell rendelkeznie az objektumorientált Python használatában, elmagyarázva, hogy ez nem tartozik ezen utasítás hatálya alá, de a Google minden szükséges segítséget megad.
Jegyezze meg a kódot: (Kód a GitHub -on Csak 2 kattintással lehet belépni a megtekintésbe, talán egy másik ablakban). A kód korábbi verziója itt található az alábbi linkeken.
2. lépés: Kísérlet készítése
A kísérlet felépítésének három programozási lépése (és sora) van. Minden kísérlet a Simulate_logging.py fájl LoggingSim objektumának függvénye. Nézzük az 1. kísérletet (csak az első grafikont), amelyet a következő lépésben futtatunk:
def kísérlet_minta_rátákkal (saját):
print "" "Kísérlet mintavételi gyakoriságokkal A különböző mintavételi gyakoriságok vizsgálata a delta T megváltoztatásával" "" self.start_plot (plot_title = "Mintaértékek - 1/3. rész: Delta T = 1,0") self.add_sensor_data (név = "dt = 1. ", amplitúdó = 1., zaj_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
Minden kísérlet saját függvényként van írva, így van egy sor, amely meghatározza a függvényt (def kísérlet…..)
A következő, megjegyzés nélküli sor (start_plot (…)) létrehozza az objektumot a kísérlethez, és nevet ad neki.
A következő, megjegyzés nélküli sor (add_sensor_data (…) több sorra van osztva. Szimulálja az érzékelőt, amely potenciálisan zajjal és bizonyos feldolgozással jelzést mér. A függvény argumentumai a következők:
- név: az adatok azonosítására szolgáló név a végső grafikonra
- amplitúdó: mekkora a jel, ebben az utasításban mindig az 1. amplitúdót fogjuk használni.
- noise_amp: mekkora a zaj, 0. nem zaj, itt kezdjük.
- delta_t: a mérések közötti idő, szabályozza a mintavételi sebességet.
- max_t: a maximális adatgyűjtési idő, ebben az utasításban mindig 10 -et fogunk használni.
- run_ave: feldolgozás futó átlag használatával, 0 azt jelenti, hogy nincs feldolgozás.
- trigger_value: feldolgozás triggerrel, 0 azt jelenti, hogy nincs feldolgozás
az utolsó, megjegyzés nélküli sor (self.show_plot ……) megjeleníti a grafikont.
Annak érdekében, hogy egy kicsit bonyolultabbá tegyük a dolgokat, a grafikonon több sor vagy több grafikon is szerepelhet egy kísérletben, ennek egyértelműnek kell lennie a következő kísérletekből.
3. lépés: Kísérlet futtatása
Ez a kód egy kísérlet futtatásához. A Pythonban szokásos módon a fájl végére kerül.
sim_logging = LoggingSim ()
sim_logging.experiment_with_sample_rates ()
Ez csak 2 sor:
- Naplózási szimulátor létrehozása (LoggingSim ())
- Futtassa (sim_logging.experiment_with_sample_rates ())
A letöltött kódban van még néhány sor és megjegyzés, könnyen lehet kitalálni.
4. lépés: Kísérlet: mintavételi arány
Az itt beállított szimulátor mindig szép, sima amplitúdójú szinuszhullámot ad ki. Ehhez a kísérlethez a delta_t által beállított mintavételi gyakorisággal, a minták közötti időkülönbséggel fogunk bajlódni. Nem lesz zaj vagy más feldolgozás. A kód 3 mintavételi gyakoriságot használ (delta_t = 1,0, 0,1 és 0,01.) Mivel a grafikonok egymásra esnek, a kísérlet 3 különböző grafikon előállítására van beállítva. A kapott grafikonok az ehhez a lépéshez tartozó képek.
def kísérlet_minta_rátákkal (saját):
print "" "Kísérlet mintavételi gyakorisággal A különböző mintavételi gyakoriságok vizsgálata a delta T megváltoztatásával" "" self.start_plot (plot_title = "Experiment Sample Rates 1/3: Delta T = 1.0") self.add_sensor_data (name = "dt = 1". ", amplitúdó = 1., zaj_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------- ----------------------------------- self.start_plot (plot_title = "Kísérlet mintavételezési gyakorisága 2/3: Delta T = 0,1 ") self.add_sensor_data (név =" dt = 1. ", amplitúdó = 1., zaj_amp =.0, delta_t = 0.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot () # ------------------------------------------------ maga.start_plot (plot_title = "Experiment Sample Rates 3/3: Delta T = 0,01") self.add_sensor_data (név = "dt = 1.", amplitúdó = 1., zaj_amp =.0, delta_t = 0.01, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
Futtatásához használja a következő sort: sim_logging.experiment_with_sample_rates ()
Lehetséges következtetések:
- A túl alacsony mintavételi arány nagyon rossz.
- A magas árak gyakran jobbak.
(Python 3.6 kód a GitHub -on, link az alábbi utasításokban, 2.7)
5. lépés: Kísérlet: Zaj megjelenítése
Ebben a kísérletben ugyanazt a jelet tartjuk, közepes mintavételi gyakoriságot használunk, és különböző zajok vannak (zaj_amp =.0,.1, 1.0.) Futtassa a következővel: sim_logging.experiment_showing_noise (). A kimenet egy grafikon, 3 sorral.
Lehetséges következtetés:
A zaj megnehezíti a jel látását, ha lehet, csökkentse
A kód:
# ------------------------------------------------
def experiment_showing_noise (self): print "" "Kísérlet, amely zajt mutat Különböző zajmennyiségek nézése a zaj amplitúdójának megváltoztatásával." "" self.start_plot (plot_title = "Experiment Showing Noise") self.add_sensor_data (name = "noise = 0.0") ", amplitúdó = 1., zaj_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (név =" zaj = 0,1 ", amplitúdó = 1., zaj_amp =. 1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (név = "zaj = 1.0", amplitúdó = 1., zaj_amp = 1., delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()
6. lépés: Kísérlet: Csökkentse a zajt mozgó átlaggal
Egy mozgó átlag (például 8 -as hosszúsággal) elvégzi az utolsó 8 mérést és átlagolja azokat. Ha a zaj véletlenszerű, akkor reméljük, hogy 0 körüli lesz. Futtassa a kísérletet a következővel: sim_logging.experiment_showing_noise (). Egy grafikon kiadása.
Lehetséges következtetések:
- A mozgó átlag kiküszöböli a zaj nagy részét
- Minél hosszabb a mozgóátlag, annál nagyobb a zajcsökkentés
- A hosszabb mozgóátlag csökkentheti és torzíthatja a jelet
A kód:
# ------------------------------------------------
def experiment_with_moving_average (self): print "" "Kísérlet a MovingAverage-rel A különböző MovingAverage-ek megtekintése a hossz megváltoztatásával. Mindegyiknek ugyanaz a hangja." "" # ------------------ ------------------------------ self.start_plot (plot_title = "MovingAverage-Part 1/2: No Moving Average") self.add_sensor_data (név = "ave len = 0", amplitúdó = 1., zaj_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. Rész: Len 8 és 32") self.add_sensor_data (név = "ave len = 8", amplitúdó = 1., zaj_amp =.1, delta_t =.1, max_t = 10., run_ave = 8, trigger_érték = 0) self.add_sensor_data (név = "ave len = 32", amplitúdó = 1., zaj_amp =.1, delta_t =.1, max_t = 10., run_ave = 32, trigger_value = 0) self.show_plot ()
7. lépés: Kísérlet: Mozgó átlag és mintavételi arány
Ebben a kísérletben összehasonlítjuk a nyers jelet a zajjal és 2 különböző variációval a zaj csökkentésére.
- Közepes mintavételi arány és közepes futóátlag
- Magas mintavételi arány és hosszú futási átlag
Futtassa a következővel: sim_logging …… A kimenet egy grafikon. Azt hiszem, egyértelmű, hogy a #2 jobb munkát végez a zaj csökkentésében, így arra a következtetésre juthatunk, hogy:
Jó a magas mintavételi arány és a hosszú futási átlag
De szem előtt kell tartani, hogy ennek ára van. #2 sokkal több feldolgozást igényel, és sokkal több adatot kell menteni. A költség megéri vagy nem éri meg. A következő kísérletben egy triggert, egy eszközt adunk hozzá, amely csökkenti a tárolt adatok mennyiségét.
A kód:
def kísérlet_mozgó_átlag_ és_minta_ráta (saját):
print "" "kísérlet a mozgó átlaggal és a mintavételi gyakorisággal, dt, a futási átlag változó" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Mozgó átlag és mintavételi arány") self.add_sensor_data (név = "dt =.1 ra = 0 trig = 0 ", amplitúdó = 1., zaj_amp =.1, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (név =" dt =.1 ra = 10 trig = 0 ", amplitúdó = 1., zaj_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (név = "dt =.01 ra = 100 trig = 0", amplitúdó = 1., zaj_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value = 0) self.show_plot ()
8. lépés: Kísérlet: Naplózás a triggerrel
Ebben a kísérletben egy triggert adunk hozzá. Először is, mit értek trigger alatt? A trigger olyan technika, amelyben adatokat gyűjtünk, de csak akkor mentjük el, ha valamilyen változó jelentős mértékben megváltozott. Ezekben a kísérletekben az idő (x tengely) változóra tettem egy trigger -t. A trigger használatával nagy mennyiségű adatot tudok levenni a gyors mintavételből, és ésszerűbb adatmennyiségre redukálhatom. Különösen hasznos a magas mintavételi arányok és a hosszú futási átlag mellett.
Az utolsó kísérlet #2 sorát vettem, ami "jó" volt, és egy kiváltó okot. Futtassa a következővel: sim_logging ……. A kimenet egy grafikon, x sor.
Mi történik? "Jó" ábrát kapunk ésszerű adatmennyiséggel (ugyanaz, mint az #1). A magasabb feldolgozás némi költséggel járt. Összességében azonban az eredmények nagyjából megegyeznek az alacsonyabb mintavételi gyakorisággal, kevesebb szűréssel. Következtethet:
- Hosszú futási átlag aktiválással jó zajcsökkentést eredményezhet ésszerű adatmennyiség mellett.
- Az extra feldolgozás nem biztos, hogy sokkal jobb eredményeket hoz, és költségekkel jár.
A kód:
# ------------------------------------------------
def experiment_with_trigger (self): print "" "Experiment with Triggering, dt, run átlag és kiváltó minden változtatható" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (név = "dt =.1 ra = 10, trig = 0 ", amplitúdó = 1., zaj_amp =.1, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (név =" dt =.01 ra = 100, trig =.1 ", amplitúdó = 1., zaj_amp =.1, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()
=
9. lépés: Kísérlet: Naplózás a triggerrel - hangosabb zaj
Végezzük el ugyanazt a kísérletet, mint az utolsó lépést, és erősítsük meg a zajt. Futtassa a következővel: sim_logging …… A kimenet egy grafikon, 2 sor.
Most az extra feldolgozás érdemesnek tűnik. Ésszerű következtetés lehet itt:
A zaj csökkentése érdekében a feldolgozás mennyiségének és típusának kiválasztása a jel és a zaj függvénye
A kód:
def experiment_with_trigger_louder_ioise (self):
print "" "Hangosabb zaj, mint az előző kísérlet" "" self.start_plot (plot_title = "An Experiment with Trigger-Louder Noise") self.add_sensor_data (név = "… dt =.1 ra = 10", amplitúdó = 1., zaj_amp =.5, delta_t =.1, max_t = 10., run_ave = 10, trigger_value = 0) self.add_sensor_data (név = "..dt =.01 ra = 100 tv =.1", amplitúdó = 1., zaj_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()
10. lépés: Készítse el saját kísérleteit
Ezen a ponton remélem, hogy látja, hogy az ebben az utasításban szereplő technikák hasznosak lehetnek az adatnaplózásban, de ezeket is meg kell fontolni. A velük való kísérletezés segíthet ebben a folyamatban.
Néhány megjegyzés a kísérletekhez és a dolgokhoz, amelyeket megvizsgálhat:
- A szinuszhullámok nem az egyetlen érdekes jel típus, próbálkozz másokkal, más hullámokkal vagy rámpákkal vagy…..
- Normál eloszlást használtam a zajhoz, sokféle zaj létezik; figyelembe kell vennie másokat
- A futó átlagok egyszerű, de nem az egyetlen módszer a zaj vizsgálatára
Megjegyzés: képek naplózása a Wikipédiából.
11. lépés: A naplózó szoftver technikáinak használata
A kódom objektumorientált, és a futó átlag feldolgozása és a trigger csak másolható a Python környezetébe, majd használható. A tárgyak a következők:
- DataTrigger a data_trigger.py mappában
- MovingAverage: move_average.py
A fő objektumom, a LoggingSim a simulate_logging.py fájlban jó példát adhat a használatára. Ha másik nyelvet használ, elolvashatja a kódomat, és a saját nyelvén implementálhatja.
Ez a kód javíthatja a projekt adatgyűjtését, próbálja ki.
A fenti grafikon a russ_hensel Graph Your Solar Power című grafikonjából származik, amely ugyanazt a futó átlagos objektumot használja.
Ajánlott:
Véletlenszerű egyenáramú motoros PWM kísérletek + kódoló hibaelhárítása: 4 lépés
Véletlenszerű egyenáramú motoros PWM kísérletek + kódoló hibaelhárítása: Gyakran előfordul, hogy valakinek a kukája a másik kincse, és ez volt az egyik ilyen pillanat számomra. Ha követett engem, valószínűleg tudja, hogy óriási projektbe fogtam, hogy saját 3D nyomtatóját CNC -t hozzam létre hulladékból. Ezek a darabok
Nyomtatás ellenőrzése speciális szoftver vagy nyomtató nélkül MS Excel segítségével (Banki csekknyomtatás): 6 lépés
Ellenőrizze a nyomtatást speciális szoftver vagy nyomtató nélkül MS Excel segítségével (banki csekknyomtatás): Ez egy egyszerű Excel munkafüzet, amely minden vállalkozás számára nagyon hasznos lesz, ha sok banki csekket ír be. csak számítógépre van szüksége, amely MS Excel programmal és normál nyomtatóval rendelkezik. Igen, most már
Szobrászati kísérletek kemény édességgel: 9 lépés (képekkel)
Szobrászati kísérletek kemény édességgel: önthető, képlékeny és átlátszó. Idővel változik, és hővel, vízzel vagy nyomással erodálódhat. Formákba borul, lassan megváltoztatja alakját a gravitáció hatására. Bármilyen színt vehet fel, és sokféle textúrát érhet el
Nincs forrasztás - Kapcsolóval adaptált játék speciális igényekhez/fogyatékosságokhoz: 7 lépés (képekkel)
Nincs forrasztás - Kapcsolóval adaptált játék speciális igényekhez/fogyatékosságokhoz: Ez a játékmódosítás elemmel működő játékot igényel, amelyet egyetlen kapcsolóval aktiválnak, és további külső kapcsolóval egészíti ki. A külső kapcsoló egy nagy formátumú nyomógomb, amely lehetővé teszi a nagyobb hozzáférést, bemutatva egy
Nagyfeszültségű kísérletek: 6 lépés
Nagyfeszültségű kísérletek: Ebben az oktatóanyagban néhány remek nagyfeszültségű kísérletet mutatok be, amelyeket a megfelelő felszereléssel elvégezhet. Ne feledje, NEM VAGYOK FELELŐSSÉGÉRT MINDEN ÁLTAL KÁRTOTT KÁRTAL !!! NE tegye ezt, ha korlátozott ismeretekkel rendelkezik az elektronikával kapcsolatban