Çok gürültülü CPU tüketim verisinden sinyal almam gerekiyordu. İşte Jeff McClintock medyan filtresi.
Ortalama ve medyanı sıfır olarak sıfırlayın, daha sonra her bir 'inç' örneği için giriş örneğine küçük bir artışla medyan girin. Sonunda, giriş örneklerinin yaklaşık% 50'sinin daha büyük ve% 50'sinin medyandan daha az olduğu bir noktaya yerleşecektir. Artışların boyutu gerçek medyanla orantılı olmalıdır. Gerçek medyanı bilmediğimizden, ortalamayı kaba bir tahmin olarak kullanırım. Adım büyüklüğü, tahminin 0,01 katı olarak hesaplanır. Daha küçük adım boyutları daha doğrudur, ancak yerleşmek için daha uzun sürer. Bu çözelti çok etkili olsa da
float median = 0.0f;
float average = 0.0f;
// for each sample
{
average += (abs(sample) - average) * 0.1f; // rough running average magnitude.
median += _copysign(average * 0.01, sample - median);
}
aşağıdaki uyarılar dikkat: 1) yakınsama hızı sinyal genliği (farklı uzaklıklar ve genlikleri ile adım yanıtları karşılaştırın) bağlıdır, bu nedenle karşı olmuyorsa sıfıra yakın sinyal! 2) yakın sabit giriş sinyali için, 'ortalama * 0.01' genliği ve örnekleme sıklığı 3 sıklığı ile jitter'i tanıtır. 3) kısa impulslarda (orjinal olarak değil, dolayısıyla biber ve gürültü filtresi olarak popülerdir) – orzechow
Evet, jitter kaldırmak için bir iyileştirme, hata sinyali (örnek - medyan) yani daha büyük değil, adım büyüklüğü (ortalama * 0.01) sınırlamak yani: std :: max (ortalama * 0.01, fabs (örnek) - medyan)). –