Bài 5 · Nâng cao · 24 phút
Sai số & hiệu chỉnh
Biên soạn bởi Nguyễn Anh Tuấn
Vì sao chấm xanh nhảy lung tung: trễ tầng điện ly & đối lưu (ionosphere/troposphere), tín hiệu dội (multipath), hình học vệ tinh xấu (DOP); cách giảm sai số.
Ở bài trước, ta giả định mọi khoảng cách đo được đều chính xác, nên ba vòng tròn giao đúng một điểm. Thực tế thì mỗi khoảng cách lệch đi một chút - thế là ba vòng không giao gọn vào một điểm nữa, mà thành một vùng nhoè nhoè. Đó là lý do chấm xanh có lúc đứng yên, có lúc nhảy loạn.
Bài này điểm mặt từng thủ phạm làm khoảng cách lệch, rồi xem cách kéo sai số xuống.
- ▸Trilateration cần khoảng cách chuẩn; sai một chút là giao điểm nhoè.
- ▸Thủ phạm: khí quyển, tín hiệu dội, hình học vệ tinh, đồng hồ & quỹ đạo.
- ▸Có nhiều cách hiệu chỉnh, từ vài mét xuống tới centimet.
Tín hiệu phải xuyên qua khí quyển mới tới được mèo con. Tầng điện ly (ionosphere) và tầng đối lưu (troposphere) làm tín hiệu chậm lại một chút. Mà chậm lại nghĩa là thời gian bay đo được lâu hơn thật, nên khoảng cách tính ra dài hơn thực tế - sai số lớn nhất với GPS dân dụng.
Đa tần cứu ở đây
Tín hiệu không phải lúc nào cũng đi thẳng. Nó dội khỏi tường nhà cao tầng, mặt nước, sườn núi… rồi mới tới máy thu - đi đường vòng nên dài hơn thật. Hiện tượng này gọi là multipath (đa đường).
Giữa rừng nhà chọc trời, multipath nặng thêm mà nhiều vệ tinh lại bị nhà che mất, nên chấm xanh nhảy loạn - dân định vị gọi là “hẻm núi đô thị” (urban canyon). Ra chỗ thoáng trời thì khá hơn nhiều.
Một thủ phạm tinh vi hơn: vệ tinh đứng ở đâu trên trời. Cùng một sai số đo khoảng cách, nếu các vệ tinh trải rộng khắp bầu trời thì vị trí ra khá chuẩn; nếu chúng chụm lại hay gần thẳng hàng thì sai số bị khuếch đại. Thử bằng đúng thuật toán trilateration của bài trước:
dop.py - hinh hoc ve tinh anh huong sai so
import math
def trilaterate(c1, c2, c3):
def k(c): return c[0]**2 + c[1]**2 - c[2]**2
a1, b1, d1 = 2*(c2[0]-c1[0]), 2*(c2[1]-c1[1]), k(c2)-k(c1)
a2, b2, d2 = 2*(c3[0]-c1[0]), 2*(c3[1]-c1[1]), k(c3)-k(c1)
det = a1*b2 - a2*b1
return ((d1*b2 - d2*b1)/det, (a1*d2 - a2*d1)/det)
def thu(ten, sats, dich, e):
cs = [(sx, sy, math.dist((sx, sy), dich) + e) for (sx, sy) in sats]
p = trilaterate(*cs)
print(f"{ten}: sai vi tri {math.dist(p, dich):.2f} (moi canh do du {e})")
dich = (8, 8)
tot = [(0, 0), (18, 3), (6, 18)] # ve tinh trai rong -> hinh hoc TOT
xau = [(0, 0), (16, 2), (32, 5)] # ve tinh gan thang hang -> hinh hoc XAU
thu("Hinh hoc TOT", tot, dich, 0.5)
thu("Hinh hoc XAU", xau, dich, 0.5) Kết quả khi chạy
Hinh hoc TOT: sai vi tri 0.03 (moi canh do du 0.5) Hinh hoc XAU: sai vi tri 7.82 (moi canh do du 0.5)
Cùng sai số đo 0,5 mỗi cạnh, hình học tốt chỉ lệch 0,03, hình học xấu lệch tới 7,82 - gấp hàng trăm lần! Chỉ số đo độ “đẹp/xấu” này tên là DOP (Dilution of Precision). Bạn có thể thấy tận mắt: mở lại mô phỏng ở Bài 4 và kéo ba vệ tinh sát nhau, giao điểm sẽ “nhoè” và trượt đi rất nhạy.
Trung thực
Mỗi nguồn góp một ít. Vì chúng phần lớn độc lập, ta gộp theo kiểu “căn bình phương” (RSS) chứ không cộng thẳng:
tong-sai-so.py - gop cac nguon sai so (RSS)
import math
# Sai so dien hinh cua mot phep do khoang cach toi ve tinh (met)
nguon = {
"Tang dien ly (ionosphere)": 5.0,
"Dong ho & quy dao ve tinh": 2.0,
"Tin hieu doi (multipath)": 1.0,
"Tang doi luu (troposphere)": 0.5,
"Nhieu trong may thu": 0.5,
}
for ten, m in nguon.items():
print(f" {ten:28} ~ {m:>4.1f} m")
rss = math.sqrt(sum(m * m for m in nguon.values()))
print(f" {'Gop lai (can binh phuong)':28} ~ {rss:>4.1f} m") Kết quả khi chạy
Tang dien ly (ionosphere) ~ 5.0 m Dong ho & quy dao ve tinh ~ 2.0 m Tin hieu doi (multipath) ~ 1.0 m Tang doi luu (troposphere) ~ 0.5 m Nhieu trong may thu ~ 0.5 m Gop lai (can binh phuong) ~ 5.5 m
Muốn nhỏ hơn vài mét thì cần hiệu chỉnh:
- ▸DGPS: trạm mặt đất biết rõ vị trí mình, đo sai số rồi phát “đính chính” cho máy gần đó.
- ▸SBAS (WAAS ở Mỹ, EGNOS ở châu Âu): vệ tinh tăng cường phát đính chính cho cả một vùng rộng.
- ▸RTK: dùng pha sóng mang cùng trạm tham chiếu gần, đạt độ chính xác cỡ centimet.
Trung thực
Tóm lại: trilateration cho vị trí, nhưng khí quyển, multipath và hình học vệ tinh làm nó lệch vài mét; DGPS/SBAS/RTK kéo xuống tới dưới mét, thậm chí centimet. Dù vậy, mọi cách trên vẫn cần một thứ: nhìn thấy bầu trời.
Bước tiếp theo
Câu hỏi thường gặp
Vì còn nhiều nguồn sai số khác: tín hiệu bị tầng khí quyển làm chậm, dội vào nhà cao tầng, và hình học vệ tinh không phải lúc nào cũng đẹp. Bài này mổ xẻ từng nguồn và cách trị.
Tầng điện ly làm tín hiệu ở các tần số khác nhau chậm khác nhau. So tín hiệu trên hai tần số, máy thu ĐO được phần trễ đó rồi trừ bớt - nên máy đa tần chính xác hơn máy một tần.
DGPS: một trạm mặt đất biết rõ vị trí của mình, đo sai số rồi phát “đính chính” cho máy gần đó. SBAS (WAAS ở Mỹ, EGNOS ở châu Âu): vệ tinh tăng cường phát đính chính cho cả vùng rộng. RTK: dùng pha sóng mang cùng một trạm tham chiếu gần, đạt độ chính xác cỡ centimet.
Tín hiệu dội qua dội lại giữa các toà nhà (multipath) nên đường đi dài hơn thật; lại bị nhà che mất nhiều vệ tinh khiến hình học xấu. Hiện tượng này gọi là “hẻm núi đô thị” (urban canyon).
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Nguồn sai số lớn thường gặp của GPS dân dụng (sau khi đã tắt nhiễu cố ý) là gì?
- 1
Hình học tốt vs xấu
Chạy đoạn dop.py ở Bước 4. Hình học tốt và xấu cho sai vị trí bao nhiêu? Rút ra kết luận.
Hoàn thành khi: Tốt ~0,03; xấu ~7,82 với cùng sai số đo 0,5 mỗi cạnh. Kết luận: hình học vệ tinh xấu (gần thẳng hàng) khuếch đại sai số vị trí.
- 2
Khí quyển: dài hay ngắn?
Tầng khí quyển làm khoảng cách ĐO được dài hơn hay ngắn hơn khoảng cách thật? Vì sao?
Hoàn thành khi: Dài hơn: tín hiệu bị làm CHẬM nên thời gian bay đo được lâu hơn, nhân tốc độ ánh sáng ra khoảng cách lớn hơn thật.
- 3
Đổi bảng sai số
Trong tong-sai-so.py (Bước 5), đứng giữa phố nên multipath tăng từ 1,0 lên 5,0 m. Tính lại tổng gộp (căn bình phương).
Hoàn thành khi: RSS = √(5² + 2² + 5² + 0,5² + 0,5²) = √54,5 ≈ 7,4 m. Multipath lớn kéo tổng sai số lên rõ rệt.
- 4
DGPS hay RTK?
Kỹ thuật nào cho độ chính xác cỡ centimet? Kỹ thuật nào “đính chính” khoảng cách qua một trạm tham chiếu phát sửa lỗi?
Hoàn thành khi: RTK (pha sóng mang) cho cỡ centimet; DGPS đính chính pseudorange qua trạm tham chiếu, đạt dưới mét tới vài mét.
- 5
Vì sao đa tần bù được khí quyển
Giải thích vì sao có HAI tần số thì đo và trừ bớt được sai số do tầng điện ly.
Hoàn thành khi: Tầng điện ly làm trễ khác nhau theo tần số; so độ lệch giữa hai tần số, máy thu tính ra phần trễ rồi trừ đi.
- 6
Nối sang Bài 6
Hiệu chỉnh giỏi tới đâu thì GPS vẫn cần điều kiện gì? Khi nào nó gần như bó tay?
Hoàn thành khi: Vẫn cần “thấy bầu trời”. Trong nhà, đường hầm, hay phố kín thì tín hiệu quá yếu - lúc đó cần WiFi, Bluetooth, 4G hỗ trợ (Bài 6).