BEAST decoding produces incorrect positions hundreds of km off target #35
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
olemd/skyview#35
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem Description
BEAST format decoding occasionally produces aircraft positions that are hundreds of kilometers away from their actual location. This creates phantom aircraft jumps and unreliable position tracking.
Current Behavior
Evidence from Logs
Technical Details
Likely Issues:
/internal/modes/decoder.goAffected Code:
/internal/modes/decoder.go- CPR decoding functions/internal/beast/parser.go- BEAST message parsing/internal/merger/merger.go- Position validation logicImpact
Investigation Needed
Potential Solutions
Root cause found and fixed in v0.0.13
The CPR global decoder had several defects (fixed in
30b21e9):math.Modin Go returns negative results for negative input, while CPR needs a positive modulo. Some valid positions came out at about -300° and were dropped.NL(latEven) == NL(latOdd)), so pairs straddling a boundary were off by a whole zone.In a sweep of stationary position pairs between 58°N and 71°N, 83% were wrong or dropped before the fix; all now decode to within a few metres. Merger validation also no longer locks onto a bad first position (
42352e1).Live verification against dump1090 on the same Beast feed: v0.0.12 showed one aircraft about 680 km off and logged 13 rejections in 3 minutes. v0.0.13 showed no position more than 5 km off, a median difference of 60 m, and no rejections.
Released in v0.0.13.