Bài 3 · Vận dụng · 20 phút
Đo khoảng cách bằng tốc độ ánh sáng
Biên soạn bởi Nguyễn Anh Tuấn
Khoảng cách tới vệ tinh = tốc độ ánh sáng × thời gian tín hiệu bay (time-of-flight); vì sao gọi là khoảng cách giả (pseudorange) khi đồng hồ máy thu lệch.
Ở bài trước, mỗi vệ tinh đã hô xuống “tôi đang ở đây, và bây giờ đúng là giờ này”. Còn thiếu một mảnh: vệ tinh đó cách ta bao xa? Biết được khoảng cách rồi thì ta sắp tìm ra vị trí.
Mẹo đo khoảng cách này mèo con đã làm mà không để ý: thấy tia chớp rồi đếm tới lúc nghe tiếng sấm. Đếm được mấy giây, nhân với tốc độ âm thanh là ra tia sét cách bao xa. GPS dùng đúng ý đó, chỉ thay âm thanh bằng tín hiệu vô tuyến chạy với tốc độ ánh sáng.
Tín hiệu vô tuyến đi với tốc độ ánh sáng - khoảng 300.000 km mỗi giây. Nếu biết tín hiệu bay từ vệ tinh xuống mất bao lâu (gọi là time-of-flight), chỉ việc nhân với tốc độ đó là ra khoảng cách. Cho máy bấm thử hai con số:
khoang-cach.py - thoi gian doi ra khoang cach
c = 299792458 # toc do anh sang trong chan khong (m/s)
# 1 phan ti giay (nanosecond) thi tin hieu di duoc bao xa?
print(f"1 ns -> {c * 1e-9:.2f} m")
# Tin hieu tu ve tinh ngay tren dinh dau (cao 20200 km) bay mat bao lau?
khoang_cach = 20200 * 1000 # met
print(f"20200 km -> {khoang_cach / c * 1000:.1f} ms") Kết quả khi chạy
1 ns -> 0.30 m 20200 km -> 67.4 ms
- ▸Tín hiệu đi bằng tốc độ ánh sáng (~300.000 km/s).
- ▸Khoảng cách = tốc độ ánh sáng × thời gian bay.
- ▸Vệ tinh trên đỉnh đầu (~20.200 km) thì tín hiệu tới sau ~67 mili-giây.
Đây là lúc dùng lại hai món của bài trước. Vệ tinh đóng dấu thời điểm gửi vào tín hiệu (nhờ đồng hồ nguyên tử); máy thu biết thời điểm mình nhận được. Lấy hiệu hai mốc thời gian là ra thời gian bay:
- ▸Thời gian bay = thời điểm nhận − thời điểm gửi.
- ▸Vệ tinh ghi sẵn thời điểm gửi vào trong tín hiệu.
- ▸Mã PRN giúp máy thu khớp đúng thời điểm tới từng phần triệu giây.
Nghe đơn giản, nhưng có một cái bẫy: hai mốc thời gian đó phải đo bằng đồng hồ khớp nhau. Vệ tinh có đồng hồ nguyên tử xịn, còn máy thu thì không.
Vì nhân với tốc độ ánh sáng, một sai lệch thời gian bé tí cũng phóng đại thành sai khoảng cách lớn. Xem đồng hồ máy thu lệch vài micro-giây (phần triệu giây) thì khoảng cách sai bao nhiêu:
dong-ho-lech.py - lech thoi gian -> sai khoang cach
c = 299792458
# Dong ho may thu lech mot chut -> sai khoang cach bao nhieu met?
for lech_us in [1, 10, 100]: # do lech dong ho, don vi micro-giay (us)
sai_m = c * lech_us * 1e-6
print(f"lech {lech_us:>3} us -> sai {sai_m:9.1f} m") Kết quả khi chạy
lech 1 us -> sai 299.8 m lech 10 us -> sai 2997.9 m lech 100 us -> sai 29979.2 m
Lệch 1 micro-giây đã sai gần 300 mét! Đó là lý do đồng hồ trong GPS phải chuẩn tới từng nano-giây - và là lý do máy thu rẻ tiền không thể tự đo khoảng cách thật một cách hoàn hảo.
Vì đồng hồ máy thu chưa chuẩn, con số khoảng cách nó đo được không phải khoảng cách thật, mà lệch đi một chút. Dân kỹ thuật gọi nó là pseudorange (khoảng cách giả). Nghe nản, nhưng có một điểm cứu cánh:
Mấu chốt
Trung thực
Giờ mèo con đo được khoảng cách (dù là “giả”) tới từng vệ tinh. Một khoảng cách tới một vệ tinh nghĩa là bạn nằm đâu đó trên một mặt cầu bao quanh vệ tinh đó. Một mặt cầu thì rộng mênh mông - nhưng nhiều mặt cầu giao nhau sẽ khoá lại còn đúng một điểm.
Bước tiếp theo
Câu hỏi thường gặp
Nhờ thứ học ở bài trước: vệ tinh đóng “dấu thời gian” cực chuẩn bằng đồng hồ nguyên tử, và mã PRN cho phép máy thu “trượt” để khớp đúng thời điểm tín hiệu tới từng phần triệu giây. Đo được thời gian siêu nhỏ chính là chìa khoá.
Vì đồng hồ trong máy thu chưa thật chuẩn, nên khoảng cách đo được lệch so với khoảng cách thật. May là mọi vệ tinh đều bị lệch CÙNG một lượng (do cùng một đồng hồ máy thu), nên bài sau có cách trị.
Không. Sai số thực tế (cỡ vài mét) chủ yếu đến từ các nguyên nhân khác lớn hơn - tầng khí quyển, tín hiệu dội… (để dành Bài 5). Còn lỗi đồng hồ máy thu thì được xử lý gần như sạch nhờ mẹo ở Bài 4.
Rất giống! Thấy chớp rồi đếm tới lúc nghe sấm, nhân với tốc độ âm thanh là ra khoảng cách tới tia sét. GPS cũng là “thời gian bay × tốc độ”, chỉ khác tín hiệu đi bằng tốc độ ánh sáng (nhanh hơn âm thanh gần một triệu lần).
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.
Máy thu tính khoảng cách tới một vệ tinh bằng cách nào?
- 1
5 nano-giây là bao nhiêu mét?
Đồng hồ lệch 5 ns. Dùng quy tắc “1 ns ≈ 30 cm”, khoảng cách sai bao nhiêu?
Hoàn thành khi: Khoảng 1,5 m (5 × 0,30 m). Tự kiểm bằng đoạn code ở Bước 2 nếu muốn.
- 2
Vệ tinh ở chân trời
Một vệ tinh ở gần chân trời, cách ~25.000 km. Tín hiệu bay mất bao lâu (mili-giây)?
Hoàn thành khi: Khoảng 83 ms (25.000.000 m ÷ 299.792.458 m/s ≈ 0,0834 s). Xa hơn nên lâu hơn ca trên đỉnh đầu (~67 ms).
- 3
Sấm và chớp
Mèo con thấy chớp, đếm được 3 giây rồi mới nghe sấm. Tốc độ âm thanh ~340 m/s. Tia sét cách bao xa? Nguyên lý này giống GPS chỗ nào?
Hoàn thành khi: Khoảng 1.020 m (~1 km). Giống GPS ở chỗ: khoảng cách = tốc độ × thời gian bay; GPS chỉ thay âm thanh bằng ánh sáng.
- 4
Vì sao “giả”?
Giải thích vì sao khoảng cách máy thu đo gọi là pseudorange, và sai số đồng hồ máy thu ảnh hưởng các vệ tinh theo kiểu chung hay riêng?
Hoàn thành khi: Vì đồng hồ máy thu lệch nên mọi khoảng cách đo bị sai MỘT LƯỢNG GIỐNG NHAU (chung) - đó là điểm mấu chốt để Bài 4 sửa được.
- 5
Một chiều khác khứ hồi
GPS đo một chiều, radar đo khứ hồi. Khác biệt đó khiến GPS gặp khó gì mà radar không?
Hoàn thành khi: Radar dùng đồng hồ của chính nó cho cả phát lẫn thu nên không lo lệch; GPS chỉ nghe một chiều nên đồng hồ máy thu phải khớp đồng hồ vệ tinh, sinh ra lỗi cần xử lý.
- 6
Nối sang Bài 4
Biết khoảng cách tới MỘT vệ tinh thì khoanh được mèo con đang ở đâu trong không gian? Cần bao nhiêu vệ tinh để ra một điểm?
Hoàn thành khi: Một khoảng cách = nằm đâu đó trên một mặt cầu quanh vệ tinh; cần nhiều mặt cầu (3-4) giao nhau mới ra điểm - đó là trilateration ở Bài 4.