我在很多地方读到,对于某些应用程序来说,移动中位数比移动平均线要好一些,因为它对异常值不太敏感。
我想在真实数据上测试这个断言,但我看不到这种效果(绿色:中值,红色:平均值)。看这里:
这是示例音频数据 test.wav。这是Python代码:
import numpy as np
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
def median(lst): return np.median(np.array(lst))
def mean(lst): return sum(lst)/len(lst)
(fs, x) = read('test.wav')
x = abs(x)
env = np.zeros_like(x)
env2 = np.zeros_like(x)
for i in range(len(x)):
env[i] = median(x[max(i-1000,0):i+1])
env2[i] = mean(x[max(i-1000,0):i+1])
plt.plot(range(len(x)), env, color = 'green')
plt.plot(range(len(x)), env2, color = 'red')
plt.show()
我尝试了不同的窗口宽度值(在代码中:1000),它总是一样的:移动中位数并不比移动平均线好(即对异常值不那么敏感)。
与Window width = 10000 (10000 >> the peak width) 相同:
题:
您能否提供一个示例,表明移动中位数对异常值的敏感度低于移动平均线?如果可能,请使用示例 .WAV 文件数据集(下载链接)。
即是否可以对这些数据进行移动中位数,使得结果就像这条黄色曲线?(即没有更多的尖峰!)