Daha çox

N bal miqdarı üçün trilaterasiya alqoritmi

N bal miqdarı üçün trilaterasiya alqoritmi


Centroid hesablaya biləcək bir alqoritm tapmalıyam A (aka cazibə mərkəzi, həndəsi mərkəz, kütlə mərkəzi) T1, T2, T3, T4, T5,…, Tn dairələrinin kəsişdiyi və xətt uzunluğunun şəklindən. R centroid-dən göstərilən rəqəmin ən uzaq küncünə qədər

Aşağıdakı məlumatlar verilir:

  • T1 Enlem = 56.999883 Boylam = 24.144473 radius = 943
  • T2 Enlem = 57.005352 Boylam = 24.151168 Radius = 857
  • T3 Enlem = 57.005352 Boylam = 24.163356 Radius = 714
  • T4 Enlem = 56.999042 Boylam = 24.168506 Radius = 714
  • T5 Enlem = 56.994226 Boylam = 24.15709 Radius = 771

Nəticə belə olmalıdır: A Enlem = XX.XXXXXXX Boylam: XX.XXXXXXX Radius = XX

Yəqin ki, artıq başa düşdüyünüz kimi, giriş nöqtələrinin və ya baza stansiyalarının sayı dəyişə biləcəyi üçün cihazı ən yaxın Wifi Giriş Noktaları və ya Mobil Baz stansiyaları ilə tapa bilən bir proqram üzərində işləyirəm, qeyri-müəyyən nöqtələrə uyğunlaşa bilən bir alqoritmə ehtiyacım var. .

Burada və burada bənzər suallar var, amma heç biri sualımı tam olaraq cavablandırmır.


Radius ölçmələri şübhəsiz ki, bəzi səhvlərə məruz qalır. Xəta miqdarının radiusların özləri ilə mütənasib olacağını gözləyərdim. Ölçülərin başqa bir şəkildə qərəzsiz olduğunu düşünək. Daha sonra ağlabatan bir həll istifadə edir ağırlıqlı qeyri-xətti ən kiçik kvadratlar uyğun, ağırlıqları kvadrat radiusları ilə tərs mütənasibdir.

Bu (digər şeylər arasında) Python'da mövcud olan standart şeylərdir,R, Riyaziyyat, və bir çox tam xüsusiyyətli statistik paket, buna görə sadəcə izah edəcəyəm. Cihazın yerini əhatə edən beş təsadüfi giriş nöqtəsinə nisbi səhvlə% 10 olan məsafələrin ölçülməsi ilə əldə edilən bəzi məlumatlar:

Riyaziyyat uyğunluğu hesablamaq üçün yalnız bir kod sətirinə və ölçülən CPU vaxtına ehtiyac yoxdur:

fit = NonlinearModelFit [data, Norm [{x, y} - {x0, y0}], {x0, y0}, {x, y}, Ağırlıqlar -> 1 / müşahidələr ^ 2]

Redaktə edin--

Böyük radiuslar üçün daha dəqiq (kürə və ya elipsoidal) həllər yalnız Öklid məsafəsini əvəz etməklə tapıla bilər.Norm [{x, y} - {x0, y0}]sferik və ya elipsoidal məsafəni hesablamaq funksiyası ilə. İldə Riyaziyyat bu edilə bilər, məs., vasitəsilə

fit = NonlinearModelFit [data, GeoDistance [{x, y}, {x0, y0}], {x0, y0}, {x, y}, Ağırlıqlar -> 1 / müşahidələr ^ 2]

- redaktə sonu

Bu kimi statistik bir texnikanın istifadəsinin bir üstünlüyü, parametrlər üçün (cihazın koordinatları olan) etibarlılıq aralıqları və hətta cihazın yerləşməsi üçün eyni vaxtda bir etibarlılıq ellipsi meydana gətirə bilməsidir.

ellipsoid = fit ["ParameterConfidenceRegion", ConfidenceLevel -> 0.95]; uyğun ["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]

Verilənləri və həllini planlaşdırmaq ibrətamizdir:

Qrafika [{Opacity [0.2], EdgeForm [Opacity [0.75]], White, Disk [Most [#], Last [#]] & / @ data, Opacity [1], Red, elipsoid, PointSize [0.0125], Mavi , Nöqtə [mənbə], Qırmızı, Nöqtə [həll], PointSize [0.0083], Ağ, Nöqtə @ nöqtələr}, Fon -> Qara, ImageSize -> 600]

  • Ağ nöqtələr (məlum) giriş nöqtəsi yerləridir.

  • Böyük mavi nöqtə cihazın əsl yeridir.

  • Boz dairələr ölçülmüş radiusları təmsil edir. İdeal olaraq, hamısı həqiqi cihaz yerində kəsişəcəkdi, amma ölçmə səhvinə görə açıq şəkildə bunlar olmur.

  • Böyük qırmızı nöqtə cihazın təxmin edilən yeridir.

  • Qırmızı elips, cihaz yeri üçün% 95 etibar bölgəsini ayırır.

Bu vəziyyətdə ellipsin forması maraq doğurur: yer qeyri-müəyyənliyi NW-SE xətti boyunca ən böyükdür. Burada üç giriş nöqtəsinə (NE və SW-yə) qədər məsafələr çətinliklə dəyişir və digər iki giriş nöqtəsinə (şimal və cənub-şərqə) olan məsafələr arasında səhvlər mübahisəsi mövcuddur.

(Bəzi sistemlərdə ehtimal funksiyasının konturu olaraq daha dəqiq bir güvən bölgəsi əldə edilə bilər; bu ellips belə bir kontura ikinci dərəcəli bir yaxınlaşmadır.)

Radiuslar səhvsiz ölçüldükdə, bütün dairələr ən azı bir qarşılıqlı kəsişmə nöqtəsinə sahib olacaq və - əgər bu nöqtə bənzərsizsə - bu unikal həll olacaqdır.

Bu metod iki və ya daha çox giriş nöqtəsi ilə işləyir. Güvən fasilələri əldə etmək üçün üç və ya daha çoxuna ehtiyac var. Yalnız ikisi olduqda, kəsişmə nöqtələrindən birini tapır (əgər varsa); əks halda, iki giriş nöqtəsi arasında uyğun bir yer seçir.


Bu vəziyyətdə, hər dairə bütün digər dairələri kəsir və buna görə kəsişmə nöqtələrini bu şəkildə təyin edə bilərik:

Əvvəlcə bütün n * (n-1) kəsişmə nöqtələrini təyin edin. Bu kəsişmə nöqtəsinin dəstinə zəng edin Mən. Xalların siyahısını götürün T daxili nöqtələri ehtiva edən. Sonra hər nöqtə üçün səh in Mənyoxlayın səh hər dairənin içindədir. Əgər səh hər dairənin içərisindədir, onda bu ən kəsişmədə nöqtədir. Siyahıya belə bir nöqtə əlavə edin T.

İndi istədiyiniz kəsişmə koordinatlarına sahibsiniz. Məkanı proqnozlaşdırmaq üçün ən azı iki yol düşünə bilərəm:

  1. Yalnızca əmələ gələn çoxbucağın santroidini (məsafəni ağırlıq kimi istifadə edin?) Hesablayın T və centroid istədiyiniz yerdir.
  2. Hər nöqtəsini ehtiva edən minimum dairəni hesablayın T. O zaman bu dairənin mərkəzi istədiyiniz yerdir. Hesablanır R bundan sonra düz olmalıdır.

Başqa bir qeyd: əvvəlcə boşluq yolu modeli (və ya varyasyonları) istifadə edərək siqnal gücünü məsafəyə çevirin. Mənim fikrim budur: hər hansı bir təlim məlumat bazanız var, sabit dəyər olaraq n = 2 və ya n = 2.2 istifadə etmək əvəzinə bəzi öyrənmə texnikasından istifadə edərək yol itkisi göstəricisini tapmağa çalışmalısınız.


Sadəcə 3D məsafələr üçün aşağıdakı alqoritmi sınadım (və buna görə də 2D məsafələrdə də işləməlidir). Tam bir model deyil, yalnız 10 təkrar kimi bir şeydən sonra həqiqi cavaba çox yaxınlaşan təkrarlanan bir modeldir.

Performansını dəqiq bir yanaşmaya qarşı sınamamışam və buna görə bildiyim qədər belə bir həlldən daha az performans göstərə bilər. Yenə də paylaşacağımı düşünürdüm.

Alqoritm belədir:

  1. İlkin bir təxmin edin Q bütün dairə mərkəzlərinin ortalamasına bərabərdir Cn
  2. Hər dairə mərkəzi üçün Cn və dairə radiusları Rn, bir delta vektorunu tapın ΔQn düsturu izləyən:

ΔQn = normallaşdırmaq(Cn - Q) * (böyüklük(Cn - Q) - Rn)

  1. İçindəki bütün vektorların ortalamasını əlavə edin ΔQn üçün Q

  2. Lazımi dəqiqliyə çatana qədər 2. və 3. addımı təkrarlayın


Videoya baxın: TƏMİZ BAL axtaranlar, DİQQƏT - Bu videonu MÜTLƏQ İZLƏYİN!