Bunu yaygın olarak kullanmamın iki yolu var. Her zaman gerçek zamanlı veriyle çalışıyorum, bu da sürekli girdiyi varsayar. İşte bazı sahte kod:
Eğitilebilir bir minmax kullanmak:
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]
Bu işlev, başlangıç eğitim aşamasını (kullanarak calibrate()
) gerçekleştirmenizi veya belirli aralıklarla veya belirli koşullara göre yeniden eğitmenizi gerektirir. Örneğin, böyle bir işlevi hayal edin:
define function outBounds (val, thresh):
if val > (thresh*peak.value()) || val < (trough.value() / thresh):
calibrate()
tepe ve oluk normalde outBounds()
değer almaz , ancak geçerli zirvenin 1,5 katından daha fazla veya mevcut oluktan 1,5'e bölünen bir değer alırsa calibrate()
, işlevin otomatik olarak yeniden kalibre edilmesine olanak sağlayan denir.
Tarihsel bir minmax kullanarak:
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