我正在尝试在Android上编写GPS跟踪(类似于慢跑应用程序),并且GPS位置抖动的问题已经让人头疼了。当精度精确且精度在5米以内时,位置每秒抖动1-n米。如何确定或过滤掉合法运动中的抖动?
Sporypal等应用程序显然有一些方法可以过滤掉这种噪音。
有什么想法吗?
答案 0 :(得分:4)
你能通过低通滤波器运行这些位置吗?
订单的某些内容
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.正如我之前所说的那样,你将不得不玩一下这个值来看看哪个值产生最干净,最可取的结果