【发布时间】:2012-02-07 21:41:50
【问题描述】:
我正在尝试在 android 上编写 GPS 跟踪(类似于慢跑应用程序),而 GPS 位置抖动问题已经引起了它的丑陋。当精度为 FINE 且精度在 5 米以内时,该位置每秒抖动 1-n 米。您如何确定或过滤掉合法运动中的这种抖动?
Sporypal 等应用程序显然有某种方式可以过滤掉这种噪音。
有什么想法吗?
【问题讨论】:
我正在尝试在 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。正如我之前所说,您必须稍微调整一下该值,看看哪个值产生最干净、最理想的结果。
【讨论】: