Er zijn twee manieren om dit te implementeren die ik vaak gebruik. Ik werk altijd met realtime data, dus dit veronderstelt continue input. Hier is wat pseudo-code:
Met behulp van een trainbare minmax:
definieer functie peak: // behoudt de hoogste waarde die het heeft ontvangen definieer functie via : // behoudt de laagste waarde die het heeft ontvangen define function calibrate: // schakelt tussen of peak () en trough () waarden ontvangen of niet define function scale: // wijst invoerbereik [trough.value () toe aan peak.value ()] to [0.0 to 1.0]
Deze functie vereist dat u ofwel een initiële trainingsfase uitvoert (door calibrate ()
te gebruiken) of dat u ofwel opnieuw traint op bepaalde intervallen of volgens bepaalde voorwaarden. Stel je bijvoorbeeld een functie als deze voor:
definieer functie outBounds (val, thresh): if val > (thresh * peak.value ()) || val < (trough.value () / thresh): calibrate ()
piek en dal ontvangen normaal geen waarden, maar als outBounds ()
ontvangt een waarde die meer is dan 1,5 keer de huidige piek of minder dan het huidige dieptepunt gedeeld door 1,5, dan wordt calibrate ()
aangeroepen waardoor de functie automatisch opnieuw kan kalibreren.
Met een historische minmax:
var arrayLength = 1000var histArray [arrayLength] definieer historyArray (f): histArray.pushFront (f) // voegt f toe aan het begin van de arraydefine max (array): // zoekt maximum element in histArray [] return maxdefine min (array): // zoekt minimum element in histArray [] retourneert mindefine functie scale: // kaarten invoerbereik [min (histArray) tot max (histArray)] tot [0,0 tot 1,0] main () historyArray (histArray) schaal (min (histArray), max (histArray), histArray [0]) // histArray [0] is het huidige element