इसे लागू करने के दो तरीके हैं जो मैं आमतौर पर उपयोग करता हूं। मैं हमेशा रियलटाइम डेटा के साथ काम कर रहा हूं, इसलिए यह निरंतर इनपुट मानता है। यहाँ कुछ छद्म कोड है:
एक ट्रेन करने योग्य मिनीमैक्स का उपयोग करना:
define function peak:
// keeps the highest value it has received
define function trough:
// keeps the lowest value it has received
define function calibrate:
// toggles whether peak() and trough() are receiving values or not
define function scale:
// maps input range [trough.value() to peak.value()] to [0.0 to 1.0]
इस फ़ंक्शन के लिए आवश्यक है कि आप या तो प्रारंभिक प्रशिक्षण चरण (उपयोग करके calibrate()
) या आप कुछ अंतरालों पर या कुछ शर्तों के अनुसार पुन: प्रशिक्षण करें। उदाहरण के लिए, एक फंक्शन की कल्पना करें:
define function outBounds (val, thresh):
if val > (thresh*peak.value()) || val < (trough.value() / thresh):
calibrate()
शिखर और गर्त आमतौर पर मान प्राप्त नहीं कर रहे हैं, लेकिन यदि outBounds()
ऐसा मान प्राप्त होता है जो वर्तमान शिखर से 1.5 गुना से अधिक है या 1.5 से विभाजित वर्तमान कुंड से कम है, तो calibrate()
उसे कहा जाता है जो फ़ंक्शन को स्वचालित रूप से पुन: अंशांकित करने की अनुमति देता है।
एक ऐतिहासिक minmax का उपयोग करना:
var arrayLength = 1000
var histArray[arrayLength]
define historyArray(f):
histArray.pushFront(f) //adds f to the beginning of the array
define max(array):
// finds maximum element in histArray[]
return max
define min(array):
// finds minimum element in histArray[]
return min
define function scale:
// maps input range [min(histArray) to max(histArray)] to [0.0 to 1.0]
main()
historyArray(histArray)
scale(min(histArray), max(histArray), histArray[0])
// histArray[0] is the current element