2022-09-24 16:35:03 -07:00
|
|
|
package hhio
|
2022-09-24 16:29:26 -07:00
|
|
|
|
|
|
|
|
import "sort"
|
|
|
|
|
|
|
|
|
|
func NewMedianFilter(in chan float64, num int) chan float64 {
|
|
|
|
|
out := make(chan float64)
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
defer close(out)
|
|
|
|
|
|
|
|
|
|
buf := make([]float64, num, num)
|
|
|
|
|
srt := make([]float64, num, num)
|
|
|
|
|
next := 0
|
|
|
|
|
|
|
|
|
|
for {
|
|
|
|
|
v, ok := <-in
|
|
|
|
|
if !ok {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buf[next%num] = v
|
|
|
|
|
next++
|
|
|
|
|
|
|
|
|
|
if next < num {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
copy(srt, buf)
|
|
|
|
|
sort.Float64s(srt)
|
|
|
|
|
|
|
|
|
|
out <- srt[num/2+1]
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
}
|