Не могли бы вы просто запустить позиции через фильтр нижних частот?
Что-то порядка
x(n) = (1-K)*x(n-1) + K*S(n)
где
S является ваши шумные сэмплы и х, отфильтрованный фильтром нижних частот образцов. K - постоянная между 0 и 1, которую вам, вероятно, придется экспериментировать с лучшей производительностью.
предложение Per 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. Как я уже говорил, вам придется немного поиграть со значением, чтобы узнать, какое значение производит самый чистый, самый желаемый результат.
Не могли бы вы дать «например», используя псевдокод? Я думаю, что это сделает его намного более ясным для ОП. –
Спасибо за подробный пример ... идя сегодня, чтобы узнать, поможет ли это. – corrumpu
@corrumpu Это сработало? – Yankee