কখনও কখনও যা সহজ দেখায় তা সহজ নয়। আপনার করতে বেশ জটিল পরিমাপ রয়েছে তবে আপনি একটি সহজ ফলাফল চান। আপনি যা পরিমাপ করতে চান তা ধ্রুবক নয়, সময়ের সাথে এটি পরিবর্তিত হয়। আপনার প্রয়োজনীয়তার স্তরের উপর নির্ভর করে আপনি বর্তমানের এক বা একাধিক বৈশিষ্ট্য গণনা করতে পারেন। এই বৈশিষ্ট্যগুলি আপনাকে সিস্টেমকে আরও ভালভাবে পর্যবেক্ষণ করতে সহায়তা করবে। আরোহী জটিলতায় আমি আপনাকে 3 টি পৃথক সমাধান প্রস্তাব করছি।
সমাধান 1: গড়
আপনি একটি এক-মানের ফলাফল পেতে চান -> সময়ে সময়ে গড় পান। @Akellyirl দ্বারা ইতিমধ্যে প্রস্তাবিত হিসাবে, একটি লো-পাস ফিল্টার ব্যবহার করুন। float y = alpha*input + (1-alpha)*y
প্রতিটি নমুনার জন্য গণনা করুন , যেখানে alpha
স্মুথ ফ্যাক্টর। বিস্তারিত জানার জন্য উইকিপিডিয়া দেখুন ।
সমাধান 2: সর্বোচ্চ + গড়
আপনি গড় এবং সর্বাধিক মান পেতে আকর্ষণীয়। উদাহরণস্বরূপ উপাদানটির মাত্রা নির্ধারণের জন্য সর্বাধিক মান নিরীক্ষণ আকর্ষণীয় হতে পারে।
if (y > max)
max = y;
সমাধান 3: স্ট্যান্ডার্ড বিচ্যুতি + সর্বোচ্চ + গড়
কেন?
নীচে চার্ট দেখুন। বিভিন্ন আকারের 3 টি সংকেত রয়েছে। একটি ত্রিভুজ , একটি সাইন এবং একটি স্পাইক সংকেত। এগুলি একই সময়কাল, একই প্রশস্ততা , একই গড় এবং একই ন্যূনতম এবং সর্বোচ্চ সহ সমস্ত পর্যায়ক্রমিক । তবে, তাদের বিভিন্ন আকার রয়েছে, এবং সত্যই তাদের একটি সম্পূর্ণ ভিন্ন গল্প আছে ...
পার্থক্যের একটি হ'ল স্ট্যান্ডার্ড বিচ্যুতি। এজন্য আমি আপনাকে আপনার পরিমাপগুলি প্রসারিত করার এবং মানক বিচ্যুতি অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি। সমস্যাটি হ'ল এটি গণনা করার মানক উপায় হ'ল সিপিইউ গ্রাহক। আশা করি, এর একটি সমাধান আছে।
কিভাবে?
হিস্টোগ্রাম পদ্ধতিটি ব্যবহার করুন । সমস্ত পরিমাপের একটি হিস্টোগ্রাম তৈরি করুন এবং কার্যকরভাবে ডেটাসেটের পরিসংখ্যান (ন্যূনতম, সর্বোচ্চ, গড়, মান বিচ্যুতি) নিষ্কাশন করুন। হিস্টগ্রাম একই মান বা মানের একই পরিসীমা সহ একত্রিত হয়। সুবিধাটি হ'ল সমস্ত নমুনা সংরক্ষণ করা (সময়ের সাথে বেড়ে যাওয়া গণনা), এবং সীমিত সংখ্যক ডেটাতে দ্রুত গণনা করা।
পরিমাপ অর্জন করা শুরু করার আগে, হিস্টোগ্রাম সংরক্ষণ করার জন্য একটি অ্যারে তৈরি করুন। এটি 1 মাপের পূর্ণসংখ্যার অ্যারে, 32 আকারের উদাহরণস্বরূপ:
int histo[32];
অ্যামিটারের পরিসরের উপর নির্ভর করে নীচে ফাংশনটি মানিয়ে নিন। উদাহরণস্বরূপ, যদি পরিসরটি 256mA হয় তবে এর অর্থ হিস্টোগ্রামের বিন 0 0 এবং 8 এমএ এর মধ্যে মান দ্বারা বৃদ্ধি করা হবে, বিন 1 1 থেকে 8 এবং 16 এমএ ইত্যাদির মান দ্বারা বৃদ্ধি করা হবে ... সুতরাং, আপনার প্রতিনিধিত্ব করার জন্য একটি পূর্ণসংখ্যার প্রয়োজন হবে হিস্টোগ্রাম বিন সংখ্যা:
short int index;
প্রতিবার আপনি যখন একটি নমুনা পাবেন তখন সংশ্লিষ্ট বিন সূচকটি সন্ধান করুন:
index = (short int) floor(yi);
এবং এই বিন বৃদ্ধি:
histo[index] += 1;
গড় গণনা করতে, এই লুপটি চালান:
float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
mean = i * histo[i]; // sum along the histogram
N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.
স্ট্যান্ডার্ড বিচ্যুতি গণনা করতে, এই লুপটি চালান:
float std_dev = 0;
for (i=0; i < 32 ; i++) {
std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.
হিস্টোগ্রাম পদ্ধতির কৌশলটি হ'ল সমস্ত অর্জিত সিগন্যালের নমুনার পরিবর্তে কয়েকটি সংখ্যক বিনয়ের উপর ধীর গতিতে কাজ করা। নমুনার আকার যত দীর্ঘ হবে তত ভাল। আপনি যদি আরও বিশদ জানতে চান তবে এই আকর্ষণীয় পৃষ্ঠাটি হিস্টোগ্রাম, পিএমএফ এবং পিডিএফ পড়ুন ।