มีสองวิธีในการใช้สิ่งนี้ที่ฉันใช้เป็นปกติ ฉันมักจะทำงานกับข้อมูลเรียลไทม์ดังนั้นจึงถือว่าอินพุตต่อเนื่อง นี่คือบางส่วนของรหัสเทียม:
ใช้ minmax ที่ฝึกได้:
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()
peak และ trough ปกติไม่ได้รับค่า แต่ถ้าoutBounds()
ได้รับค่าที่มากกว่า 1.5 เท่าของ peak ปัจจุบันหรือน้อยกว่า trough ปัจจุบันหารด้วย 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