Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ แƒฐแƒแƒ‘แƒ . Flightradar24-แƒ˜แƒก แƒฃแƒคแƒแƒกแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒ—, แƒแƒšแƒ‘แƒแƒ—, แƒงแƒ•แƒ”แƒšแƒแƒ›, แƒ•แƒ˜แƒœแƒช แƒแƒ“แƒ”แƒกแƒ›แƒ” แƒจแƒ”แƒฎแƒ•แƒ”แƒ“แƒ แƒ˜แƒ แƒแƒœ แƒ’แƒแƒฃแƒจแƒ•แƒ แƒœแƒแƒ—แƒ”แƒกแƒแƒ•แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒ”แƒ‘แƒ˜ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒจแƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ–แƒ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒ˜แƒก แƒ แƒ”แƒแƒšแƒฃแƒ  แƒ“แƒ แƒแƒจแƒ˜ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

ะ’ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒแƒœแƒšแƒแƒ˜แƒœ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒ แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒ“แƒ แƒ’แƒแƒ•แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ—, แƒ—แƒฃ แƒ แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒแƒ›แƒ“แƒ” แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ’แƒแƒ•แƒจแƒ˜แƒคแƒ แƒแƒ•แƒ— แƒ›แƒแƒ— Python-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

Story

แƒชแƒฎแƒแƒ“แƒ˜แƒ, แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒœแƒแƒฎแƒแƒœ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ— แƒกแƒ›แƒแƒ แƒขแƒคแƒแƒœแƒ”แƒ‘แƒ–แƒ”. แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ ADS-B (Automatic dependent surveillance-broadcast) แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒฐแƒแƒ”แƒ แƒ แƒฎแƒแƒ›แƒแƒšแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒชแƒ”แƒœแƒขแƒ แƒแƒ›แƒ“แƒ” แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ“แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“ - แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ™แƒแƒแƒ แƒ“แƒ˜แƒœแƒแƒขแƒ”แƒ‘แƒ˜, แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ, แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”, แƒกแƒ˜แƒ›แƒแƒฆแƒšแƒ” แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒแƒ“แƒ แƒ”, แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ•แƒšแƒแƒ›แƒ“แƒ”, แƒ“แƒ˜แƒกแƒžแƒ”แƒขแƒฉแƒ”แƒ แƒก แƒจแƒ”แƒ”แƒซแƒšแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒœแƒแƒฎแƒ•แƒ แƒ แƒแƒ“แƒแƒ แƒ–แƒ”. แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒแƒฆแƒแƒ  แƒ˜แƒงแƒ, แƒ แƒแƒชแƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜ แƒ˜แƒงแƒ.

แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒแƒ“, ADS-B แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒชแƒ”แƒ›แƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒ— 1090 MHz (แƒแƒ แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ—, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ™แƒแƒแƒ แƒ“แƒ˜แƒœแƒแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฅ แƒ’แƒแƒ“แƒแƒ˜แƒชแƒ”แƒ›แƒ). แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ’แƒแƒ“แƒแƒ›แƒชแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒกแƒแƒ“แƒฆแƒแƒช แƒแƒ”แƒ แƒแƒžแƒแƒ แƒขแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ˜.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ Airnav Radarbox, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, 2007 แƒฌแƒ”แƒšแƒก แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ“แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 900 แƒ“แƒแƒšแƒแƒ แƒ˜ แƒฆแƒ˜แƒ แƒ“แƒ; แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ แƒฌแƒ”แƒšแƒ˜แƒฌแƒแƒ“แƒจแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• 250 แƒ“แƒแƒšแƒแƒ แƒ˜ แƒฆแƒ˜แƒ แƒ“แƒ.

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ แƒฃแƒกแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒคแƒแƒ แƒฃแƒ›แƒ–แƒ” แƒ แƒแƒ“แƒ˜แƒแƒกแƒ™แƒแƒœแƒ”แƒ แƒ˜. แƒแƒฎแƒšแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช RTL-SDR แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒคแƒแƒ แƒ—แƒแƒ“ แƒ’แƒแƒฎแƒ“แƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜, แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒแƒฌแƒงแƒแƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ 30 แƒ“แƒแƒšแƒแƒ แƒแƒ“; แƒ›แƒ”แƒขแƒ˜ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ˜แƒงแƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜. แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ—แƒแƒ•แƒแƒ“ แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ–แƒ” - แƒ•แƒœแƒแƒฎแƒแƒ— แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก.

แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒฉแƒแƒฌแƒ”แƒ แƒ. แƒ›แƒ—แƒ”แƒš แƒกแƒ˜แƒ’แƒœแƒแƒšแƒก แƒแƒฅแƒ•แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ 120 แƒ›แƒ˜แƒ™แƒ แƒแƒฌแƒแƒ›แƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ›แƒคแƒแƒ แƒขแƒฃแƒšแƒแƒ“ แƒ“แƒแƒจแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜แƒ SDR แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ”แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 5 MHz.

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— WAV แƒคแƒแƒ˜แƒšแƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒ— 5000000 แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜/แƒฌแƒ›; แƒแƒกแƒ”แƒ—แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก 30 แƒฌแƒแƒ›แƒ˜ "แƒ˜แƒฌแƒแƒœแƒ˜แƒก" แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 500 แƒ›แƒ‘. แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ แƒ›แƒ”แƒ“แƒ˜แƒ แƒคแƒšแƒ”แƒ˜แƒ”แƒ แƒ˜แƒ—, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฃแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ - แƒคแƒแƒ˜แƒšแƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒฎแƒ›แƒแƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒ แƒแƒ“แƒ˜แƒ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒก - แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒแƒกแƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Software Defined Radio.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒฎแƒกแƒœแƒ˜แƒ— แƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ— แƒคแƒแƒ˜แƒšแƒก Python-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒ—, แƒ•แƒ˜แƒกแƒแƒช แƒกแƒฃแƒ แƒก แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ—แƒแƒ•แƒ–แƒ”, แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒแƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ ะฟะพ ััั‹ะปะบะต.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒ›แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ— แƒ แƒ แƒแƒ แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—.

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 (Downlink Format, 5 bit) - แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒขแƒ˜แƒžแƒก. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒ˜แƒžแƒ˜:

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜
(แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒฌแƒงแƒแƒ แƒ)

แƒฉแƒ•แƒ”แƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒขแƒ˜แƒžแƒ˜ DF17 แƒ’แƒ•แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ... แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒ”แƒก แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒ™แƒแƒแƒ แƒ“แƒ˜แƒœแƒแƒขแƒ”แƒ‘แƒก.

ICAO (24 แƒ‘แƒ˜แƒขแƒ˜) - แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒกแƒแƒ”แƒ แƒ—แƒแƒจแƒแƒ แƒ˜แƒกแƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ— แƒแƒœแƒšแƒแƒ˜แƒœ (แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒแƒ•แƒขแƒแƒ แƒ›แƒ แƒจแƒ”แƒฌแƒงแƒ•แƒ˜แƒขแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ›แƒแƒ˜แƒœแƒช แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜แƒ). แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ™แƒแƒ“แƒ˜ 3c5ee2 แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ:

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ: in แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒแƒ–แƒ” ICAO แƒ™แƒแƒ“แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“, แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒก แƒ•แƒฃแƒ แƒฉแƒ”แƒ• แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒœ แƒ˜แƒ’แƒ˜.

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ (56 แƒแƒœ 112 แƒ‘แƒ˜แƒขแƒ˜) - แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒจแƒ˜แƒคแƒ แƒแƒ•แƒ—. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ 5 แƒ‘แƒ˜แƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ แƒแƒ™แƒ แƒ˜แƒคแƒ”แƒ— แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฅแƒ•แƒ”แƒขแƒ˜แƒžแƒก (แƒแƒ  แƒฃแƒœแƒ“แƒ แƒแƒ’แƒ•แƒ”แƒ แƒ˜แƒแƒก DF-แƒ—แƒแƒœ). แƒแƒ› แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜แƒ:

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜
(แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒฌแƒงแƒแƒ แƒ)

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก.

แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ—:

00100 011 000101 010111 000111 110111 110001 111000

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜:

+------+------+------+------+------+------+------+------+------+------+
| 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#################XNUMX######

แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ˜แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ: 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-แƒ˜แƒ—. แƒแƒฅ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ–แƒฃแƒกแƒขแƒ˜, แƒ›แƒ˜แƒฌแƒแƒกแƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— (Ground Speed), แƒแƒœ แƒกแƒแƒฐแƒแƒ”แƒ แƒ แƒฎแƒแƒ›แƒแƒšแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒ–แƒแƒ›แƒ”แƒ‘แƒ แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜แƒก แƒกแƒ”แƒœแƒกแƒแƒ แƒ˜แƒ— (Airspeed). แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒ˜:

Flightradar24 - แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2, ADS-B แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜
(แƒฌแƒงแƒแƒ แƒ)

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, ADS-B แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ แƒ’แƒแƒฎแƒ“แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒกแƒ˜แƒ›แƒ‘แƒ˜แƒแƒ–แƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช. แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ›แƒแƒจแƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ แƒแƒšแƒ˜ แƒ˜แƒ—แƒแƒ›แƒแƒจแƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ SDR แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ˜แƒแƒคแƒ›แƒ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒแƒ›, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒก แƒกแƒ˜แƒขแƒงแƒ•แƒแƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ”แƒ‘แƒ˜ แƒ’แƒ˜แƒ’แƒแƒฐแƒ”แƒ แƒชแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒ— "แƒžแƒ”แƒœแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก".

แƒ—แƒแƒ•แƒแƒ“ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒจแƒ˜, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒ›แƒ”แƒขแƒ˜แƒ. แƒ›แƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒœ PDF แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” ICAO แƒแƒœ แƒ”แƒฌแƒ•แƒ˜แƒ”แƒ— แƒ–แƒ”แƒ›แƒแƒ— แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒก แƒœแƒแƒฎแƒ•แƒ.

แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ, แƒ แƒแƒ› แƒงแƒแƒ•แƒ”แƒšแƒ˜แƒ•แƒ” แƒ–แƒ”แƒ›แƒแƒ—แƒฅแƒ›แƒฃแƒšแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒก แƒ’แƒแƒ›แƒแƒแƒ“แƒ’แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ˜แƒœแƒช แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒ˜แƒ“แƒ”แƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒฉแƒ”แƒ‘แƒ.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜ แƒ›แƒ–แƒ แƒ“แƒ”แƒ™แƒแƒ“แƒ”แƒ แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒฅ. แƒฎแƒแƒšแƒ 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ