th7/filter/filter.go

57 lines
1.0 KiB
Go
Raw Permalink Normal View History

2023-11-21 14:45:14 +00:00
package filter
2023-11-21 18:44:31 +00:00
func FilterByType(t int, arr []float64, init float64) float64 {
switch t {
case 0:
return AlphaBeta(arr, init)
case 1:
return Lag_1(arr, init)
case 2:
return Lag_2(arr, init)
case 3:
return Lag_3(arr, init)
}
return AlphaBeta(arr, init)
}
func AlphaBeta(arr []float64, init float64) float64 {
2023-11-21 14:45:14 +00:00
value := init
for i := range arr {
gain := 1.0 / (float64(i + 1))
value += (gain*arr[i] - value)
}
return value
2023-11-21 14:57:53 +00:00
}
2023-11-21 16:19:20 +00:00
// Simple lag filter. value = old * 0.9 + new * 0.1
func Lag_1(arr []float64, init float64) float64 {
value := init
for i := range arr {
value = value*0.9 + arr[i]*0.1
}
return value
}
// Simple lag filter. value = old * 0.95 + new * 0.05
func Lag_2(arr []float64, init float64) float64 {
value := init
for i := range arr {
value = value*0.95 + arr[i]*0.05
}
return value
}
// Simple lag filter. value = old * 0.99 + new * 0.01
func Lag_3(arr []float64, init float64) float64 {
value := init
for i := range arr {
value = value*0.99 + arr[i]*0.01
}
return value
}