Съдържание:

Експерименти в разширено регистриране на данни (използване на Python): 11 стъпки
Експерименти в разширено регистриране на данни (използване на Python): 11 стъпки

Видео: Експерименти в разширено регистриране на данни (използване на Python): 11 стъпки

Видео: Експерименти в разширено регистриране на данни (използване на Python): 11 стъпки
Видео: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Юли
Anonim
Експерименти в разширеното регистриране на данни (използване на Python)
Експерименти в разширеното регистриране на данни (използване на Python)

Има много инструкции за регистриране на данни, така че когато исках да създам свой собствен проект за регистриране, огледах наоколо. Някои бяха добри, други не чак толкова, затова реших да взема някои от по -добрите идеи и да направя собствено приложение. Това доведе до проект, по -напреднал и по -сложен, отколкото очаквах в началото. Една част от него се превърна в поредица от експерименти в обработката на сензорни данни. Тази инструкция ви позволява да изпробвате същите или подобни експерименти.

(Можете да видите целия код и да го изтеглите на: Код в GitHub Можете да влезете в разглеждане, може би в друг прозорец, само с 2 кликвания)

Обикновено регистрирането на данни включва следното:

  • Събиране на данни: Прочетете някои данни от сензор. Често това е просто четене на аналогово -цифров преобразувател (ADC) на устройство като Arduino.
  • Обработка на данни: Когато се чете стойност на ADC, изходът на преобразувателите обикновено трябва да се мащабира до правилните единици. Възможно е също така да се наложи да направите някои корекции, за да калибрирате стойностите, за да коригирате грешките на сензора.
  • Филтриране: Данните обикновено съдържат някакъв шум, това може да бъде филтрирано, така че да търсите сигнала във вашите данни, а не шума.
  • Съхранение на данни: Данните се записват, може би в текстов файл, може би в облака. Данните трябва да оцелеят, дори ако захранването се изключи. Лесно е да спестите твърде много данни, имаме малък трик за намаляване на пространството за съхранение на данни.
  • Показване на данни: Методи за разглеждане на вашите данни, а не регистриране на данни, но ако не правите някакъв вид показване на данните, защо да ги събирате?
  • Отдалечен достъп: Не е необходимо, но е хубаво да го имате.

Повечето инструкции включват някои, но не всички от горните, или ги правят по много прост начин. Тази инструкция ще се справи с 2 от често пропусканите проблеми с регистрирането и като бонус ще ви даде възможност за начертаване на вашите данни, без да използвате облачна услуга. Можете да използвате цялото нещо или да извадите парченца и да ги смесите в собствен проект.

Стъпка 1: Инструменти и материали

Инструменти и материали
Инструменти и материали

Този пример е изцяло в Python, така че ще работи и компоненти могат да се използват на почти всяка операционна система, включително Mac, PC, Linux и Raspberry Pi.

Така че, за да използвате тази инструкция, всичко, от което се нуждаете, е работеща среда Python 3.6 и изтеглете прикачения код. След като стартирате кода, който съм настроил, можете да го промените за собствените си експерименти. Както обикновено е с Python, може да се наложи да добавите някои пакети/модули, за да работи всичко. Моята среда Spyder идва с почти всички необходими части (вижте: Графични изгледи с инструменти за изстъргване на екрана на Python). Когато за първи път стартирате наблюдаване за съобщения за грешка, те ще ви уведомят за липсващи части във вашата среда.

Следващите две стъпки ще ви кажат как да изградите и проведете свой собствен експеримент, но вероятно е по -добре да изчакате, докато не стартирате включените експерименти, преди да опитате свой собствен.

За да разберете кода, ще трябва да имате малко опит с обектно -ориентирания Python, обяснявайки, че това е извън обхвата на тази инструкция, но Google трябва да ви окаже помощ, от която може да се нуждаете.

Обърнете внимание на кода: (Код в GitHub Можете да влезете в разглеждане, може би в друг прозорец, само с 2 щраквания) сега е в Python 3.6, така че 3.6 би било най -добре. По -старата версия на кода е тук в връзките по -долу.

Стъпка 2: Изграждане на експеримент

Изграждане на експеримент
Изграждане на експеримент

Има три стъпки за програмиране (и линии) при изграждането на експеримент. Всеки експеримент е функция в обекта LoggingSim във файла simulate_logging.py. Нека да разгледаме експеримент 1 (само първата графика), който ще изпълним в следващата стъпка:

def експеримент_с_проби_оценки (самостоятелно):

отпечатайте "" "Експериментирайте с примерни проценти Преглед на различни честоти на извадката чрез промяна на делта Т" "" self.start_plot (plot_title = "Примерни проценти - Част 1/3: Делта Т = 1.0") self.add_sensor_data (name = "dt = 1. ", амплитуда = 1., noise_amp =.0, delta_t = 1., max_t = 10., run_ave = 0, trigger_value = 0) self.show_plot ()

Всеки експеримент е написан като своя собствена функция, така че имаме ред, определящ функцията (def експеримент …..)

Следващият ред без коментар, (start_plot (….) Създава обекта за експеримента и му дава име.

Следващият ред без коментар, (add_sensor_data (…) е разделен на няколко реда. Той симулира сензор, измерващ сигнал с потенциално шум и известна обработка. Аргументите на функцията са следните:

  • име: име, поставено на крайната графика за идентифициране на данните
  • амплитуда: колко голям е сигналът, винаги ще използваме амплитуда 1. в тази инструкция.
  • noise_amp: колко голям е шумът, 0. няма шум, ще започнем от тук.
  • delta_t: времето между измерванията, контролира честотата на дискретизация.
  • max_t: максималното време, през което събираме данни, винаги ще използваме 10 в тази инструкция.
  • run_ave: обработка, използваща текуща средна стойност, 0 означава, че няма обработка.
  • trigger_value: обработка чрез задействане, 0 означава, че няма обработка

последният ред без коментар, (self.show_plot ……) показва графиката.

За да направите нещата малко по -сложни, можете да имате няколко реда на графика или множество графики в експеримент, това трябва да стане ясно от експериментите, които следват.

Стъпка 3: Провеждане на експеримент

Това е кодът за провеждане на експеримент. Както обикновено в Python, той се поставя в края на файла.

sim_logging = LoggingSim ()

sim_logging.experiment_with_sample_rates ()

Това са само 2 реда:

  • Създайте симулатор на регистриране (LoggingSim ())
  • Стартирайте го (sim_logging.experiment_with_sample_rates ())

В изтегления код имам още няколко реда и коментари, трябва да е лесно да се разбере.

Стъпка 4: Експеримент: Честота на извадката

Експеримент: Честота на извадката
Експеримент: Честота на извадката
Експеримент: Честота на извадката
Експеримент: Честота на извадката
Експеримент: Честота на извадката
Експеримент: Честота на извадката

Симулаторът, както е настроен тук, винаги извежда приятна гладка синусова вълна с амплитуда 1. За този експеримент ще се забъркаме с честотата на дискретизация, коригирана от delta_t, разликата във времето между пробите. Няма да имаме шум или друга обработка. Кодът използва 3 честоти на дискретизация (delta_t = 1.0, 0.1 и 0.01.) Тъй като графиките попадат една върху друга, експериментът е настроен да произвежда 3 различни графики. Получените графики са изображенията за тази стъпка.

def експеримент_с_проби_оценки (самостоятелно):

print "" "Експеримент с примерни проценти Преглед на различните честоти на извадката чрез промяна на delta T" "" self.start_plot (plot_title = "Експериментални проценти 1/3: Delta T = 1.0") self.add_sensor_data (name = "dt = 1 " ----------------------------------- self.start_plot (plot_title = "Експериментални честоти на извадка 2/3: Делта 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 () # ------------------------------------------------ себе си.start_plot (plot_title = "Експериментални примерни проценти 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 ()

За да го стартирате, използвайте реда: sim_logging.experiment_with_sample_rates ()

Възможни изводи:

  • Твърде ниската честота на вземане на проби е наистина лоша.
  • Високите проценти често са по -добри.

(Код на Python 3.6 на връзката GitHub по -долу на инструкции, 2.7)

Стъпка 5: Експеримент: Показване на шум

Експеримент: Показване на шум
Експеримент: Показване на шум

В този експеримент запазваме същия сигнал, използваме средна честота на дискретизация и имаме различни количества шум (noise_amp =.0,.1, 1.0.) Изпълняваме го с: sim_logging.experiment_showing_noise (). Резултатът е една графика с 3 реда.

Възможен извод:

Шумът затруднява виждането на сигнала, намалете го, ако можете

Кодът:

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

def Experiment_showing_noise (self): print "" "Експеримент, показващ шум Разглеждане на различни количества шум чрез промяна на амплитудата на шума." "" self.start_plot (plot_title = "Експеримент, показващ шум") self.add_sensor_data (name = "noise = 0.0 ", амплитуда = 1., noise_amp =.0, delta_t =.1, max_t = 10., run_ave = 0, trigger_value = 0) self.add_sensor_data (име =" шум = 0.1 ", амплитуда = 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: Експеримент: Намалете шума с плъзгаща се средна

Експеримент: Намалете шума с плъзгаща се средна
Експеримент: Намалете шума с плъзгаща се средна
Експеримент: Намалете шума с плъзгаща се средна
Експеримент: Намалете шума с плъзгаща се средна

Плъзгащата средна (например с дължина 8) взема последните 8 измервания и ги усреднява. Ако шумът е случаен, надяваме се, че той ще бъде средно около 0. Изпълнете експеримента с: sim_logging.experiment_showing_noise (). Изведете една графика.

Възможни заключения:

  • Плъзгащата се средна стойност елиминира голяма част от шума
  • Колкото по -дълга е плъзгащата средна стойност, толкова по -голямо е намаляването на шума
  • По -продължителната плъзгаща средна стойност може да намали и изкриви сигнала

Кодът:

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

def Experiment_with_moving_average (self): print "" "Експериментирайте с MovingAverage Разглеждайки различни MovingAverage чрез промяна на дължината. Всички имат един и същ шум." "" # ------------------ ------------------------------ 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 ()

Стъпка 7: Експеримент: Плъзгаща средна и честота на извадката

Експеримент: Плъзгаща средна и честота на извадката
Експеримент: Плъзгаща средна и честота на извадката

В този експеримент сравняваме необработения сигнал с шум и 2 различни вариации за намаляване на шума.

  1. Средна честота на извадката и средна текуща средна стойност
  2. Висока честота на извадката и висока средна продължителност

Изпълнете го с: sim_logging …… Изходът е една графика. Мисля, че е ясно, че #2 върши по -добра работа за намаляване на шума, така че можем да заключим, че:

Високата честота на извадката и средната продължителност са добри

Но трябва да имате предвид, че има цена. #2 отнема много повече обработка и води до запазване на много повече данни. Цената може или не може да си струва. В следващия експеримент ще добавим тригер, устройство за намаляване на количеството съхранени данни.

Кодът:

def експеримент_с_преместване_средна_и_проба_процент (самостоятелно):

print "" "Експериментирайте с пълзяща средна и честота на извадката, dt, променяйте средната стойност" "" # ---------------------------- -------------------- self.start_plot (plot_title = "Подвижна средна и честота на извадката") self.add_sensor_data (name = "dt =.1 ra = 0 trig = 0 ", амплитуда = 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 ()

Стъпка 8: Експеримент: Регистриране с тригер

Експеримент: Регистриране с тригер
Експеримент: Регистриране с тригер

В този експеримент добавяме тригер. Първо, какво имам предвид под спусък? Задействането е техника, при която събираме данни, но ги запазваме само след като някоя променлива се е променила със значителна сума. В тези експерименти поставям тригер върху променливата time (ос x). С помощта на спусъка мога да взема голямо количество данни от бързо вземане на проби и да го намаля до по -разумно количество данни. Особеността е полезна с висока честота на извадката и дългосрочна средна стойност.

Взех ред № 2 от последния експеримент, който беше „добър“и добавих тригер. Изпълнете го с: sim_logging …… Изходът е една графика, x линии.

Какво става? Получаваме "добър" сюжет с разумно количество данни (същото като #1). Имаше известни разходи при по -висока обработка. Като цяло обаче резултатите са приблизително същите като #1 по -ниската честота на дискретизация с по -малко филтриране. Може да заключите:

  • Дългосрочната средна стойност със задействане може да даде добро намаляване на шума с разумни количества данни.
  • Допълнителната обработка може да не даде толкова по -добри резултати и идва с цена.

Кодът:

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

def Experiment_with_trigger (self): print "" "Експериментирайте с Triggering, dt, изпълнете средна стойност и задействайте всички различни" "" # ----------------------- ------------------------- self.start_plot (plot_title = "Trigger 1/1-Triggering On") self.add_sensor_data (name = "dt =.1 ra = 10, trig = 0 ", амплитуда = 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, триг =.1 ", амплитуда = 1., шум_амп =.1, делта_т =.01, макс_т = 10., run_ave = 100, тригер_ стойност =.1) self.show_plot ()

=

Стъпка 9: Експеримент: Регистриране с тригер - по -силен шум

Експеримент: Регистриране с тригер - по -силен шум
Експеримент: Регистриране с тригер - по -силен шум

Нека да направим същия експеримент като последната стъпка и да усилим шума. Изпълнете го с: sim_logging …… Изходът е една графика, 2 реда.

Сега допълнителната обработка изглежда повече. Разумен извод тук може да бъде:

Избирането на количеството и вида на обработката за намаляване на шума зависи от вашия сигнал и шум

Кодът:

def eksperiment_with_trigger_louder_noise (self):

print "" "По-силен шум от предишния експеримент" "" self.start_plot (plot_title = "Експеримент с тригер-по-силен шум") 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", амплитуда = 1., noise_amp =.5, delta_t =.01, max_t = 10., run_ave = 100, trigger_value =.1) self.show_plot ()

Стъпка 10: Направете свои собствени експерименти

Направете свои собствени експерименти
Направете свои собствени експерименти

Надявам се в този момент да видите, че техниките в тази инструкция могат да бъдат полезни при регистрирането на данни, но че те също трябва да бъдат използвани с известна мисъл. Експериментирането с тях може да помогне на този процес.

Някои забележки относно експериментите и неща, които бихте могли да разгледате:

  • Синусоидалните вълни не са единственият интересен тип сигнал, опитайте други, други вълни или рампи или … …
  • Използвах нормално разпределение за шума, има толкова много видове шум; трябва да вземете предвид другите
  • Средната стойност е прост, но не и единственият метод за разглеждане на шума

Забележка: регистриране на снимки от Уикипедия.

Стъпка 11: Използване на техниките във вашия софтуер за регистриране

Използване на техниките във вашия софтуер за регистриране
Използване на техниките във вашия софтуер за регистриране

Кодът ми е обектно ориентиран и обработката за средно ниво и задействане може просто да се копира във вашата среда на Python и след това да се използва. Обектите са:

  • DataTrigger в data_trigger.py
  • MovingAverage в moving_average.py

Основният ми обект LoggingSim в simulate_logging.py трябва да ви даде добър пример за това как да го използвате. Ако използвате друг език, можете да прочетете моя код и да го внедрите на вашия език.

Този код може да даде на вашия проект по -добро регистриране на данни, опитайте.

Графиката по -горе е от Graph Your Solar Power от russ_hensel, която използва същия обект със средна продължителност.

Препоръчано: