Thuật toán Trilateration cho n số điểm


27

Tôi cần tìm thuật toán có thể tính toán trọng tâm A (còn gọi là trung tâm trọng lực, trung tâm hình học, tâm khối lượng) từ hình mà các đường tròn T1, T2, T3, T4, T5, .., Tn cắt VÀ độ dài của đường thẳng R từ tâm đến góc xa nhất của con số được đề cập

Thông tin sau đây được đưa ra:

  • Vĩ độ T1 = 56.999883 Kinh độ = 24.144473 Bán kính = 943
  • Vĩ độ T2 = 57.005352 Kinh độ = 24,151168 Bán kính = 857
  • Vĩ độ T3 = 57.005352 Kinh độ = 24.163356 Bán kính = 714
  • Vĩ độ T4 = 56,999042 Kinh độ = 24.168506 Bán kính = 714
  • Vĩ độ T5 = 56,994226 Kinh độ = 24,15709 Bán kính = 771

Kết quả sẽ như thế này: Một Vĩ độ = XX.XXXXXXX Kinh độ = XX.XXXXXXX Bán kính = XX

nhập mô tả hình ảnh ở đây

Như bạn có thể đã tìm ra, tôi đang làm việc trên phần mềm có thể tìm vị trí thiết bị bằng các Điểm truy cập Wifi hoặc Trạm di động gần nhất, vì số lượng điểm truy cập hoặc trạm gốc có thể thay đổi, tôi cần một thuật toán có thể thích ứng với số điểm không chắc chắn .

Có một số câu hỏi tương tự ở đâyở đây , nhưng không ai trong số chúng trả lời chính xác cho câu hỏi của tôi.


bạn đang làm việc trong ngôn ngữ nào
WolfOdrade

Chủ yếu là PHP, một chút JavaScript. Tôi đoán tôi đã phải đề cập đến điều này trước đây nhưng tôi là một nhà phát triển web và để hiểu câu trả lời của Whuber, tôi sẽ phải tìm một nhà toán học.
Kārlis Baumanis

Là bán kính có nguồn gốc từ cường độ tín hiệu tương đối?
Kirk Kuykendall

Vâng! Trên thực tế Bán kính tính bằng dBm
Kārlis Baumanis

1
@Reddox, một phần - Tôi đã quản lý để tính toán nó với php_exec () bằng cách sử dụng mathicala trên các máy chủ.
Kārlis Baumanis

Câu trả lời:


29

Các phép đo bán kính chắc chắn có một số lỗi. Tôi hy vọng lượng lỗi sẽ tỷ lệ thuận với bán kính. Chúng ta hãy giả sử các phép đo là không thiên vị. Một giải pháp hợp lý sau đó sử dụng phương pháp bình phương nhỏ nhất phi tuyến có trọng số , với trọng số tỷ lệ nghịch với bán kính bình phương.

Đây là công cụ tiêu chuẩn có sẵn trong (trong số những thứ khác) Python R, Mathicala và nhiều gói thống kê đầy đủ tính năng, vì vậy tôi sẽ chỉ minh họa nó. Dưới đây là một số dữ liệu thu được bằng cách đo khoảng cách, với sai số tương đối 10%, đến năm điểm truy cập ngẫu nhiên xung quanh vị trí thiết bị:

Bảng dữ liệu

Mathematica chỉ cần một dòng mã và không có thời gian CPU có thể đo lường được để tính toán mức độ phù hợp:

fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]

Chỉnh sửa--

Đối với bán kính lớn, các giải pháp chính xác hơn (hình cầu hoặc hình elip) có thể được tìm thấy chỉ bằng cách thay thế khoảng cách Euclide Norm[{x, y} - {x0, y0}]bằng một hàm để tính khoảng cách hình cầu hoặc hình elip. Trong Mathematica điều này có thể được thực hiện, ví dụ , thông qua

fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y}, 
        Weights -> 1/observations^2]

- chỉnh sửa

Một lợi thế của việc sử dụng một kỹ thuật thống kê như thế này là nó có thể tạo ra các khoảng tin cậy cho các tham số (là tọa độ của thiết bị) và thậm chí là hình elip tin cậy đồng thời cho vị trí thiết bị.

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

Bảng khoảng tin cậy

Đó là hướng dẫn để vẽ đồ thị dữ liệu và giải pháp:

Graphics[{Opacity[0.2], EdgeForm[Opacity[0.75]], White, Disk[Most[#], Last[#]] & /@ data, 
  Opacity[1], Red, ellipsoid, 
  PointSize[0.0125], Blue, Point[source], Red, Point[solution],
  PointSize[0.0083], White, Point @ points}, 
  Background -> Black, ImageSize -> 600]

Bản đồ

  • Các chấm trắng là các vị trí điểm truy cập (đã biết).

  • Dấu chấm màu xanh lớn là vị trí thiết bị thực sự.

  • Các vòng tròn màu xám đại diện cho bán kính đo. Lý tưởng nhất là tất cả chúng sẽ giao nhau tại vị trí thiết bị thực sự - nhưng rõ ràng là chúng không, do lỗi đo lường.

  • Dấu chấm lớn màu đỏ là vị trí thiết bị ước tính.

  • Hình elip màu đỏ phân định vùng tin cậy 95% cho vị trí thiết bị.

Hình dạng của hình elip trong trường hợp này rất đáng quan tâm: độ không đảm bảo vị trí là lớn nhất dọc theo đường thẳng NA-SE. Ở đây, khoảng cách đến ba điểm truy cập (đến NE và SW) hầu như không thay đổi và có sự đánh đổi trong các lỗi giữa khoảng cách đến hai điểm truy cập khác (về phía bắc và đông nam).

(Một vùng tin cậy chính xác hơn có thể đạt được trong một số hệ thống như là một đường viền của hàm khả năng; hình elip này chỉ là một xấp xỉ bậc hai với đường viền như vậy.)

Khi bán kính được đo không có lỗi, tất cả các vòng tròn sẽ có ít nhất một điểm giao nhau và - nếu điểm đó là duy nhất - đó sẽ là giải pháp duy nhất.

Phương pháp này hoạt động với hai hoặc nhiều điểm truy cập. Ba hoặc nhiều hơn là cần thiết để có được khoảng tin cậy. Khi chỉ có hai, nó tìm thấy một trong những điểm giao nhau (nếu chúng tồn tại); mặt khác, nó chọn một vị trí thích hợp giữa hai điểm truy cập.


3
Bill làm tốt lắm!

1
@Reddox Về nguyên tắc, có: bất kỳ ngôn ngữ hoàn chỉnh nào cũng có thể thực hiện bất kỳ tính toán nào. Nhưng PHP sẽ loại bỏ danh sách lựa chọn của bất kỳ ai làm ngôn ngữ đích. Ngay cả hướng dẫn sử dụng PHP cũng thừa nhận: "PHP có thể không phải là ngôn ngữ tốt nhất để tạo ứng dụng máy tính để bàn với giao diện người dùng đồ họa, nhưng nếu bạn biết rất rõ về PHP và muốn sử dụng một số tính năng PHP nâng cao ở phía máy khách của bạn các ứng dụng bạn cũng có thể sử dụng PHP-GTK để viết các chương trình như vậy. "
whuber

1
@Reddox Cảm ơn bạn đã liên kết. Tôi thấy cách nó cung cấp các tính toán hình học. Trong trường hợp này, những điều đó không thực sự cần thiết: cách tính toán duy nhất như vậy là một ứng dụng của định lý Pythagore để có được khoảng cách dưới dạng tổng bình phương gốc (gọi đến Normmã của tôi). Tất cả các công việc đều liên quan đến việc phù hợp với bình phương nhỏ nhất có trọng số, nhưng tôi không tin rằng thư viện GEOS cung cấp khả năng đó. Có thể GEOS có thể giúp ích khi cần khoảng cách elip chính xác.
whuber

2
Nếu tôi đọc chính xác điều này, @BenR, có vẻ như bạn đang cân dữ liệu theo tỷ lệ với bán kính bình phương thay vì tỷ lệ nghịch với chúng. Điều gì xảy ra khi bạn chia cho square(data[2])thay vì nhân với nó?
whuber


1

Trong trường hợp này, mọi vòng tròn giao nhau với tất cả các vòng tròn khác và vì vậy chúng tôi có thể xác định các điểm giao nhau theo cách này:

Đầu tiên xác định tất cả các điểm giao nhau n * (n-1). Hãy gọi cho bộ những điểm giao nhau tôi . Lấy một danh sách các điểm T có chứa các điểm trong cùng. Sau đó, với mỗi điểm p trong I , kiểm tra xem p có nằm trong mỗi vòng tròn không. Nếu p nằm trong mỗi vòng tròn, thì đây là điểm trên giao điểm trong cùng. Thêm một điểm đó vào danh sách T .

Bây giờ bạn có tọa độ giao cắt mong muốn. Tôi có thể nghĩ ra ít nhất hai cách để dự đoán vị trí:

  1. Chỉ cần tính toán trọng tâm (sử dụng khoảng cách là trọng lượng?) Của đa giác được hình thành bởi T và centroid là vị trí mong muốn.
  2. Tính vòng tròn tối thiểu có chứa tất cả các điểm của T . Sau đó, trung tâm của vòng tròn này là vị trí mong muốn. Tính R nên đơn giản sau này.

Một lưu ý khác: đầu tiên chuyển đổi cường độ tín hiệu thành khoảng cách bằng mô hình đường dẫn không gian trống (hoặc các biến thể). Tôi đưa ra là: bạn có bất kỳ tập dữ liệu đào tạo nào, bạn nên cố gắng tìm số mũ mất đường dẫn bằng cách sử dụng một số kỹ thuật học tập thay vì sử dụng n = 2 hoặc n = 2.2 làm giá trị cố định.


T ... "điểm trong cùng" là gì - nếu tôi có 5 nút..có bao nhiêu "điểm trong cùng" tôi nên kiểm tra?
ewizard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.