Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

แˆฐแˆ‹แˆ แˆ€แ‰ฅแˆญแข แˆแŠ“แˆแ‰ฃแ‰ตแˆ แ‰ขแ‹ซแŠ•แˆต แŠ แŠ•แ‹ต แŒŠแ‹œ แŠจแ‹˜แˆ˜แ‹ถแ‰ปแ‰ธแ‹ แ‹ˆแ‹ญแˆ แŠจแŒ“แ‹ฐแŠžแ‰ปแ‰ธแ‹ แŒ‹แˆญ แ‰ แŠ แ‹แˆฎแ•แˆ‹แŠ• แ‹จแ‰ฐแŒˆแŠ“แŠ™ แ‹ˆแ‹ญแˆ แ‹ซแ‹ฉ แˆฐแ‹Žแ‰ฝ แ‹จ Flightradar24 แŠ แŒˆแˆแŒแˆŽแ‰ตแŠ• แ‰ฐแŒ แ‰…แˆ˜แ‹‹แˆแข แ‹ญแˆ… แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ‘แŠ• แŠ แ‰€แˆ›แˆ˜แŒฅ แ‰ แŠฅแ‹แАแ‰ฐแŠ› แŒŠแ‹œ แˆˆแˆ˜แŠจแ‰ณแ‰ฐแˆ แ‰ แŒฃแˆ แˆแ‰น แˆ˜แŠ•แŒˆแ‹ต แАแ‹.

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

ะ’ แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แŠญแแˆแข แ‹จแŠฅแŠ•แ‹ฐแ‹šแˆ… แŠ แ‹ญแАแ‰ต แ‹จแˆ˜แˆตแˆ˜แˆญ แˆ‹แ‹ญ แŠ แŒˆแˆแŒแˆŽแ‰ต แŠ แˆ แˆซแˆญ แˆ˜แˆญแˆ… แ‰ฐแŒˆแˆแŒฟแˆ. แŠ แˆแŠ• แ‹จแ‰ แˆˆแŒ  แŠฅแŠ•แˆ„แ‹ณแˆˆแŠ• แŠฅแŠ“ แŠจแŠ แ‹แˆฎแ•แˆ‹แŠ‘ แ‹ˆแ‹ฐ แˆ˜แ‰€แ‰ แ‹ซ แŒฃแ‰ขแ‹ซ แ‹จแˆšแ‰ฐแˆ‹แˆˆแˆแ‹แŠ• แŠฅแŠ“ แ‹จแˆšแ‰€แ‰ แˆˆแ‹แŠ• แˆ˜แˆจแŒƒ แˆˆแˆ›แ‹ˆแ‰… แŠฅแŠ“ แ’แ‰ฒแŠ•แŠ• แ‰ แˆ˜แŒ แ‰€แˆ แŠฅแˆซแˆณแ‰ฝแŠ•แŠ• แ‹ฒแŠฎแ‹ต แŠฅแŠ“แ‹ฐแˆญแŒ‹แˆˆแŠ•แข

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

แ‰ แŒแˆแŒฝ แˆˆแˆ›แ‹จแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‰ปแˆˆแ‹ แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ• แˆ˜แˆจแŒƒ แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ แ‰ แˆตแˆ›แˆญแ‰ต แˆตแˆแŠฎแ‰ปแ‰ธแ‹ แˆ‹แ‹ญ แŠฅแŠ•แ‹ฒแ‹ซแ‹ฉแ‰ต แŠฅแ‹จแ‰ฐแŒ‹แˆซ แŠ แ‹ญแ‹ฐแˆˆแˆแข แˆตแˆญแ‹“แ‰ฑ ADS-B (แˆซแˆต-แˆฐแˆญ แŒฅแŒˆแŠ› แŠญแ‰ตแ‰ตแˆ-แ‰ฅแˆฎแ‹ตแŠซแˆตแ‰ต) แ‰ฐแ‰ฅแˆŽ แ‹ญแŒ แˆซแˆ, แŠฅแŠ“ แˆตแˆˆ แŠ แ‹แˆฎแ•แˆ‹แŠ‘ แˆ˜แˆจแŒƒแŠ• แ‹ˆแ‹ฐ แˆ˜แ‰†แŒฃแŒ แˆชแ‹ซ แˆ›แŠฅแŠจแˆ แ‰ แˆซแˆต-แˆฐแˆญ แˆˆแˆ›แˆตแ‰ฐแˆ‹แˆˆแ แŒฅแ‰…แˆ แˆ‹แ‹ญ แ‹ญแ‹แˆ‹แˆ - แˆ˜แˆˆแ‹ซแ‹ แฃ แˆ˜แŒ‹แŒ แˆšแ‹ซแ‹Žแ‰ฝ แฃ แŠ แ‰…แŒฃแŒซ แฃ แแŒฅแАแ‰ต แฃ แŠจแแ‰ณ แŠฅแŠ“ แˆŒแˆŽแ‰ฝ แˆ˜แˆจแŒƒแ‹Žแ‰ฝ แ‹ญแ‰ฐแˆ‹แˆˆแ‹แˆ‰แข แŠจแ‹šแˆ… แ‰€แ‹ฐแˆ แŠฅแŠ•แ‹ฐแ‹šแˆ… แŠ แ‹ญแАแ‰ต แˆตแˆญแ‹“แ‰ถแ‰ฝ แŠจแˆ˜แˆแŒฃแ‰ฑ แ‰ แŠแ‰ต แˆ‹แŠชแ‹ แ‰ แˆซแ‹ณแˆญ แˆ‹แ‹ญ แŠ แŠ•แ‹ต แАแŒฅแ‰ฅ แ‰ฅแ‰ป แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ. แ‰ฅแ‹™ แŠ แ‹แˆฎแ•แˆ‹แŠ–แ‰ฝ แˆฒแŠ–แˆฉ แ‹ญแˆ… แ‰ แ‰‚ แŠ แˆแАแ‰ แˆจแˆแข

แ‰ แ‰ดแŠญแŠ’แŠซแ‹Š แˆแŠ”แ‰ณ แŠค.แ‹ฒ.แŠคแˆต-แ‰ข แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ• แŠ แˆตแ‰ฐแˆ‹แˆ‹แŠแŠ• แ‹ซแŠซแ‰ตแ‰ณแˆ แฃ แˆ˜แˆจแŒƒแŠ• แ‰ แ‹จแŒŠแ‹œแ‹ แ‰  1090 แˆœแŠธแˆญ แ‹ตแŒแŒแˆžแˆฝ (แˆŒแˆŽแ‰ฝ แˆแАแ‰ณแ‹Žแ‰ฝ แŠ แˆ‰ แฃ แŒแŠ• แˆˆแŠฅแŠ› แ‰ แŒฃแˆ แŠ แˆตแ‹ฐแˆณแ‰ฝ แŠ แ‹ญแ‹ฐแˆ‰แˆ แฃ แˆแŠญแŠ•แ‹ซแ‰ฑแˆ แˆ˜แŒ‹แŒ แˆšแ‹ซแ‹Žแ‰น แ‹จแˆšแ‰ฐแˆ‹แˆˆแ‰แ‰ต แŠฅแ‹šแˆ… แ‰ฅแ‰ป แАแ‹)แข แ‰ แŠฅแˆญแŒแŒฅ แŠจแˆ›แˆตแ‰ฐแˆ‹แˆˆแŠแ‹ซแ‹ แ‰ แ‰ฐแŒจแˆ›แˆช แ‰ แŠ แ‹แˆฎแ•แˆ‹แŠ• แˆ›แˆจแŠแ‹ซแ‹ แ‹แˆตแŒฅ แ‹จแˆ†แА แ‰ฆแ‰ณ แ‰ฐแ‰€แ‰ฃแ‹ญ แŠ แˆˆ, แАแŒˆแˆญ แŒแŠ• แˆˆแŠฅแŠ› แŠฅแŠ•แ‹ฐ แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ, แ‹จแˆซแˆณแ‰ฝแŠ• แˆ˜แ‰€แ‰ แ‹ซ แแˆ‹แŒŽแ‰ต แАแ‹.

แ‰ แАแŒˆแˆซแ‰ฝแŠ• แˆ‹แ‹ญแฃ แˆˆแˆ›แАแƒแ€แˆญแฃ แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แŠฅแŠ•แ‹ฒแˆ… แ‹“แ‹ญแАแ‰ฑ แˆตแˆญแ‹“แ‰ตแฃ แˆˆแˆ˜แ‹ฐแ‰ แŠ› แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ แ‹จแ‰ฐแАแ‹ฐแˆแ‹ Airnav Radarboxแฃ แ‰ 2007 แ‰ณแ‹จ แŠฅแŠ“ แ‹ˆแ‹ฐ 900 แ‹ถแˆ‹แˆญ แŒˆแ‹ฐแˆ› แ‹ซแˆตแ‹ˆแŒฃแˆแฃ แŠฅแŠ“ แ‰ แŒแˆแ‰ตแข 250$ แ‰ แ‹“แˆ˜แ‰ต แˆˆแŠ”แ‰ตแ‹ˆแˆญแŠญ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แ‹จแ‹ฐแŠ•แ‰ แŠแАแ‰ต แˆแ‹แŒˆแ‰ฃ แŠญแแ‹ซแข

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

แ‹จแŠฅแАแ‹šแ‹ซ แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹Žแ‰น แ‹จแˆฉแˆฒแ‹ซ แ‰ฃแˆˆแ‰คแ‰ถแ‰ฝ แŒแˆแŒˆแˆ›แ‹Žแ‰ฝ แ‰ แˆ˜แ‹ตแˆจแŠฉ แˆ‹แ‹ญ แˆŠแАแ‰ แ‰ก แ‹ญแ‰ฝแˆ‹แˆ‰แข แˆฌแ‹ฒแ‹ฎ แˆตแŠซแАแˆญ. แŠ แˆแŠ• แ‹จ RTL-SDR แ‰ฐแ‰€แ‰ฃแ‹ฎแ‰ฝ แ‰ แ‰ฅแ‹›แ‰ต แ‹ญแŒˆแŠ›แˆ‰ แฃ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แˆ˜แˆณแˆชแ‹ซ แ‰  30 แ‹ถแˆ‹แˆญ แˆŠแŒˆแŒฃแŒ แˆ แ‹ญแ‰ฝแˆ‹แˆ แฃ แ‹จแ‰ แˆˆแŒ  แˆตแˆˆแ‹šแˆ… แŒ‰แ‹ณแ‹ญ แ‰  แ‹แˆตแŒฅ แАแ‰ แˆญ แข แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แŠญแแˆแข. แ‹ˆแ‹ฐ แ•แˆฎแ‰ถแŠฎแˆ‰ แˆซแˆฑ แŠฅแŠ•แˆธแŒ‹แŒˆแˆซแˆˆแŠ• - แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆฐแˆซ แŠฅแŠ•แ‹ญ.

แ‹จแˆแˆแŠญแ‰ต แˆ˜แ‰€แ‰ แ‹ซ

แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซ, แˆแˆแŠญแ‰ฑ แˆ˜แ‰…แ‹ณแ‰ต แŠ แˆˆแ‰ แ‰ต. แˆ™แˆ‰ แˆฒแŒแŠ“แˆ แ‹จแˆšแ‰†แ‹ญแ‰ แ‰ต แŒŠแ‹œ 120 แˆ›แ‹ญแŠญแˆฎ แˆฐแŠจแŠ•แ‹ต แ‰ฅแ‰ป แАแ‹ แˆตแˆˆแ‹šแˆ… แŠญแแˆŽแ‰นแŠ• แ‰ แˆแ‰พแ‰ต แˆˆแˆ˜แ‰ แ‰ฐแŠ• แ‰ขแ‹ซแŠ•แˆต 5 แˆœแŠธแˆญ แ‹จแŠ“แˆ™แŠ“ แˆ˜แŒ แŠ• แ‹ซแˆˆแ‹ แŠคแˆตแ‹ฒแŠ แˆญ แ‰ฐแ‰€แ‰ฃแ‹ญ แ‰ฐแˆแˆ‹แŒŠ แАแ‹แข

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

แŠจแ‰ฐแ‰€แˆจแŒธ แ‰ แŠ‹แˆ‹ แ‹จ WAV แ‹แ‹ญแˆแŠ• แ‰ แŠ“แˆ™แŠ“ 5000000 แŠ“แˆ™แŠ“ / แˆฐแŠจแŠ•แ‹ต แŠฅแŠ“แŒˆแŠ›แˆˆแŠ• แฃ แŠฅแŠ•แ‹ฐแ‹šแˆ… แ‹ซแˆˆ แ‰€แˆจแŒป 30 แˆดแŠฎแŠ•แ‹ต 500 แˆœแ‰ฃ แ‹ซแˆ…แˆ โ€œแ‹ญแˆ˜แ‹แŠ“แˆ แข แŠฅแˆญแŒแŒฅ แАแ‹, แ‰ แˆšแ‹ฒแ‹ซ แˆ›แŒซแ‹ˆแ‰ป แˆ›แ‹ณแˆ˜แŒฅ แˆแŠ•แˆ แ‹แ‹ญแ‹ณ แ‹จแˆˆแ‹แˆ - แ‹แ‹ญแˆ‰ แ‹ตแˆแŒฝ แ‹จแˆˆแ‹แˆ, แАแŒˆแˆญ แŒแŠ• แ‰ แ‰€แŒฅแ‰ณ แ‹ฒแŒ‚แ‰ณแ‹ญแ‹ แ‹จแ‰ฐแ‹ฐแˆจแŒˆ แ‹จแˆฌแ‹ฒแ‹ฎ แˆแˆแŠญแ‰ต - แ‰ แ‹šแˆ… แˆ˜แŠ•แŒˆแ‹ต แАแ‹ แ‹จแˆถแแ‰ตแ‹Œแˆญ แ‹ฒแ‹แ‹ญแŠ•แ‹ต แˆซแ‹ฒแ‹ฎ แ‹จแˆšแˆฐแˆซแ‹.

แ’แ‰ฒแŠ•แŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹แ‹ญแˆ‰แŠ• แŠจแแ‰ฐแŠ• แŠฅแŠ“แˆตแŠฌแ‹ณแˆˆแŠ•แข แ‰ แˆซแˆณแ‰ธแ‹ แˆ˜แˆžแŠจแˆญ แ‹จแˆšแˆแˆแŒ‰ แ‹จแˆแˆณแˆŒ แ‰€แˆจแŒป แˆ›แ‹แˆจแ‹ต แ‹ญแ‰ฝแˆ‹แˆ‰แข แˆ›แ‹ซแ‹ซแ‹ฃ.

แ‹แ‹ญแˆ‰แŠ• แŠฅแŠ“แ‹แˆญแ‹ต แŠฅแŠ“ แ‹แˆตแŒฅ แ‹ซแˆˆแ‹แŠ• แŠฅแŠ•แ‹ญแข

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 แ‰…แˆญแŒธแ‰ตแฃ 5 แ‰ขแ‰ต) โ€” แ‹จแˆ˜แˆแŠฅแŠญแ‰ฑแŠ• แŠ แ‹ญแАแ‰ต แ‹ญแŒˆแˆแŒปแˆแข แ‰ แˆญแŠซแ‰ณ แ‹“แ‹ญแАแ‰ถแ‰ฝ แŠ แˆ‰:

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ
(แ‹จแŒ แˆจแŒดแ‹› แˆแŠ•แŒญ)

แŠฅแŠ› แ‰  DF17 แ‹“แ‹ญแАแ‰ต แˆ‹แ‹ญ แ‰ฅแ‰ป แแˆ‹แŒŽแ‰ต แŠ แˆˆแŠ•, แˆแŠญแŠ•แ‹ซแ‰ฑแˆ แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ‘แŠ• แˆ˜แŒ‹แŒ แˆšแ‹ซแ‹Žแ‰ฝ แ‹ญแ‹Ÿแˆ.

ICAO (24 แ‰ขแ‰ต) - แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ‘ แ‹“แˆˆแˆ แŠ แ‰€แ แˆแ‹ฉ แŠฎแ‹ตแข แŠ แ‹แˆฎแ•แˆ‹แŠ‘แŠ• แ‰ แŠฎแ‹ฑ แˆ›แˆจแŒ‹แŒˆแŒฅ แ‹ญแ‰ฝแˆ‹แˆ‰แข แ‹จแˆ˜แˆตแˆ˜แˆญ แˆ‹แ‹ญ (แŠฅแŠ•แ‹ฐ แŠ แˆˆแˆ˜แ‰ณแ‹ฐแˆ แˆ†แŠ– แ‹ฐแˆซแˆฒแ‹ แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณแ‹แŠ• แˆ›แ‹˜แˆ˜แŠ• แŠ แ‰แˆŸแˆ, แŒแŠ• แŠ แˆแŠ•แˆ แŒ แ‰ƒแˆš แАแ‹). แˆˆแˆแˆณแˆŒแฃ แˆˆแŠฎแ‹ฑ 3c5ee2 แ‹จแˆšแŠจแ‰ฐแˆˆแ‹ แˆ˜แˆจแŒƒ แŠ แˆˆแŠ•แข

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

แŠ แˆญแ‰ตแ‹•แก แ‹แˆตแŒฅ แ‰ แŒฝแˆ‘แ‰ แˆ‹แ‹ญ แŠ แˆตแ‰ฐแ‹ซแ‹จแ‰ถแ‰ฝ แ‹จ ICAO แŠฎแ‹ต แˆ˜แŒแˆˆแŒซ แ‰ แ‰ แˆˆแŒ  แ‹แˆญแ‹แˆญ แ‰ฐแˆฐแŒฅแ‰ทแˆ, แแˆ‹แŒŽแ‰ต แ‹ซแˆ‹แ‰ธแ‹ แŠฅแŠ•แ‹ฒแ‹ซแАแ‰กแ‰ต แŠฅแˆ˜แŠญแˆซแˆˆแˆ.

แ‹จแ‹แˆ‚แ‰ฅ (56 แ‹ˆแ‹ญแˆ 112 แ‰ขแ‰ต) - แ‹จแˆแŠ•แˆแ‰ณแ‹ แ‰ตแŠญแŠญแˆˆแŠ› แ‹แˆ‚แ‰ฅแข แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹Žแ‰น 5 แ‰ขแ‰ต แ‹ณแ‰ณแ‹Žแ‰ฝ แˆ˜แˆตแŠญ แŠ“แ‰ธแ‹แข แŠฎแ‹ต แ‹ญแ‰ฐแ‹ญแ‰กแ‹จแ‰ฐแŠจแˆ›แ‰ธ แ‹แˆ‚แ‰ฅ แŠ•แ‹‘แˆต แ‹“แ‹ญแАแ‰ต แ‹จแ‹ซแ‹˜ (แŠจแ‹ฒแŠคแ แŒ‹แˆญ แˆ˜แˆแ‰ณแ‰ณแ‰ต แ‹จแˆˆแ‰ แ‰ตแˆ)แข แŠจแŠฅแАแ‹šแˆ… แ‹“แ‹ญแАแ‰ถแ‰ฝ แ‹แˆตแŒฅ แ‰ แŒฃแˆ แŒฅแ‰‚แ‰ต แŠ“แ‰ธแ‹-

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

แˆ•แ‰ฅแˆจแ‰แˆแŠแ‹แŠ• แŠจแŒˆแˆˆแ‰ แŒฅแŠ• แ‰ แŠ‹แˆ‹ แ‹จแŠ แ‹แˆฎแ•แˆ‹แŠ‘แŠ• แŠฎแ‹ต แˆˆแˆ›แŒแŠ˜แ‰ต แ‰€แˆ‹แˆ แАแ‹แก 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('#', ''))

แ‹จแŠ แ‹จแˆญ แ‹ˆแˆˆแ‹ต แŠ แ‰€แˆ›แˆ˜แŒฅ

แˆแˆ‰แˆ แАแŒˆแˆญ แ‰ แˆตแˆ™ แ‰€แˆ‹แˆ แŠจแˆ†แА แฃ แŠจแ‹šแ‹ซ แŠจแˆ˜แŒ‹แŒ แˆšแ‹ซแ‹Žแ‰ฝ แŒ‹แˆญ แ‹จแ‰ แˆˆแŒ  แ‹จแ‰ฐแ‹ˆแˆณแˆฐแ‰  แАแ‹แข แŠฅแŠ•แ‹ฐ 2xแฃ แŠฅแŠ•แŒแ‹ณ แŠฅแŠ“ แŠ แˆแŽ แ‰ฐแˆญแŽแˆ แแˆฌแˆžแ‰ฝ แ‹ญแ‰ฐแˆ‹แˆˆแ‹แˆ‰แข แ‹จแˆ˜แˆตแŠญ แŠฎแ‹ต TC = 01011b = 11.

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ

แ‹จแŠฅแŠฉแˆ แŠฅแŠ“ แ‹ซแˆแ‰ฐแˆˆแˆ˜แ‹ฑ แŠฅแˆฝแŒŽแ‰ฝ แˆแˆณแˆŒแก-

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

แ‹จแˆ˜แŒ‹แŒ แˆšแ‹ซแ‹Žแ‰น แˆตแˆŒแ‰ต แˆซแˆฑ แ‹จแˆšแŠจแŠ“แ‹ˆแАแ‹ แ‰ แŒฃแˆ แŠ แˆตแ‰ธแŒ‹แˆช แ‰ แˆ†แА แ‰€แˆ˜แˆญ แˆ˜แˆ แˆจแ‰ต แАแ‹-

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ
(แˆแŠ•แŒฉ)

แŠฅแŠ” แ‹จแŒ‚แŠ แ‹ญแŠคแˆต แˆตแ”แˆปแˆŠแˆตแ‰ต แŠ แ‹ญแ‹ฐแˆˆแˆแˆแฃ แˆตแˆˆแ‹šแˆ… แŠจแ‹จแ‰ต แŠฅแŠ•แ‹ฐแˆ˜แŒฃ แŠ แˆ‹แ‹แ‰…แˆแข แˆ›แŠ• แ‹ซแ‹แ‰ƒแˆ, แ‰ แŠ แˆตแ‰ฐแ‹ซแ‹จแ‰ถแ‰น แ‹แˆตแŒฅ แ‹ญแƒแ‰.

แŠจแแ‰ณ แŠฅแŠ•แ‹ฐ แ‰€แˆ‹แˆ แ‹ญแ‰†แŒ แˆซแˆ - แŠฅแŠ•แ‹ฐ แˆแ‹ฉ แ‰ขแ‰ต แฃ แŠฅแŠ•แ‹ฐ 25 แ‹ˆแ‹ญแˆ 100 แŒซแˆ› แ‰ฅแ‹œแ‰ต แˆŠแ‹ˆแŠจแˆ แ‹ญแ‰ฝแˆ‹แˆแข

แ‹จแŠ แ‹จแˆญ แ‹ˆแˆˆแ‹ต แแŒฅแАแ‰ต

แŒฅแ‰…แˆ แŠจTC=19 แŒ‹แˆญแข แŠฅแ‹šแˆ… แˆ‹แ‹ญ แ‹จแˆšแ‹ซแˆตแ‹ฐแŠ•แ‰€แ‹ แАแŒˆแˆญ แแŒฅแАแ‰ฑ แŠจแˆ˜แˆฌแ‰ต แŠ แŠ•แŒปแˆญ (แ‹จแˆ˜แˆฌแ‰ต แแŒฅแАแ‰ต) แŠฅแŠ“ แŠ แ‹จแˆญ แ‰ แŠ แ‹แˆฎแ•แˆ‹แŠ‘ แ‹ณแˆณแˆฝ (Airspeed) แ‹จแˆšแˆˆแŠซแ‹ แˆแˆˆแ‰ฑแˆ แ‰ตแŠญแŠญแˆˆแŠ› แˆŠแˆ†แŠ‘ แ‹ญแ‰ฝแˆ‹แˆ‰แข แ‰ฅแ‹™ แ‹จแ‰ฐแˆˆแ‹ซแ‹ฉ แˆ˜แˆตแŠฎแ‰ฝแˆ แŠ แˆแˆแ‹‹แˆแก-

Flightradar24 - แŠฅแŠ•แ‹ดแ‰ต แАแ‹ แ‹จแˆšแˆฐแˆซแ‹? แŠญแแˆ 2แฃ ADS-B แ•แˆฎแ‰ถแŠฎแˆ
(แˆแŠ•แŒฉ)

แˆ˜แ‹ฐแˆแ‹ฐแˆšแ‹ซ

แŠฅแŠ•แ‹ฐแˆšแˆ˜แˆˆแŠจแ‰ฑแ‰ต แฃ แ‹จ ADS-B แ‰ดแŠญแŠ–แˆŽแŒ‚ แŠ แˆตแ‹ฐแˆณแ‰ฝ แˆฒแˆแ‰ฃแ‹ฎแˆฒแˆต แˆ†แŠ—แˆ แฃ แŠ แŠ•แ‹ต แ‹ฐแˆจแŒƒ แˆˆแ‰ฃแˆˆแˆ™แ‹ซแ‹Žแ‰ฝ แ‰ฅแ‰ป แˆณแ‹ญแˆ†แŠ• แˆˆแ‰ฐแˆˆแˆ˜แ‹ฑ แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝแˆ แŒ แ‰ƒแˆš แАแ‹แข แŒแŠ• แ‰ แŠฅแˆญแŒแŒฅ แ‰ แ‹šแˆ… แ‹แˆตแŒฅ แ‰แˆแ แˆšแŠ“ แ‹จแ‰ฐแŒซแ‹ˆแ‰ฐแ‹ แ‰ แ‹ฒแŒ‚แ‰ณแˆ แŠคแˆตแ‹ฒแŠ แˆญ แ‰ฐแ‰€แ‰ฃแ‹ฎแ‰ฝ แˆญแŠซแˆฝ แ‰ดแŠญแŠ–แˆŽแŒ‚ แАแ‹ แฃ แ‹ญแˆ…แˆ แˆ˜แˆฃแˆชแ‹ซแ‹ แ‰ แŒฅแˆฌแ‹ โ€œแˆˆแŠ แŠ•แ‹ต แˆณแŠ•แ‰ฒแˆโ€ แŠจแŠ แŠ•แ‹ต แŒŠแŒ‹แŠธแˆญแ‰ตแ‹ แ‰ แˆ‹แ‹ญ แ‹ตแŒแŒแˆžแˆฝ แ‹ซแˆ‹แ‰ธแ‹แŠ• แˆแˆแŠญแ‰ถแ‰ฝ แŠฅแŠ•แ‹ฒแ‰€แ‰ แˆ แ‹ซแˆตแ‰ฝแˆˆแ‹‹แˆแข

แ‰ แ‹ฐแˆจแŒƒแ‹ แ‰ แˆซแˆฑ, แ‰ แŠฅแˆญแŒแŒฅ, แ‰ฅแ‹™ แ‰ฐแŒจแˆ›แˆช. แแˆ‹แŒŽแ‰ต แ‹ซแˆ‹แ‰ธแ‹ แ‰ แŒˆแŒน แˆ‹แ‹ญ แ‹ซแˆˆแ‹แŠ• แ’แ‹ฒแŠคแ แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰แข ICAO แ‹ˆแ‹ญแˆ แŠจแˆ‹แ‹ญ แ‹จแ‰ฐแŒ แ‰€แˆฑแ‰ตแŠ• แ‹ญแŒŽแ‰ฅแŠ™ แ‹ตแˆญ แŒฃแ‰ขแ‹ซ.

แŠจแˆ‹แ‹ญ แ‹ซแˆ‰แ‰ต แˆแˆ‰แˆ แАแŒˆแˆฎแ‰ฝ แˆˆแ‰ฅแ‹™แ‹Žแ‰ฝ แŒ แ‰ƒแˆš แ‹ญแˆ†แŠ“แˆ‰ แ‰ฐแ‰ฅแˆŽ แ‹จแˆ›แ‹ญแ‰ณแˆฐแ‰ฅ แАแŒˆแˆญ แАแ‹ แฃ แŒแŠ• แ‰ขแ‹ซแŠ•แˆต แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆฐแˆซ แŠ แŒ แ‰ƒแˆ‹แ‹ญ แˆ€แˆณแ‰ฅ แฃ แ‰ฐแˆตแ‹ แŠ แ‹ฐแˆญแŒ‹แˆˆแˆ แฃ แ‹ญแ‰€แˆซแˆแข

แ‰ แАแŒˆแˆซแ‰ฝแŠ• แˆ‹แ‹ญ, แ‹แŒแŒ แ‹จแˆ†แА แ‹จ Python แ‹ฒแŠฎแ‹ฐแˆญ แŠ แˆตแ‰€แ‹ตแˆž แŠ แˆˆ, แˆŠแ‹ซแŒ แŠ‘แ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰ แŠฅแ‹šแˆ…. แŠฅแŠ“ แ‹จแŠคแˆตแ‹ฒแŠ แˆญ แˆ˜แ‰€แ‰ แ‹ซแ‹Žแ‰ฝ แ‰ฃแˆˆแ‰คแ‰ถแ‰ฝ แ‹แŒแŒ แ‹จแˆ†แА ADS-B แ‹ฒแŠฎแ‹ฐแˆญแŠ• แˆฐแ‰ฅแˆตแ‰ แ‹ แˆ›แˆตแŠฌแ‹ต แ‹ญแ‰ฝแˆ‹แˆ‰แข แŠจแŒˆแŒฝแฃ แ‹ญแˆ… แ‰  แ‹แˆตแŒฅ แ‹จแ‰ แˆˆแŒ  แ‰ แ‹แˆญแ‹แˆญ แ‰ฐแ‰ฅแˆซแˆญแ‰ทแˆ แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แŠญแแˆแข.

แ‰ แŠ แŠ•แ‰€แŒน แ‹แˆตแŒฅ แ‹จแ‰ฐแŒˆแˆˆแŒธแ‹ แ‹จแ‰ตแŠ•แ‰ณแŠ‘ แˆแŠ•แŒญ แŠฎแ‹ต แ‰ แ‰†แˆซแŒฉ แˆตแˆญ แ‰ฐแˆฐแŒฅแ‰ทแˆแข แ‹ญแˆ… แŠฅแŠ•แ‹ฐ แˆแˆญแ‰ต แ‹จแˆ›แ‹ญแˆ˜แˆตแˆ แ‹จแˆ™แŠจแˆซ แˆแˆณแˆŒ แАแ‹, แАแŒˆแˆญ แŒแŠ• แŠ แŠ•แ‹ต แАแŒˆแˆญ แ‰ แ‹แˆตแŒก แ‹ญแˆ แˆซแˆ, แŠฅแŠ“ แŠจแˆ‹แ‹ญ แ‹จแ‰ฐแ‰€แ‹ณแ‹แŠ• แ‹แ‹ญแˆ แˆŠแ‰ฐแАแ‰ฐแŠ‘ แ‹ญแ‰ฝแˆ‹แˆ‰.
แˆแŠ•แŒญ แŠฎแ‹ต (Python)

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()

แŠ แŠ•แ‹ต แˆฐแ‹ แแˆ‹แŒŽแ‰ต แŠฅแŠ•แ‹ฐแАแ‰ แˆจแ‹ แ‰ฐแˆตแ‹ แŠ แ‹ฐแˆญแŒ‹แˆˆแˆแฃ แˆตแˆˆ แŠฅแˆญแˆตแ‹Ž แ‰ตแŠฉแˆจแ‰ต แŠฅแŠ“แˆ˜แˆฐแŒแŠ“แˆˆแŠ•แข

แˆแŠ•แŒญ: hab.com

แ‰ DDoS แŒฅแ‰ แ‰ƒแฃ VPS VDS แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แˆˆแŒฃแ‰ขแ‹ซแ‹Žแ‰ฝ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‹ญแŒแ‹™ ๐Ÿ”ฅ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แ‹จแ‹ตแˆญ แŒฃแ‰ขแ‹ซ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‰ แ‹ฒแ‹ถแŠคแˆต แŒฅแ‰ แ‰ƒแฃ แ‰ แ‰ชแ’แŠคแˆต แ‰ชแ‹ฒแŠคแˆต แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แ‹ญแŒแ‹™ | ProHoster