我在使用实验数据过滤数组时遇到问题 - 数据是一个长数组(double)。该数组的索引只是时间(秒),值可以是负数或正数。问题是,有时实验数据是非常错误的(( - 这是由于 我们设备中的错误。此错误值与其他数组值非常不同。例如 前100秒的值等于+75 +(小的delta值)或 - 40 - (小的delta值),但是,在3秒的时间内值是+270(这是我上面说过的错误)。如何从数组中清除这个值?平均值计数可能不是最佳方式,因为如果我从数组中取每个值来求和,则此错误数据会破坏整个统计量(由于它的“重量”很大)。我已经绘制了这些数据 - 图片清晰但是..如果这个错误是由白噪声引起的,那么我可以实现例如卡尔曼滤波器,但首先没有计算值的函数,其次这个错误不是白噪声。
答案 0 :(得分:1)
让我们假设大多数时候我们都有正确的价值观。如果信号是永久性的(具有小的delta),我们可以使用中值来过滤数据:
delta = 1e-3;
a=[75 * ones(1,20) + rand(1,20) * delta, 270 * ones(1,3) + rand(1,3) * delta];
m = median(a);
filtered_a = a(m - 2 * delta < a & a < m + 2 * delta);