Flightradar24 - āĻāĻŸāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡? āĻĒāĻžāĻ°ā§āĻŸ 2, ADS-B āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛

āĻšā§āĻ¯āĻžāĻ˛ā§‹ āĻšāĻžāĻŦāĻ°āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡ āĻ¯āĻžāĻ°āĻž āĻ•āĻ–āĻ¨āĻ“ āĻŦāĻŋāĻŽāĻžāĻ¨ā§‡ āĻ†āĻ¤ā§āĻŽā§€āĻ¯āĻŧ āĻŦāĻž āĻŦāĻ¨ā§āĻ§ā§āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻŦāĻž āĻĻā§‡āĻ–ā§‡āĻ›ā§‡āĻ¨ āĻ¤āĻžāĻ°āĻž āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ Flightradar24 āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ°āĻŋāĻ¯āĻŧā§‡āĻ˛ āĻŸāĻžāĻ‡āĻŽā§‡ āĻŦāĻŋāĻŽāĻžāĻ¨ā§‡āĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻžāĻ° āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧāĨ¤

Flightradar24 - āĻāĻŸāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡? āĻĒāĻžāĻ°ā§āĻŸ 2, ADS-B āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛

В āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¨ā§€āĻ¤āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ–āĻ¨ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦ āĻāĻŦāĻ‚ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻŋāĻŽāĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻŋāĻ‚ āĻ¸ā§āĻŸā§‡āĻļāĻ¨ā§‡ āĻ•ā§€ āĻĄā§‡āĻŸāĻž āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻ¤āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻĄāĻŋāĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ•āĻ°āĻŦāĨ¤

ИŅŅ‚ĐžŅ€Đ¸Ņ

āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸāĻĢā§‹āĻ¨ā§‡ āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻŽāĻžāĻ¨ā§‡āĻ° āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋāĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ ADS-B (āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻļā§€āĻ˛ āĻ¨āĻœāĻ°āĻĻāĻžāĻ°āĻŋ—āĻ¸āĻŽā§āĻĒā§āĻ°āĻšāĻžāĻ°), āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻŽāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧ - āĻāĻ° āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€, āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ™ā§āĻ•, āĻĻāĻŋāĻ•, āĻ—āĻ¤āĻŋ, āĻ‰āĻšā§āĻšāĻ¤āĻž āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒā§‚āĻ°ā§āĻŦā§‡, āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ†āĻŦāĻŋāĻ°ā§āĻ­āĻžāĻŦā§‡āĻ° āĻ†āĻ—ā§‡, āĻĒā§āĻ°ā§‡āĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻ°āĻžāĻĄāĻžāĻ°ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒā§‡āĻ¤āĨ¤ āĻ¯āĻ–āĻ¨ āĻ…āĻ¨ā§‡āĻ• āĻĒā§āĻ˛ā§‡āĻ¨ āĻ›āĻŋāĻ˛ āĻ¤āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ†āĻ° āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤

āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤āĻ­āĻžāĻŦā§‡, ADS-B āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻŽāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤ āĻ¯āĻž āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻ•ā§āĻ°āĻŽā§‡ 1090 MHz āĻāĻ° āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻ‰āĻšā§āĻš āĻĢā§āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸āĻŋāĻ¤ā§‡ āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ (āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŽā§‹āĻĄ āĻ†āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ¤ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻ¨āĻ‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ™ā§āĻ•āĻ—ā§āĻ˛āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ)āĨ¤ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻŦāĻŋāĻŽāĻžāĻ¨āĻŦāĻ¨ā§āĻĻāĻ°ā§‡ āĻ•ā§‹āĻĨāĻžāĻ“ āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°āĻ“ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧāĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ, Airnav āĻ°āĻžāĻĄāĻžāĻ°āĻŦāĻ•ā§āĻ¸, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, 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 āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛
(āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ‰ā§ŽāĻ¸)

āĻ†āĻ¸ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§‡āĻ–āĻŋāĨ¤

āĻŦāĻŋāĻŽāĻžāĻ¨ āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻ°āĻŖ

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ:

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('#', ''))

āĻŦāĻžāĻ¯āĻŧā§āĻŦāĻžāĻšāĻŋāĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨

āĻ¯āĻĻāĻŋ āĻ¨āĻžāĻŽāĻŸāĻŋ āĻ¸āĻšāĻœ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ™ā§āĻ•āĻ—ā§āĻ˛āĻŋ āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛āĨ¤ āĻāĻ—ā§āĻ˛āĻŋ 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 āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻāĻ•āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¸āĻŋāĻŽā§āĻŦāĻŋāĻ“āĻ¸āĻŋāĻ¸ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡, āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§‡āĻļāĻžāĻĻāĻžāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ‡ āĻ¨āĻ¯āĻŧ, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻĻāĻ°āĻ•āĻžāĻ°ā§€āĨ¤ āĻ¤āĻŦā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻĄāĻŋāĻœāĻŋāĻŸāĻžāĻ˛ āĻāĻ¸āĻĄāĻŋāĻ†āĻ° āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻ¸ā§āĻ¤āĻž āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻĒāĻžāĻ˛āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ¯āĻž āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸āĻŸāĻŋāĻ•ā§‡ āĻ†āĻ•ā§āĻˇāĻ°āĻŋāĻ• āĻ…āĻ°ā§āĻĨā§‡ "āĻĒā§‡āĻ¨āĻŋāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯" āĻ—āĻŋāĻ—āĻžāĻšāĻžāĻ°ā§āĻŸāĻœā§‡āĻ° āĻ‰āĻĒāĻ°ā§‡ āĻĢā§āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸āĻŋ āĻ¸āĻš āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻŽāĻžāĻ¨ āĻ¨āĻŋāĻœā§‡āĻ‡, āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ†āĻ°ā§‹ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡. āĻ¯āĻžāĻ°āĻž āĻ†āĻ—ā§āĻ°āĻšā§€ āĻ¤āĻžāĻ°āĻž āĻĒā§‡āĻœā§‡ āĻĒāĻŋāĻĄāĻŋāĻāĻĢ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ†āĻ‡āĻ¸āĻŋāĻāĻ“ āĻ…āĻĨāĻŦāĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ‰āĻĒāĻ°ā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻĻā§‡āĻ–ā§āĻ¨ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻžāĻ‡āĻŸ.

āĻāĻŸāĻŋ āĻ…āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻ¯ā§‡ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤āĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§‡āĻ•ā§‡āĻ° āĻĒāĻ•ā§āĻˇā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻŦā§‡, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ§āĻžāĻ°āĻŖāĻž, āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ, āĻ°āĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡āĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ°ā§‡āĻĄāĻŋāĻŽā§‡āĻĄ āĻĄāĻŋāĻ•ā§‹āĻĄāĻžāĻ° āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻ–āĻžāĻ¨ā§‡. āĻāĻŦāĻ‚ āĻāĻ¸āĻĄāĻŋāĻ†āĻ° āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ˛āĻŋāĻ•āĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨