int main(int argc, char *argv[]) {
@autoreleasepool {
KalmanFilter * kf = [KalmanFilter new];
NSArray * arr = @[
@-53, @-54, @-55, @-59, @-59, @-60, @-52, @-44, @-44, @-49, @-45, @-46, @-46, @-49, @-47, @-50, @-50, @-50, @-46, @-43, @-43, @-44, @-47, @-46, @-46, @-46, @-46, @-46, @-44, @-42, @-46, @-46, @-46, @-43, @-46
];
[kf setupRTSCount:arr.count];
NSArray * kamlam = [kf estimateArray:arr];
NSArray * rts = [kf smoothArrayWithRTS];
NSLog(@"kalman: %@ rts: %@", kamlam, rts);
}
}
RTS 的结果是蓝色线条,对比设备提供的测量结果(绿线),我们认为这是一个理想的结果。
首先是 RTS 的算法实现:
考虑现状,我们只需要实现 一维的 RTS,于是我们讲 A、H 等参数默认为 1(上图Python 的实现也是 1 )。
以下是我的实现:
其中蓝色线条是 最终的实现。橙色线条是,利用 10^((baseRSSI-currentRSSI)/(10 * 2)) 计算得到的距离曲线用来参考。灰色线条是原始值。
最后。放大最后一部分细看,我认为是一个比较理想的实现。