Flightradar24 - เด‡เดคเต เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต? เดญเดพเด—เด‚ 2, ADS-B เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ

เดนเดฒเต‹ เดนเดฌเตเตผ. เด’เดฐเตเดชเด•เตเดทเต‡ เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเตฝ เดตเดšเตเดšเต เดฌเดจเตเดงเตเด•เตเด•เดณเต†เดฏเต‹ เดธเตเดนเตƒเดคเตเดคเตเด•เตเด•เดณเต†เดฏเต‹ เด•เดฃเตเดŸเตเดฎเตเดŸเตเดŸเตเด•เดฏเต‹ เด•เดพเดฃเตเด•เดฏเต‹ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดณเตเดณ เดŽเดฒเตเดฒเดพเดตเดฐเตเด‚ เดธเต—เดœเดจเตเดฏ เดซเตเดฒเตˆเดฑเตเดฑเตเดฑเดพเดกเดพเตผ 24 เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเดพเด•เดพเด‚. เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฅเดพเดจเด‚ เดคเดคเตเดธเดฎเดฏเด‚ เดŸเตเดฐเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดฎเดพเตผเด—เดฎเดพเดฃเดฟเดคเต.

Flightradar24 - เด‡เดคเต เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต? เดญเดพเด—เด‚ 2, ADS-B เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ

ะ’ เด†เดฆเตเดฏ เดญเดพเด—เด‚ เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด“เตบเดฒเตˆเตป เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดคเตเดตเด‚ เดตเดฟเดตเดฐเดฟเดšเตเดšเต. เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เดฏเดฟ เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดฑเตเดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดคเต เดกเดพเดฑเตเดฑเดฏเดพเดฃเต เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเตเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเตเด‚ เดชเตˆเดคเตเดคเตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดตเดฏเด‚ เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดฎเต†เดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด‚.

เด•เดฅ

เดตเตเดฏเด•เตเดคเดฎเดพเดฏเตเด‚, เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด…เดตเดฐเตเดŸเต† เดธเตเดฎเดพเตผเดŸเตเดŸเตเดซเต‹เดฃเตเด•เดณเดฟเตฝ เด•เดพเดฃเดพเตป เดŽเดฏเตผเด•เตเดฐเดพเดซเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเดฟเดฒเตเดฒ. เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต† ADS-B (เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดกเดฟเดชเตปเดกเดจเตเดฑเต เดธเตผเดตเตˆเดฒเตปเดธเต-เดฌเตเดฐเต‹เดกเตเด•เดพเดธเตเดฑเตเดฑเต) เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดตเดฟเดฎเดพเดจเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เด•เต‡เดจเตเดฆเตเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดธเตเดตเดชเตเดฐเต‡เดฐเดฟเดคเดฎเดพเดฏเดฟ เด•เตˆเดฎเดพเดฑเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต - เด…เดคเดฟเดจเตเดฑเต† เดเดกเดจเตเดฑเดฟเดซเดฏเตผ, เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เตพ, เดฆเดฟเดถ, เดตเต‡เด—เดค, เด‰เดฏเดฐเด‚, เดฎเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดŽเดจเตเดจเดฟเดต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต. เดฎเตเดฎเตเดชเต, เด…เดคเตเดคเดฐเด‚ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเตเดŸเต† เดตเดฐเดตเดฟเดจเต เดฎเตเดฎเตเดชเต, เดกเดฟเดธเตเดชเดพเดšเตเดšเตผเด•เตเด•เต เดฑเดกเดพเดฑเดฟเตฝ เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเต เดฎเดพเดคเตเดฐเดฎเต‡ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเต‚. เดงเดพเดฐเดพเดณเด‚ เดตเดฟเดฎเดพเดจเด™เตเด™เตพ เด‰เดณเตเดณเดชเตเดชเต‹เตพ เด‡เดคเต เดฎเดคเดฟเดฏเดพเด•เตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ.

เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดฎเดพเดฏเดฟ, ADS-B เด’เดฐเต เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเดฒเต† เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดฑเตเดฑเตผ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต, เด…เดคเต 1090 เดฎเต†เด—เดพเดนเต†เตผเดŸเตโ€Œเดธเดฟเดจเตเดฑเต† เด‰เดฏเตผเดจเตเดจ เด†เดตเตƒเดคเตเดคเดฟเดฏเดฟเตฝ เด†เดจเตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต (เดฎเดฑเตเดฑเต เดฎเต‹เดกเตเด•เตพ เด‰เดฃเตเดŸเต, เดชเด•เตเดทเต‡ เดžเด™เตเด™เตพเด•เตเด•เต เด…เดตเดฏเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เตพ เด‡เดตเดฟเดŸเต† เดฎเดพเดคเตเดฐเด‚ เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต). เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดฑเตเดฑเดฑเดฟเดจเต เดชเตเดฑเดฎเต‡, เดตเดฟเดฎเดพเดจเดคเตเดคเดพเดตเดณเดคเตเดคเดฟเตฝ เดŽเดตเดฟเดŸเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด’เดฐเต เดฑเดฟเดธเต€เดตเดฑเตเด‚ เด‰เดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เตพเด•เตเด•เต, เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเต†เดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดฑเดฟเดธเต€เดตเตผ เดฐเดธเด•เดฐเดฎเดพเดฃเต.

เดตเดดเดฟเดฏเดฟเตฝ, เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดธเดพเดงเดพเดฐเดฃ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เดพเดฏเดฟ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดค เดŽเดฏเตผเดจเดตเต เดฑเดกเดพเตผเดฌเต‹เด•เตโ€Œเดธเต 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 เดŽเดจเตเดจ เดคเดฐเดคเตเดคเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเต‚, เด•เดพเดฐเดฃเด‚... เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเดจเตเดฑเต† เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดคเดพเดฃเต.

ICAO (24 เดฌเดฟเดฑเตเดฑเตเด•เตพ) - เดตเดฟเดฎเดพเดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดจเตเดคเดพเดฐเดพเดทเตเดŸเตเดฐ เด…เดฆเตเดตเดฟเดคเต€เดฏ เด•เต‹เดกเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเตเดฑเต† เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเดฟเดฎเดพเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚ เด“เตบเดฒเตˆเตป (เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดฐเดšเดฏเดฟเดคเดพเดตเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดจเดฟเตผเดคเตเดคเดฟ, เดชเด•เตเดทเต‡ เด…เดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฃเต). เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, 3c5ee2 เด•เต‹เดกเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เดฃเตเดŸเต:

Flightradar24 - เด‡เดคเต เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต? เดญเดพเด—เด‚ 2, ADS-B เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ

เดŽเดกเดฟเดฑเตเดฑเต: เด‡เตป เดฒเต‡เด–เดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ ICAO เด•เต‹เดกเดฟเดจเตเดฑเต† เดตเดฟเดตเดฐเดฃเด‚ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต; เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดตเตผ เด…เดคเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดžเดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดกเดพเดฑเตเดฑ (56 เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 112 เดฌเดฟเดฑเตเดฑเตเด•เตพ) - เดžเด™เตเด™เตพ เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดฏเดฅเดพเตผเดคเตเดฅ เดกเดพเดฑเตเดฑ. เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด†เดฆเตเดฏเดคเตเดคเต† 5 เดฌเดฟเดฑเตเดฑเตเด•เตพ เดซเต€เตฝเดกเดพเดฃเต เด•เต‹เดกเต เดŸเตˆเดชเตเดชเตเดšเต†เดฏเตเดฏเตเด•, เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด‰เดชเดตเดฟเดญเดพเด—เด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (DF-เดฎเดพเดฏเดฟ เดคเต†เดฑเตเดฑเดฟเดฆเตเดงเดฐเดฟเด•เตเด•เดฐเตเดคเต). เดˆ เดคเดฐเด™เตเด™เดณเดฟเตฝ เด•เตเดฑเดšเตเดšเต เด‰เดฃเตเดŸเต:

Flightradar24 - เด‡เดคเต เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต? เดญเดพเด—เด‚ 2, ADS-B เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ
(เดชเดŸเตเดŸเดฟเด• เด‰เดฑเดตเดฟเดŸเด‚)

เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเตเดŸเต† เดเดคเดพเดจเตเด‚ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚.

เดตเดฟเดฎเดพเดจเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตฝ

เดฌเตˆเดจเดฑเดฟ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด‰เดฆเดพเดนเดฐเดฃเด‚:

00100 011 000101 010111 XIX XIX 000111

เดกเดพเดฑเตเดฑ เดซเต€เตฝเดกเตเด•เตพ:

+------+------+------+------+------+------+------+------+------+------+
| 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 เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เด’เดฐเต เดฐเดธเด•เดฐเดฎเดพเดฏ เดธเดนเดตเตผเดคเตเดคเดฟเดคเตเดตเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดชเตเดฐเตŠเดซเดทเดฃเดฒเตเด•เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดธเดพเดงเดพเดฐเดฃ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดกเดฟเดœเดฟเดฑเตเดฑเตฝ เดŽเดธเตเดกเดฟเด†เตผ เดฑเดฟเดธเต€เดตเดฑเตเด•เดณเตเดŸเต† เดตเดฟเดฒเด•เตเดฑเดžเตเดž เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเดพเดฃเต เด‡เดคเดฟเตฝ เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดชเด™เตเด•เต เดตเดนเดฟเดšเตเดšเดคเต, เด‡เดคเต เด’เดฐเต เด—เดฟเด—เดพเดนเต†เตผเดŸเตเดธเดฟเดจเต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด†เดตเตƒเดคเตเดคเดฟเดฏเดฟเดฒเตเดณเตเดณ เดธเดฟเด—เตเดจเดฒเตเด•เตพ เด…เด•เตเดทเดฐเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด‰เดชเด•เดฐเดฃเดคเตเดคเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต "เดชเต†เดจเตเดจเดฟเด•เตพเด•เตเด•เต".

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเดฟเตฝ เดคเดจเตเดจเต†, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด•เต‚เดŸเตเดคเตฝ เด‰เดฃเตเดŸเต. เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดตเตผเด•เตเด•เต เดชเต‡เดœเดฟเดฒเต† เดชเดฟ.เดกเดฟ.เดŽเดซเต 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•