物联网环境,有时需要搜集传感器或者数据在运行状态时的高采样率波形信息,这类信息尺寸相对较大,如果设定定时传送,不适合,会有很多的无效数据点,我们必须能够识别出设备的有效工作状态。这里提及的峭度运算,是一个较便捷地侦测有效数据是否已经出现的指标,它可以作为一个侦测条件来使用。
def kurtosis(data):
n = len(data)
mean_val = sum(data) / n
var_val = sum((x - mean_val) ** 2 for x in data) / n
std_val = var_val ** 0.5
if std_val == 0:
return 0
else:
kurt_val = sum((x - mean_val) ** 4 for x in data) / n
kurt_val = kurt_val / (std_val ** 4)
return kurt_val - 3
上面是最简单的峭度公式。它的物理意义是:它是信号满足正态分布的特征度量。在满足正态分布的情形下,它的输出值所在区间大概是[-5,+5],一旦一组数据计算的结果在这个区间之外,就可以判定,有效数据已经到来——只有白噪声满足正态分布,有效的数据都是高度极化的,它们肯定不满足正态分布。
def IsRealDataComming(data):
return abs(kurtosis(data))>=5
实际使用中,如果>=5的条件过于宽松,可以依据现有的数据,将门限值设定得更高些。