Có hai cách để thực hiện điều này mà tôi thường sử dụng. Tôi luôn làm việc với dữ liệu thời gian thực, vì vậy điều này giả định đầu vào liên tục. Đây là một số mã giả:
Sử dụng một minmax có thể huấn luyện:
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]
Hàm này yêu cầu bạn thực hiện giai đoạn huấn luyện ban đầu (bằng cách sử dụng calibrate()
) hoặc bạn đào tạo lại theo các khoảng thời gian nhất định hoặc theo các điều kiện nhất định. Ví dụ, hãy tưởng tượng một chức năng như thế này:
define function outBounds (val, thresh):
if val > (thresh*peak.value()) || val < (trough.value() / thresh):
calibrate()
đỉnh và máng thông thường không nhận được giá trị, nhưng nếu outBounds()
nhận được giá trị lớn hơn 1,5 lần so với đỉnh hiện tại hoặc nhỏ hơn máng hiện tại chia cho 1,5, thì calibrate()
được gọi là cho phép hàm tự động hiệu chỉnh lại.
Sử dụng một minmax lịch sử:
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