2011-09-05 9 views
6

Dato un elenco di posizioni geocoded con un valore di errore sconosciuto e un database di correzioni pubbliche meno rumorose più vicine alla posizione reale (più di cui sono affidabili), come dovrei progettare un algoritmo per tenere conto di tutte le correzioni per approssimare la posizione esatta più accuratamente?Correzione del rumore nelle letture multiple del sensore geografico

Sia le coordinate stazionarie che le letture del sensore sono rumorose, quindi è simile a un problema di check-in geografico. Mi ricorda un problema noto con più sensori rumorosi, in cui modellate il rumore e calcolate il valore più probabile, ma non ricordo la soluzione.

Tutte le coordinate sono memorizzate come il tipo geography::POINT in SQL Server 2008, quindi una soluzione efficiente per tale piattaforma sarebbe molto utile.


precisazione: coordinate sono non temporale. Ogni lettura proviene da un sensore unico senza misurazioni ripetute.

risposta

2

Althtough Non sono sicuro di come implementarlo in SQL Server 2008 un buon algoritmo potrebbe essere http://en.wikipedia.org/wiki/Kalman_filter (vedere http://www.developerstation.org/2011/09/kalman-filter-for-dummies-tutorials.html).

Per un'implementazione potrebbe essere utile usare l'indice spaziale da SQL Server - si veda per esempio http://blogs.msdn.com/b/isaac/archive/2007/05/16/sql-server-spatial-support-an-introduction.aspx

Un'altra risorsa interessante regargind supporto spaziale in SQL Server è http://www.jasonfollas.com/blog/archive/2008/03/14/sql-server-2008-spatial-data-part-1.aspx

Anche se in C un po 'di applicazione di una filtro di Kalman vedere http://interactive-matter.eu/2009/12/filtering-sensor-data-with-a-kalman-filter/

EDIT - come da commento:

seconda delle esigenze potrebbe rendere più senso utilizzare una versione modificata di filtraggio Kalman che non richiede solo rumore bianco in considerazione, ma ritiene anche errori correlati nel tempo - si veda ad esempio http://hss.ulb.uni-bonn.de/2011/2605/2605.pdf

EDIT 2 - dopo il chiarimento da OP:

Nel vostro piano d'azione non c'è niente in qualche modo "indovinare" un errore se non il luogo pubblico meno rumoroso ... si potrebbe usare qualsiasi rumore algoritmo statistico consapevoli ... si potrebbe anche selezionare il 3 o 5 coordinate più vicine (vedi il link relativo al supporto spaziale) e correggi le tue misure ad esempio simili a una bacchetta magnetica ... un'altra opzione sarebbe quella di applicare un err o correzione ponderando le differenze simili a triangolazione ecc

EDIT 3 - dopo il commento da OP:

Un tale algoritmo è il minimo-Weight-Triangolazione di insiemi di punti ... vedi http://en.wikipedia.org/wiki/Minimum-weight_triangulation e http://code.google.com/p/minimum-weight-triangulator/

+0

Il filtro di Kalman è il filtro che avevo in mente, grazie. Funziona bene per la misurazione continua della velocità o dell'accelerazione da parte di alcuni sensori, ma funzionerà per centinaia di letture rumorose e statiche fatte da sensori diversi con errori sconosciuti? –

+0

con alcune modifiche potrebbe - vedere il link dal mio EDIT sopra ... – Yahia

+0

Sfortunatamente le mie coordinate di correzione non sono una serie temporale (ho aggiunto un chiarimento). La carta citata si riferisce a "serie temporali statiche", ovvero una serie di misurazioni eseguite da un ricevitore GPS statico. In questo caso, più sensori indipendenti hanno "verificato" una volta (e solo una volta) a, o al limite, la posizione desiderata. –