我正在尝试在 Android 上编写一个 GPS 跟踪(类似于慢跑应用程序),但 GPS 位置抖动问题使它变得丑陋。当精度为 FINE 且精度在 5 米以内时,位置每秒抖动 1-n 米。您如何从合法运动中确定或过滤掉这种抖动?
Sporypal 等应用程序显然有一些方法可以过滤掉这种噪音。
有什么想法吗?
最佳答案
您可以通过低通滤波器运行这些位置吗?
命令的东西
x(n) = (1-K)*x(n-1) + K*S(n)
在哪里
S 是噪声样本,x 是低通滤波样本。 K 是一个介于 0 和 1 之间的常数,您可能必须对其进行试验才能获得最佳性能。
根据 TK 的建议:
我的伪代码看起来非常像 C:
float noisy_lat[128], noisy_long[128];
float smoothed_lat[128], smoothed_lon[128];
float lat_delay=0., lon_delay=0.;
float smooth(float in[], float out[], int n, float K, float delay)
{
int i;
for (i=0; i<n; i++) {
*out = *in++ * K + delay * (1-K);
delay = *out++;
}
return delay;
}
loop:
Get new samples of position in noisy_lat and noise_lon
// LPF the noise samples to produce smoother position data
lat_delay = smooth(noisy_lat, smoothed_lat, 128, K, lat_delay);
lon_delay = smooth(noisy_lon, smoothed_lon, 128, K, lon_delay);
// Rinse. Repeat.
go to loop:
简而言之,这只是一个具有单样本延迟的反馈积分器。如果您的输入在所需信号之上有低频白噪声,则该积分器将随时间平均输入信号,从而使噪声分量平均到接近零,从而为您留下所需信号。
它的效果如何将取决于你的信号有多少噪声和滤波器反馈系数 K。正如我之前所说,你必须稍微调整一下这个值,看看哪个值产生最干净、最理想的效果结果。
关于java - GPS位置抖动去除算法/理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184418/