فهرست مطالب:

آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون): 11 مرحله
آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون): 11 مرحله

تصویری: آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون): 11 مرحله

تصویری: آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون): 11 مرحله
تصویری: پایتون | سه سوته یک تقویم بساز 2024, جولای
Anonim
آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون)
آزمایش در ثبت اطلاعات پیشرفته (با استفاده از پایتون)

دستورالعمل های زیادی برای ثبت اطلاعات وجود دارد ، بنابراین وقتی می خواستم یک پروژه ورود به سیستم برای خود بسازم ، دسته ای را نگاه کردم. برخی از آنها خوب بودند ، برخی دیگر نه چندان زیاد ، بنابراین تصمیم گرفتم ایده های بهتری بگیرم و برنامه خودم را بسازم. این منجر به پیشرفت پروژه ای پیچیده تر از آنچه در ابتدا انتظار داشتم شد. بخشی از آن به مجموعه ای از آزمایشات در پردازش داده های حسگر تبدیل شد. این دستورالعمل به شما امکان می دهد آزمایش های مشابه یا مشابه را امتحان کنید.

(می توانید تمام کد را مشاهده کرده و آن را بارگیری کنید: کد در GitHub شما می توانید فقط در 2 کلیک به مشاهده ، شاید در یک پنجره دیگر ، بروید)

به طور معمول ثبت اطلاعات شامل موارد زیر است:

  • اکتساب داده ها: برخی از داده های یک سنسور را بخوانید. اغلب این فقط خواندن مبدل آنالوگ به دیجیتال (ADC) در دستگاهی مانند آردوینو است.
  • پردازش داده ها: هنگام خواندن یک مقدار ADC ، خروجی مبدل ها معمولاً باید به واحدهای مناسب مقیاس داده شود. همچنین ممکن است برای تعدیل مقادیر برای تصحیح خطاهای سنسور نیاز به تعدادی تنظیمات باشد.
  • فیلترینگ: داده ها معمولاً حاوی نویز هستند ، این فیلتر را می توان فیلتر کرد بنابراین شما به دنبال یک سیگنال در داده های خود هستید ، نه نویز.
  • ذخیره اطلاعات: داده ها ذخیره می شوند ، شاید در یک فایل متنی ، شاید در ابر. حتی اگر برق قطع شود ، داده ها باید زنده بمانند. به راحتی می توان داده های زیادی را ذخیره کرد ، ما یک ترفند کوچک برای کاهش فضای ذخیره سازی داده ها داریم.
  • نمایش داده ها: روش هایی برای مشاهده داده های شما ، در واقع ثبت اطلاعات نیست ، اما اگر نوعی نمایش داده ها را انجام نمی دهید ، چرا آنها را جمع آوری می کنید؟
  • دسترسی از راه دور: لازم نیست اما داشتن آن خوب است.

بیشتر دستورالعمل ها شامل برخی از موارد فوق است اما همه آنها را انجام نمی دهد ، یا آنها را به روشی بسیار ساده انجام می دهد. این دستورالعمل 2 مورد از مشکلات ورود به سیستم را که اغلب رد می شوند ، نشان می دهد و به عنوان یک امتیاز به شما وسیله ای می دهد که بدون استفاده از سرویس ابری ، داده های خود را ترسیم کنید. می توانید از کل آن استفاده کنید یا قطعاتی را بیرون بیاورید و آنها را مجدداً در پروژه خود ترکیب کنید.

مرحله 1: ابزار و مواد

ابزار و مواد
ابزار و مواد

این مثال همه در پایتون است بنابراین قابل اجرا است و می توان از اجزای آن تقریباً در هر سیستم عامل از جمله Mac ، PC ، Linux و Raspberry Pi استفاده کرد.

بنابراین برای استفاده از این دستورالعمل تنها چیزی که نیاز دارید یک محیط Python 3.6 در حال اجرا است و کد پیوست را بارگیری کنید. پس از اجرای کدی که من تنظیم کرده ام ، می توانید آن را برای آزمایشات خود تغییر دهید. طبق معمول در Python ، ممکن است لازم باشد بسته ها/ماژول ها را اضافه کنید تا همه چیز کار کند. محیط My Spyder تقریباً تمام قسمتهای مورد نیاز را در اختیار شما قرار می دهد (نگاه کنید به: نمودارهای دستورالعمل نمودار با پاره کردن صفحه نمایش پایتون). هنگامی که برای اولین بار پیغام خطا را مشاهده می کنید ، آنها در مورد قسمت های مفقوده در محیط خود به شما اطلاع می دهند.

دو مرحله بعدی به شما می گوید که چگونه یک آزمایش خود را بسازید و اجرا کنید ، اما احتمالاً بهتر است منتظر بمانید تا قبل از اینکه آزمایش خود را انجام دهید ، منتظر بمانید.

برای درک کد ، باید کمی تجربه کار با پایتون شی گرا را داشته باشید ، و توضیح دهید که خارج از محدوده این دستورالعمل است ، اما Google باید هر کمکی را که ممکن است نیاز داشته باشید به شما ارائه دهد.

به کد توجه کنید: (کد در GitHub شما می توانید به مشاهده بپردازید ، شاید در یک پنجره دیگر ، تنها با 2 کلیک) در حال حاضر در پایتون 3.6 قرار دارد ، بنابراین داشتن 3.6 بهترین خواهد بود. نسخه قدیمی کد در پیوندهای زیر موجود است.

مرحله 2: ایجاد یک آزمایش

ساختن یک آزمایش
ساختن یک آزمایش

سه مرحله برنامه نویسی (و خطوط) در ساختن آزمایش وجود دارد. هر آزمایش یک تابع در شی LoggingSim در فایل simulate_logging.py است. اجازه دهید آزمایش 1 (فقط نمودار اول) را که در مرحله بعدی اجرا می کنیم ، بررسی کنیم:

def experim_with_sample_rates (self):

print "" "آزمایش با نرخ نمونه بررسی نرخ نمونه های مختلف با تغییر delta T" "" self.start_plot (plot_title = "نرخ نمونه - قسمت 1/3: Delta T = 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 ()

هر آزمایش به عنوان تابع خود نوشته شده است ، بنابراین ما یک خط داریم که تابع را تعریف می کند (آزمایش آزمایشی…..)

خط بعدی ، بدون نظر ، (start_plot (….) شیء آزمایش را ایجاد می کند و نام آن را می دهد.

خط بعدی ، بدون نظر ، (add_sensor_data (…) به چند خط تقسیم شده است. این یک سنسور اندازه گیری سیگنال با نویز بالقوه و برخی پردازش ها را شبیه سازی می کند. آرگومان های عملکرد به شرح زیر است:

  • name: نامی که بر روی نمودار نهایی برای شناسایی داده ها قرار می گیرد
  • دامنه: سیگنال چقدر بزرگ است ، ما همیشه از دامنه 1. در این دستورالعمل استفاده می کنیم.
  • noise_amp: نویز چقدر بزرگ است ، 0. هیچ نویز نیست ، ما از اینجا شروع می کنیم.
  • delta_t: زمان بین اندازه گیری ها ، میزان نمونه را کنترل می کند.
  • max_t: حداکثر زمانی که ما داده ها را جمع آوری می کنیم ، همیشه در این دستورالعمل از 10 استفاده می کنیم.
  • run_ave: پردازش با استفاده از میانگین در حال اجرا ، 0 به معنی عدم پردازش است.
  • trigger_value: پردازش با استفاده از ماشه ، 0 به معنی عدم پردازش است

خط آخر ، بدون نظر ، (self.show_plot ……) نمودار را نمایش می دهد.

برای پیچیده تر شدن امور می توانید چندین خط روی یک نمودار یا چندین نمودار در یک آزمایش داشته باشید ، این باید از آزمایش های بعدی مشخص باشد.

مرحله 3: اجرای یک آزمایش

این کد اجرای یک آزمایش است. مانند معمول در پایتون ، در انتهای فایل قرار می گیرد.

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 experim_with_sample_rates (self):

print "" "آزمایش با نرخ نمونه بررسی نرخ نمونه های مختلف با تغییر delta T" "" self.start_plot (plot_title = "نرخ نمونه آزمایش 1/3: Delta T = 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 () # ------------- -------------------------------------- self.start_plot (plot_title = "نرخ نمونه آزمایش 2/3: دلتا T = 0.1 ") self.add_sensor_data (name =" dt = 1. "، دامنه = 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: دلتا T = 0.01") self.add_sensor_data (name = "dt = 1." ، دامنه = 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 () استفاده کنید.

نتیجه گیری احتمالی:

  • پایین بودن میزان نمونه برداری واقعا بد است.
  • نرخ بالا اغلب بهتر است.

(کد پایتون 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 "، 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 "، دامنه = 1. ، noise_amp =. 1 ، delta_t =.1 ، max_t = 10. ، run_ave = 0 ، trigger_value = 0) self.add_sensor_data (name = "noise = 1.0" ، دامنه = 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 experim_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" ، دامنه = 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"، دامنه = 1. ، noise_amp =.1 ، delta_t =.1 ، max_t = 10. ، run_ave = 8 ، trigger_value = 0) self.add_sensor_data (name = "ave len = 32"، دامنه = 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 Exper_with_moving_average_and_sample_ate (self):

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 "، دامنه = 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" ، دامنه = 1.، noise_amp =.1 ، delta_t =.01 ، max_t = 10. ، run_ave = 100 ، trigger_value = 0) self.show_plot ()

مرحله 8: آزمایش: ورود با Trigger

آزمایش: ورود به سیستم با ماشه
آزمایش: ورود به سیستم با ماشه

در این آزمایش ما یک ماشه اضافه می کنیم. اول ، منظور من از ماشه چیست؟ ماشه یک تکنیک است که در آن ما داده ها را جمع آوری می کنیم اما فقط پس از تغییر مقدار قابل توجهی از متغیرها ذخیره می کنیم. در این آزمایشها من یک متغیر روی متغیر زمان (محور x) قرار دادم. با استفاده از ماشه می توانم مقدار زیادی از داده ها را از نمونه گیری سریع بردارم و آنها را به مقدار معقول تری از داده ها کاهش دهم. این ویژگی با نرخ نمونه بالا و میانگین طولانی مدت مفید است.

من خط شماره 2 را از آخرین آزمایش گرفته ام که "خوب" و یک محرک اضافه شده بود. آن را با: sim_logging …… خروجی یک نمودار ، x خط داشته باشید.

چه اتفاقی می افتد؟ ما یک نمودار "خوب" با مقدار معقول داده (همان شماره 1) دریافت می کنیم. در پردازش بالاتر هزینه هایی وجود دارد. با این حال ، به طور کلی ، نتایج تقریباً برابر با 1 #میزان نمونه پایین تر با فیلتر کمتر است. شاید نتیجه بگیرید:

  • میانگین طولانی مدت با راه اندازی می تواند با مقدار مناسب داده ، نویز را کاهش دهد.
  • پردازش اضافی ممکن است نتایج بهتری ارائه ندهد و هزینه ای نیز در بر دارد.

کد:

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

def experim_with_trigger (self): print "" "Experim with Triggering ، dt ، میانگین اجرا کنید و همه را متغیر می کند" " # ----------------------- ------------------------- self.start_plot (plot_title = "راه اندازی 1/1-فعال کردن") 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 ، trig =.1 "، دامنه = 1. ، noise_amp =.1 ، delta_t =.01 ، max_t = 10. ، run_ave = 100 ، trigger_value =.1) self.show_plot ()

=

مرحله 9: آزمایش: ورود به سیستم با محرک - صدای بلندتر

آزمایش: ورود به سیستم با محرک - صدای بلندتر
آزمایش: ورود به سیستم با محرک - صدای بلندتر

بیایید همان آزمایش آخرین مرحله را انجام دهیم و سر و صدا را تقویت کنیم. با: sim_logging …… خروجی یک نمودار ، 2 خط است.

در حال حاضر پردازش اضافی ارزش بیشتری دارد. یک نتیجه گیری منطقی در اینجا ممکن است این باشد:

انتخاب میزان و نوع پردازش برای کاهش نویز به سیگنال و نویز شما بستگی دارد

کد:

def def_with_trigger_louder_oise (self):

print "" "سر و صدای بلندتر از آزمایش قبلی" "" self.start_plot (plot_title = "آزمایشی با سر و صدای بیشتر") self.add_sensor_data (name = "… dt =.1 ra = 10" ، دامنه = 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: استفاده از تکنیک ها در نرم افزار ورود به سیستم

استفاده از تکنیک ها در نرم افزار ورود به سیستم
استفاده از تکنیک ها در نرم افزار ورود به سیستم

کد من شی گرا است و پردازش میانگین در حال اجرا و ماشه فقط می تواند در محیط پایتون شما کپی شده و سپس مورد استفاده قرار گیرد. اشیا عبارتند از:

  • DataTrigger در data_trigger.py
  • MovingAverage در move_average.py

هدف اصلی من LoggingSim در simulate_logging.py باید مثال خوبی از نحوه استفاده از آن را به شما ارائه دهد. اگر از زبان دیگری استفاده می کنید ، می توانید کد من را بخوانید و در زبان خود پیاده سازی کنید.

این کد می تواند به پروژه شما ثبت اطلاعات بهتری بدهد ، آن را امتحان کنید.

نمودار بالا از Graph Your Solar Power by russ_hensel است که از همان شیء متوسط در حال اجرا استفاده می کند.

توصیه شده: