Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจนเฉˆเจฒเฉ‹ เจนเฉˆเจฌเจฐ. เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡ เจนเจฐ เจ•เฉ‹เจˆ เจœเฉ‹ เจ•เจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจœเจนเจพเจœเจผ 'เจคเฉ‡ เจฐเจฟเจธเจผเจคเฉ‡เจฆเจพเจฐเจพเจ‚ เจœเจพเจ‚ เจฆเฉ‹เจธเจคเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจฟเจ† เจœเจพเจ‚ เจฆเฉ‡เจ–เจฟเจ† เจนเฉˆ, เจจเฉ‡ เจฎเฉเจซเจค Flightradar24 เจธเฉ‡เจตเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค เจ…เจธเจฒ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš เจœเจนเจพเจœเจผ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐเจจ เจฆเจพ เจ‡เจน เจ‡เฉฑเจ• เจฌเจนเฉเจค เจนเฉ€ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆเฅค

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

ะ’ เจชเจนเจฟเจฒเจพ เจญเจพเจ— เจ…เจœเจฟเจนเฉ€ เจ”เจจเจฒเจพเจˆเจจ เจธเฉ‡เจตเจพ เจฆเฉ‡ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจงเจพเจ‚เจค เจฆเจพ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€. เจ…เจธเฉ€เจ‚ เจนเฉเจฃ เจ…เฉฑเจ—เฉ‡ เจœเจพเจตเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจชเจคเจพ เจฒเจ—เจพเจตเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจธเจŸเฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจฟเจนเฉœเจพ เจกเฉ‡เจŸเจพ เจญเฉ‡เจœเจฟเจ† เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ เจ…เจคเฉ‡ เจชเจพเจˆเจฅเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ–เฉเจฆ เจกเฉ€เจ•เฉ‹เจก เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆเฅค

ะ˜ัั‚ะพั€ะธั

เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡, เจฏเฉ‚เจœเจผเจฐเจธ เจจเฉ‚เฉฐ เจ‰เจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจธเจฎเจพเจฐเจŸเจซเฉ‹เจจ 'เจคเฉ‡ เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจกเจพเจŸเจพ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ ADS-B (เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจจเจฟเจฐเจญเจฐ เจจเจฟเจ—เจฐเจพเจจเฉ€-เจชเฉเจฐเจธเจพเจฐเจฃ) เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจนเฉ€ เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจ•เฉ‡เจ‚เจฆเจฐ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ - เจ‡เจธเจฆเจพ เจชเจ›เจพเจฃเจ•เจฐเจคเจพ, เจจเจฟเจฐเจฆเฉ‡เจธเจผเจ•, เจฆเจฟเจธเจผเจพ, เจ—เจคเฉ€, เจ‰เจšเจพเจˆ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจกเฉ‡เจŸเจพ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจชเจนเจฟเจฒเจพเจ‚, เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจ†เจ—เจฎเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจกเจฟเจธเจชเฉˆเจšเจฐ เจธเจฟเจฐเจซ เจฐเจพเจกเจพเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเจฟเฉฐเจฆเฉ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเจพ เจธเฉ€. เจ‡เจน เจนเฉเจฃ เจ•เจพเจซเจผเฉ€ เจจเจนเฉ€เจ‚ เจธเฉ€ เจœเจฆเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจœเจนเจพเจœเจผ เจธเจจ.

เจคเจ•เจจเฉ€เจ•เฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, ADS-B เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ 'เจคเฉ‡ เจ‡เฉฑเจ• เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจธเจฎเฉ‡เจ‚-เจธเจฎเฉ‡เจ‚ 'เจคเฉ‡ 1090 MHz เจฆเฉ€ เจ•เจพเจซเจผเฉ€ เจ‰เฉฑเจš เจซเฉเจฐเฉ€เจ•เฉเจเจ‚เจธเฉ€ 'เจคเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ (เจนเฉ‹เจฐ เจฎเฉ‹เจก เจนเจจ, เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‰เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฐเจจเฉ€ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจจเจนเฉ€เจ‚ เจฐเฉฑเจ–เจฆเฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เฉ‹เจ†เจฐเจกเฉ€เจจเฉ‡เจŸ เจ‡เฉฑเจฅเฉ‡ เจนเฉ€ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ)เฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจนเจตเจพเจˆ เจ…เฉฑเจกเฉ‡ 'เจคเฉ‡ เจ•เจฟเจคเฉ‡ เจจเจพ เจ•เจฟเจคเฉ‡ เจ‡เฉฑเจ• เจฐเจฟเจธเฉ€เจตเจฐ เจตเฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจธเจพเจกเฉ‡ เจฒเจˆ, เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจตเจœเฉ‹เจ‚, เจธเจพเจกเจพ เจ†เจชเจฃเจพ เจฐเจฟเจธเฉ€เจตเจฐ เจฆเจฟเจฒเจšเจธเจช เจนเฉˆ.

เจตเฉˆเจธเฉ‡, เจคเฉเจฒเจจเจพ เจ•เจฐเจจ เจฒเจˆ, เจชเจนเจฟเจฒเฉ€ เจ…เจœเจฟเจนเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€, เจเจ…เจฐเจจเจต เจฐเจพเจกเจพเจฐเจฌเจพเจ•เจธ, เจœเฉ‹ เจ†เจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€, 2007 เจตเจฟเฉฑเจš เจชเฉเจฐเจ—เจŸ เจนเฉ‹เจˆ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจ•เฉ€เจฎเจค เจฒเจ—เจญเจ— $900 เจนเฉˆ; เจจเฉˆเจŸเจตเจฐเจ• เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจ—เจพเจนเจ•เฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจฒ เจตเจฟเฉฑเจš $250 เจนเฉ‹เจฐ เจ–เจฐเจšเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจ‰เจจเฉเจนเจพเจ‚ เจชเจนเจฟเจฒเฉ‡ เจฐเฉ‚เจธเฉ€ เจฎเจพเจฒเจ•เจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเจฎเฉ€เจ–เจฟเจ†เจตเจพเจ‚ เจซเฉ‹เจฐเจฎ 'เจคเฉ‡ เจชเฉœเฉเจนเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจฐเฉ‡เจกเฉ€เจ“เจธเจ•เฉˆเจจเจฐ. เจนเฉเจฃ เจœเจฆเฉ‹เจ‚ เจ•เจฟ RTL-SDR เจฐเจฟเจธเฉ€เจตเจฐ เจตเจฟเจ†เจชเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉ‹ เจ—เจ เจนเจจ, เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจฏเฉฐเจคเจฐ $30 เจฒเจˆ เจ…เจธเฉˆเจ‚เจฌเจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ; เจ‡เจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเจนเจฟเจฒเจพ เจญเจพเจ—. เจ†เจ‰ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจคเฉ‡ เจšเฉฑเจฒเฉ€เจ - เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจธเจฟเจ—เจจเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจชเจนเจฟเจฒเจพเจ‚, เจธเจฟเจ—เจจเจฒ เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ. เจชเฉ‚เจฐเฉ‡ เจธเจฟเจ—เจจเจฒ เจฆเฉ€ เจฎเจฟเจ†เจฆ เจธเจฟเจฐเจซ 120 เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเฉˆเจ•เจฟเฉฐเจก เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ‡เจธเจฆเฉ‡ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ†เจฐเจพเจฎ เจจเจพเจฒ เจตเฉฑเจ– เจ•เจฐเจจ เจฒเจˆ, เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 5 MHz เจฆเฉ€ เจธเฉˆเจ‚เจชเจฒเจฟเฉฐเจ— เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ เจตเจพเจฒเจพ เจ‡เฉฑเจ• SDR เจฐเจฟเจธเฉ€เจตเจฐ เจซเจพเจ‡เจฆเฉ‡เจฎเฉฐเจฆ เจนเฉˆเฅค

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเจพเจจเฉ‚เฉฐ 5000000 เจจเจฎเฉ‚เจจเฉ‡/เจธเฉˆเจ•เฉฐเจก เจฆเฉ€ เจจเจฎเฉ‚เจจเจพ เจฆเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• WAV เจซเจพเจˆเจฒ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ; เจ…เจœเจฟเจนเฉ€ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจฆเฉ‡ 30 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจฆเจพ "เจตเจœเจผเจจ" เจฒเจ—เจญเจ— 500MB เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ• เจฎเฉ€เจกเฉ€เจ† เจชเจฒเฉ‡เจ…เจฐ เจจเจพเจฒ เจ‡เจธ เจจเฉ‚เฉฐ เจธเฉเจฃเจจเจพ, เจฌเฉ‡เจธเจผเฉฑเจ•, เจฌเฉ‡เจ•เจพเจฐ เจนเฉˆ - เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ†เจตเจพเจœเจผ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ• เจธเจฟเฉฑเจงเจพ เจกเจฟเจœเฉ€เจŸเจพเจˆเจœเจผเจก เจฐเฉ‡เจกเฉ€เจ“ เจธเจฟเจ—เจจเจฒ - เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเฉˆ เจ•เจฟ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจฐเฉ‡เจกเฉ€เจ“ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจ…เจธเฉ€เจ‚ เจชเจพเจˆเจฅเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ–เฉ‹เจฒเฉเจนเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจœเฉ‹ เจฒเฉ‹เจ• เจ†เจชเจฃเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจชเฉเจฐเจฏเฉ‹เจ— เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจ‰เจน เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ เจฒเจฟเฉฐเจ•.

เจ†เจ‰ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจกเจพเจ‰เจจเจฒเฉ‹เจก เจ•เจฐเฉ€เจ เจ…เจคเฉ‡ เจตเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ…เฉฐเจฆเจฐ เจ•เฉ€ เจนเฉˆเฅค

from scipy.io import wavfile
import matplotlib.pyplot as plt
import numpy as np

fs, data = wavfile.read("adsb_20190311_191728Z_1090000kHz_RF.wav")
data = data.astype(float)
I, Q = data[:, 0], data[:, 1]
A = np.sqrt(I*I + Q*Q)

plt.plot(A)
plt.show()

เจจเจคเฉ€เจœเจพ: เจ…เจธเฉ€เจ‚ เจฌเฉˆเจ•เจ—เฉเจฐเจพเจ‰เจ‚เจก เจธเจผเฉ‹เจฐ เจฆเฉ‡ เจตเจฟเจฐเฉเฉฑเจง เจธเจชเฉฑเจธเจผเจŸ "เจชเจฒเจธ" เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚เฅค

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจนเจฐเฉ‡เจ• "เจชเจฒเจธ" เจ‡เฉฑเจ• เจธเจฟเจ—เจจเจฒ เจนเฉˆ, เจœเจฟเจธเจฆเฉ€ เจฌเจฃเจคเจฐ เจธเจชเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ—เฉเจฐเจพเจซ 'เจคเฉ‡ เจฐเฉˆเจœเจผเฉ‹เจฒเจฟเจŠเจธเจผเจจ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจ‚เจฆเฉ‡ เจนเฉ‹.

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจคเจธเจตเฉ€เจฐ เจ‰เจชเจฐเฉ‹เจ•เจค เจตเจฐเจฃเจจ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจธเจผเจฌเจฆเจพเจ‚ เจจเจพเจฒ เจ•เจพเจซเจผเฉ€ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ€ เจนเฉˆ. เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจกเฉ€เจ•เฉ‹เจกเจฟเฉฐเจ—

เจชเจนเจฟเจฒเจพเจ‚, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฌเจฟเฉฑเจŸ เจธเจŸเฉเจฐเฉ€เจฎ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ. เจธเจฟเจ—เจจเจฒ เจ–เฉเจฆ เจฎเจพเจจเจšเฉˆเจธเจŸเจฐ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจเจจเจ•เฉ‹เจก เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจจเจฟเจฌเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจชเฉฑเจงเจฐ เจฆเฉ‡ เจ…เฉฐเจคเจฐ เจคเฉ‹เจ‚ เจ…เจธเจฒ "0" เจ…เจคเฉ‡ "1" เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆเฅค

    bits_str = ""
    for p in range(8):
        pos = start_data + bit_len*p
        p1, p2 = A[pos: pos + bit_len/2], A[pos + bit_len/2: pos + bit_len]
        avg1, avg2 = np.average(p1), np.average(p2)
        if avg1 < avg2:
            bits_str += "0"
        elif avg1 > avg2:
            bits_str += "1"

เจธเจฟเจ—เจจเจฒ เจฆเฉ€ เจฌเจฃเจคเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉˆ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจ†เจ‰ เจ–เฉ‡เจคเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจตเฉ‡เจ–เฉ€เจ.

DF (เจกเจพเจŠเจจเจฒเจฟเฉฐเจ• เจซเจพเจฐเจฎเฉˆเจŸ, 5 เจฌเจฟเฉฑเจŸ) - เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจ•เจฟเจธเจฎ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ•เจˆ เจ•เจฟเจธเจฎเจพเจ‚ เจนเจจ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ
(เจธเจพเจฐเจฃเฉ€ เจธเจฐเฉ‹เจค)

เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซ DF17 เจŸเจพเจˆเจช เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚, เจ•เจฟเจ‰เจ‚เจ•เจฟ... เจ‡เจน เจ‰เจน เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจฆเฉ‡ เจ•เฉ‹เจ†เจฐเจกเฉ€เจจเฉ‡เจŸ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ.

เจ†เจˆเจธเฉ€เจเจ“ (24 เจฌเจฟเฉฑเจŸ) - เจนเจตเจพเจˆ เจœเจนเจพเจœเจผ เจฆเจพ เจ…เฉฐเจคเจฐเจฐเจพเจธเจผเจŸเจฐเฉ€ เจตเจฟเจฒเฉฑเจ–เจฃ เจ•เฉ‹เจกเฅค เจคเฉเจธเฉ€เจ‚ เจœเจนเจพเจœเจผ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจ•เฉ‹เจก เจฆเฉเจ†เจฐเจพ เจšเฉˆเฉฑเจ• เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ†เจจเจฒเจพเจˆเจจ (เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจฒเฉ‡เจ–เจ• เจจเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจเจพ เจฌเฉฐเจฆ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆ)เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ•เฉ‹เจก 3c5ee2 เจฒเจˆ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉˆ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเฉ‹: เจตเจฟเฉฑเจš เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจŸเจฟเฉฑเจชเจฃเฉ€ ICAO เจ•เฉ‹เจก เจฆเจพ เจตเฉ‡เจฐเจตเจพ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจคเจพเจฐ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ; เจฎเฉˆเจ‚ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฃ เจตเจพเจฒเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเฉ‡ เจนเจจเฅค

เจกเจพเจŸเจพ (56 เจœเจพเจ‚ 112 เจฌเจฟเฉฑเจŸ) - เจ…เจธเจฒ เจกเฉ‡เจŸเจพ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจกเฉ€เจ•เฉ‹เจก เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ 5 เจฌเจฟเฉฑเจŸ เจ–เฉ‡เจคเจฐ เจนเจจ เจ•เจฟเจธเจฎ เจ•เฉ‹เจก, เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจ‰เจช-เจ•เจฟเจธเจฎ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ (DF เจจเจพเจฒ เจ‰เจฒเจเจฃ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเจพ)เฅค เจ‡เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจฟเจธเจฎเจพเจ‚ เจนเจจ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ
(เจธเจพเจฐเจฃเฉ€ เจธเจฐเฉ‹เจค)

เจ†เจ‰ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ•เฉเจ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจฆเฉ‡เจ–เฉ€เจเฅค

เจนเจตเจพเจˆ เจœเจนเจพเจœเจผ เจฆเฉ€ เจชเจ›เจพเจฃ

เจฌเจพเจˆเจจเจฐเฉ€ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‰เจฆเจพเจนเจฐเจจ:

00100011000101010111000111110111110001111000

เจกเจพเจŸเจพ เจ–เฉ‡เจคเจฐ:

+------+------+------+------+------+------+------+------+------+------+
| TC,5 | EC,3 | C1,6 | C2,6 | C3,6 | C4,6 | C5,6 | C6,6 | C7,6 | C8,6 |
+------+------+------+------+------+------+------+------+------+------+

TC = 00100b = 4, เจนเจฐเฉ‡เจ• เจ…เฉฑเจ–เจฐ C1-C8 เจตเจฟเฉฑเจš เจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เฉ‹เจก เจนเฉเฉฐเจฆเฉ‡ เจนเจจ:
#ABCDEFGHIJKLMNOPQRSTUVWXYZ####_#################0123456789####

เจธเจคเจฐ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉ‹เจก เจ•เจฐเจ•เฉ‡, เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจ•เฉ‹เจก: EWG7184 เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆ

symbols = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789######"
code_str = ""
for p in range(8):
     c = int(bits_str[8 + 6*p:8 + 6*(p + 1)], 2)
     code_str += symbols[c]
print("Aircraft Identification:", code_str.replace('#', ''))

เจเจ…เจฐเจฌเฉ‹เจฐเจจ เจธเจฅเจฟเจคเฉ€

เจœเฉ‡ เจจเจพเจฎ เจธเจงเจพเจฐเจจ เจนเฉˆ, เจคเจพเจ‚ เจงเฉเจฐเฉ‡ เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเจจเฅค เจ‰เจน 2, เจธเจฎ เจ…เจคเฉ‡ เจ…เจœเฉ€เจฌ เจซเจฐเฉ‡เจฎเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจซเฉ€เจฒเจก เจ•เฉ‹เจก TC = 01011b = 11เฅค

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ

เจธเจฎ เจ…เจคเฉ‡ เจ…เจœเฉ€เจฌ เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

01011 000 000101110110 00 10111000111001000 10000110101111001
01011 000 000110010000 01 10010011110000110 10000011110001000

เจ•เฉ‹เจ†เจฐเจกเฉ€เจจเฉ‡เจŸเจธ เจฆเฉ€ เจ—เจฃเจจเจพ เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเฉเจธเจผเจ•เจฒ เจซเจพเจฐเจฎเฉ‚เจฒเฉ‡ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ
(เจธเจฐเฉ‹เจค)

เจฎเฉˆเจ‚ เจ‡เฉฑเจ• GIS เจฎเจพเจนเจฐ เจจเจนเฉ€เจ‚ เจนเจพเจ‚, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจชเจคเจพ เจ•เจฟ เจ‡เจน เจ•เจฟเฉฑเจฅเฉ‹เจ‚ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ•เฉŒเจฃ เจœเจพเจฃเจฆเจพ เจนเฉˆ, เจŸเจฟเฉฑเจชเจฃเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹.

เจ‰เจšเจพเจˆ เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ - เจ–เจพเจธ เจฌเจฟเฉฑเจŸ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจฟเจ†เจ‚, เจ‡เจธ เจจเฉ‚เฉฐ 25 เจœเจพเจ‚ 100 เจซเฉเฉฑเจŸ เจฆเฉ‡ เจ—เฉเจฃเจ• เจตเจœเฉ‹เจ‚ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจเจ…เจฐเจฌเฉ‹เจฐเจจ เจตเฉ‡เจฒเฉ‹เจธเจฟเจŸเฉ€

TC=19 เจตเจพเจฒเจพ เจชเฉˆเจ•เฉ‡เจœเฅค เจ‡เฉฑเจฅเฉ‡ เจฆเจฟเจฒเจšเจธเจช เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจธเจชเฉ€เจก เจœเจพเจ‚ เจคเจพเจ‚ เจธเจŸเฉ€เจ• เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ, เจœเจผเจฎเฉ€เจจ (เจœเจผเจฎเฉ€เจจ เจฆเฉ€ เจ—เจคเฉ€) เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€, เจœเจพเจ‚ เจเจ…เจฐเจฌเฉ‹เจฐเจจ, เจ‡เฉฑเจ• เจเจ…เจฐเจ•เฉเจฐเจพเจซเจŸ เจธเฉˆเจ‚เจธเจฐ (เจเจ…เจฐเจธเจชเฉ€เจก) เจฆเฉเจ†เจฐเจพ เจฎเจพเจชเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

Flightradar24 - เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ? เจญเจพเจ— 2, ADS-B เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ
(เจธเจฐเฉ‹เจค)

เจธเจฟเฉฑเจŸเจพ

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, ADS-B เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจ‡เฉฑเจ• เจฆเจฟเจฒเจšเจธเจช เจธเจนเจฟเจœเฉ€เจต เจฌเจฃ เจ—เจˆ เจนเฉˆ, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐ เจจเจพ เจธเจฟเจฐเจซเจผ เจชเฉ‡เจธเจผเฉ‡เจตเจฐเจพเจ‚ เจฒเจˆ, เจธเจ—เฉ‹เจ‚ เจ†เจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจตเฉ€ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉเฉฐเจฆเจพ เจนเฉˆ. เจชเจฐ เจฌเฉ‡เจธเจผเฉฑเจ•, เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเฉเฉฑเจ– เจญเฉ‚เจฎเจฟเจ•เจพ เจกเจฟเจœเฉ€เจŸเจฒ เจเจธเจกเฉ€เจ†เจฐ เจฐเจฟเจธเฉ€เจตเจฐเจพเจ‚ เจฆเฉ€ เจธเจธเจคเฉ€ เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจฆเฉเจ†เจฐเจพ เจ–เฉ‡เจกเฉ€ เจ—เจˆ เจธเฉ€, เจœเฉ‹ เจ•เจฟ เจกเจฟเจตเจพเจˆเจธ เจจเฉ‚เฉฐ เจธเจผเจพเจฌเจฆเจฟเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ—เฉ€เจ—เจพเจนเจฐเจŸเจœเจผ เจคเฉ‹เจ‚ เจ‰เฉฑเจชเจฐ เจฆเฉ€ เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ เจฆเฉ‡ เจจเจพเจฒ เจธเจฟเจ—เจจเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ "เจชเฉˆเจจเจฟเจธ เจฒเจˆ."

เจธเจŸเฉˆเจ‚เจกเจฐเจก เจตเจฟเฉฑเจš เจนเฉ€, เจฌเฉ‡เจธเจผเจ•, เจนเฉ‹เจฐ เจตเฉ€ เจฌเจนเฉเจค เจ•เฉเจ เจนเฉˆ. เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฃ เจตเจพเจฒเฉ‡ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ PDF เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจจ เจ†เจˆเจธเฉ€เจเจ“ เจœเจพเจ‚ เจ‰เฉฑเจชเจฐ เจฆเฉฑเจธเฉ‡ เจ—เจ เจ‡เฉฑเจ• 'เจคเฉ‡ เจœเจพเจ“ เจตเฉˆเจฌเจธเจพเจˆเจŸ.

เจ‡เจน เจ…เจธเฉฐเจญเจต เจนเฉˆ เจ•เจฟ เจ‰เจชเจฐเฉ‹เจ•เจค เจธเจพเจฐเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‹เจ•เจพเจ‚ เจฒเจˆ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉ‹เจฃเจ—เฉ‡, เจชเจฐ เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจ†เจฎ เจตเจฟเจšเจพเจฐ เจ•เจฟ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ, เจฐเจนเจฟเฉฐเจฆเจพ เจนเฉˆ.

เจตเฉˆเจธเฉ‡, เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจคเจฟเจ†เจฐ เจกเฉ€เจ•เฉ‹เจกเจฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ, เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡. เจ…เจคเฉ‡ SDR เจฐเจฟเจธเฉ€เจตเจฐเจพเจ‚ เจฆเฉ‡ เจฎเจพเจฒเจ• เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ ADS-B เจกเฉ€เจ•เฉ‹เจกเจฐ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจฒเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ เจชเฉฐเจจเฉ‡ เจคเฉ‹เจ‚, เจ‡เจธ เจตเจฟเฉฑเจš เจนเฉ‹เจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€ เจชเจนเจฟเจฒเจพ เจญเจพเจ—.

เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจตเจฐเจฃเจฟเจค เจชเจพเจฐเจธเจฐ เจฆเจพ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ•เฉฑเจŸ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจน เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจ‰เจฆเจพเจนเจฐเจจ เจนเฉˆ เจœเฉ‹ เจ‰เจคเจชเจพเจฆเจจ เจฆเจพ เจฆเจฟเจ–เจพเจตเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจ•เฉเจ เจšเฉ€เจœเจผเจพเจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ‰เฉฑเจชเจฐ เจฆเจฐเจœ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค
เจธเจฐเฉ‹เจค เจ•เฉ‹เจก (เจชเจพเจˆเจฅเจจ)

from __future__ import print_function
from scipy.io import wavfile
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
import math
import sys
def parse_message(data, start, bit_len):
max_len = bit_len*128
A = data[start:start + max_len]
A = signal.resample(A, 10*max_len)
bits = np.zeros(10*max_len)
bit_len *= 10
start_data = bit_len*8
# Parse first 8 bits
bits_str = ""
for p in range(8):
pos = start_data + bit_len*p
p1, p2 = A[pos: pos + bit_len/2], A[pos + bit_len/2: pos + bit_len]
avg1, avg2 = np.average(p1), np.average(p2)
if avg1 < avg2:
bits_str += "0"
elif avg1 > avg2:
bits_str += "1"
df = int(bits_str[0:5], 2)
# Aircraft address (db - https://junzis.com/adb/?q=3b1c5c )
bits_str = ""
for p in range(8, 32):
pos = start_data + bit_len * p
p1, p2 = A[pos: pos + bit_len / 2], A[pos + bit_len / 2: pos + bit_len]
avg1, avg2 = np.average(p1), np.average(p2)
if avg1 < avg2:
bits_str += "0"
elif avg1 > avg2:
bits_str += "1"
# print "Aircraft address:", bits_str, hex(int(bits_str, 2))
address = hex(int(bits_str, 2))
# Filter specific aircraft (optional)
# if address != "0x3c5ee2":
#    return
if df == 16 or df == 17 or df == 18 or df == 19 or df == 20 or df == 21:
# print "Pos:", start, "DF:", msg_type
# Data (56bit)
bits_str = ""
for p in range(32, 88):
pos = start_data + bit_len*p
p1, p2 = A[pos: pos + bit_len/2], A[pos + bit_len/2: pos + bit_len]
avg1, avg2 = np.average(p1), np.average(p2)
if avg1 < avg2:
bits_str += "0"
# bits[pos + bit_len / 2] = 50
elif avg1 > avg2:
bits_str += "1"
# http://www.lll.lu/~edward/edward/adsb/DecodingADSBposition.html
# print "Data:"
# print bits_str[:8], bits_str[8:20],  bits_str[20:22], bits_str[22:22+17], bits_str[39:39+17]
# Type Code:
tc, ec = int(bits_str[:5], 2), int(bits_str[5:8], 2)
# print("DF:", df, "TC:", tc)
# 1 - 4  Aircraft identification
# 5 - 8  Surface position
# 9 - 18  Airborne position (w/ Baro Altitude)
# 19  Airborne velocities
if tc >= 1 and tc <= 4: # and (df == 17 or df == 18):
print("Aircraft address:", address)
print("Data:")
print(bits_str[:8], bits_str[8:14],  bits_str[14:20], bits_str[20:26], bits_str[26:32], bits_str[32:38], bits_str[38:44])
symbols = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ#####_###############0123456789######"
code_str = ""
for p in range(8):
c = int(bits_str[8 + 6*p:8 + 6*(p + 1)], 2)
code_str += symbols[c]
print("Aircraft Identification:", code_str.replace('#', ''))
print()
if tc == 11:
print("Aircraft address:", address)
print("Data: (11)")
print(bits_str[:8], bits_str[8:20],  bits_str[20:22], bits_str[22:22+17], bits_str[39:39+17])
# Bit 22 contains the F flag which indicates which CPR format is used (odd or even)
# First frame has F flag = 0 so is even and the second frame has F flag = 1 so odd
# f = bits_str[21:22]
# print("F:", int(f, 2))
# Altitude
alt1b = bits_str[8:20]
if alt1b[-5] == '1':
bits = alt1b[:-5] + alt1b[-4:]
n = int(bits, 2)
alt_ft = n*25 - 1000
print("Alt (ft)", alt_ft)
# lat_dec = int(bits_str[22:22+17], 2)
# lon_dec = int(bits_str[39:39+17], 2)
# print("Lat/Lon:", lat_dec, lon_dec)
# http://airmetar.main.jp/radio/ADS-B%20Decoding%20Guide.pdf
print()
if tc == 19:
print("Aircraft address:", address)
print("Data:")
# print(bits_str)
print(bits_str[:5], bits_str[5:8], bits_str[8:10], bits_str[10:13], bits_str[13] ,bits_str[14:24], bits_str[24], bits_str[25:35], bits_str[35:36], bits_str[36:65])
subtype = int(bits_str[5:8], 2)
# https://mode-s.org/decode/adsb/airborne-velocity.html
spd, hdg, rocd = -1, -1, -1
if subtype == 1 or subtype == 2:
print("Velocity Subtype 1: Ground speed")
v_ew_sign = int(bits_str[13], 2)
v_ew = int(bits_str[14:24], 2) - 1       # east-west velocity
v_ns_sign = int(bits_str[24], 2)
v_ns = int(bits_str[25:35], 2) - 1       # north-south velocity
v_we = -1*v_ew if v_ew_sign else v_ew
v_sn = -1*v_ns if v_ns_sign else v_ns
spd = math.sqrt(v_sn*v_sn + v_we*v_we)  # unit in kts
hdg = math.atan2(v_we, v_sn)
hdg = math.degrees(hdg)                 # convert to degrees
hdg = hdg if hdg >= 0 else hdg + 360    # no negative val
if subtype == 3:
print("Subtype Subtype 3: Airspeed")
hdg = int(bits_str[14:24], 2)/1024.0*360.0
spd = int(bits_str[25:35], 2)
vr_sign = int(bits_str[36], 2)
vr = int(bits_str[36:45], 2)
rocd = -1*vr if vr_sign else vr         # rate of climb/descend
print("Speed (kts):", spd, "Rate:", rocd, "Heading:", hdg)
print()
# print()
def calc_coordinates():
def _cprN(lat, is_odd):
nl = _cprNL(lat) - is_odd
return nl if nl > 1 else 1
def _cprNL(lat):
try:
nz = 15
a = 1 - math.cos(math.pi / (2 * nz))
b = math.cos(math.pi / 180.0 * abs(lat)) ** 2
nl = 2 * math.pi / (math.acos(1 - a/b))
return int(math.floor(nl))
except:
# happens when latitude is +/-90 degree
return 1
def floor_(x):
return int(math.floor(x))
lat1b, lon1b, alt1b = "10111000111010011", "10000110111111000", "000101111001"
lat2b, lon2b, alt2b = "10010011101011100", "10000011000011011", "000101110111"
lat1, lon1, alt1 = int(lat1b, 2), int(lon1b, 2), int(alt1b, 2)
lat2, lon2, alt2 = int(lat2b, 2), int(lon2b, 2), int(alt2b, 2)
# 131072 is 2^17, since CPR lat and lon are 17 bits each
cprlat_even, cprlon_even = lat1/131072.0, lon1/131072.0
cprlat_odd, cprlon_odd = lat2/131072.0, lon2/131072.0
print(cprlat_even, cprlon_even)
j = floor_(59*cprlat_even - 60*cprlat_odd)
print(j)
air_d_lat_even = 360.0 / 60
air_d_lat_odd = 360.0 / 59
# Lat
lat_even = float(air_d_lat_even * (j % 60 + cprlat_even))
lat_odd = float(air_d_lat_odd * (j % 59 + cprlat_odd))
if lat_even >= 270:
lat_even = lat_even - 360
if lat_odd >= 270:
lat_odd = lat_odd - 360
# Lon
ni = _cprN(lat_even, 0)
m = floor_(cprlon_even * (_cprNL(lat_even)-1) - cprlon_odd * _cprNL(lat_even) + 0.5)
lon = (360.0 / ni) * (m % ni + cprlon_even)
print("Lat", lat_even, "Lon", lon)
# Altitude
# Q-bit (bit 48) indicates whether the altitude is encoded in multiples of 25 or 100 ft (0: 100 ft, 1: 25 ft)
# The value can represent altitudes from -1000 to +50175 ft.
if alt1b[-5] == '1':
bits = alt1b[:-5] + alt1b[-4:]
n = int(bits, 2)
alt_ft = n*25 - 1000
print("Alt (ft)", alt_ft)
fs, data = wavfile.read("adsb_20190311_191728Z_1090000kHz_RF.wav")
T = 1/fs
print("Sample rate %f MS/s" % (fs / 1e6))
print("Cnt samples %d" % len(data))
print("Duration: %f s" % (T * len(data)))
data = data.astype(float)
cnt = data.shape[0]
# Processing only part on file (faster):
# cnt = 10000000
# data = data[:cnt]
print("Processing I/Q...")
I, Q = data[:, 0], data[:, 1]
A = np.sqrt(I*I + Q*Q)
bits = np.zeros(cnt)
# To see scope without any processing, uncomment
# plt.plot(A)
# plt.show()
# sys.exit(0)
print("Extracting signals...")
pos = 0
avg = 200
msg_start = 0
# Find beginning of each signal
while pos < cnt - 16*1024:
# P1 - message start
while pos < cnt - 16*1024:
if A[pos] < avg and A[pos+1] > avg and pos - msg_start > 1000:
msg_start = pos
bits[pos] = 100
pos += 4
break
pos += 1
start1, start2, start3, start4 = msg_start, 0, 0, 0
# P2
while pos < cnt - 16*1024:
if A[pos] < avg and A[pos+1] > avg:
start2 = pos
bits[pos] = 90
pos += 1
break
pos += 1
# P3
while pos < cnt - 16*1024:
if A[pos] < avg and A[pos+1] > avg:
start3 = pos
bits[pos] = 80
pos += 1
break
pos += 1
# P4
while pos < cnt - 16*1024:
if A[pos] < avg and A[pos+1] > avg:
start4 = pos
bits[pos] = 70
pos += 1
break
pos += 1
sig_diff = start4 - start1
if 20 < sig_diff < 25:
bits[msg_start] = 500
bit_len = int((start4 - start1) / 4.5)
# print(pos, start1, start4, ' - ', bit_len)
# start = start1 + 8*bit_len
parse_message(A, msg_start, bit_len)
pos += 450
# For debugging: check signal start
# plt.plot(A)
# plt.plot(bits)
# plt.show()

เจฎเฉˆเจจเฉ‚เฉฐ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ•เจฟ เจ•เจฟเจธเฉ‡ เจจเฉ‚เฉฐ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจธเฉ€, เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹