{"id":491042,"date":"2026-08-15T15:06:46","date_gmt":"2026-08-15T15:06:46","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=491042"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=491042","title":{"rendered":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 OFDM. PHY-\u0443\u0440\u043e\u0432\u0435\u043d\u044c"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 OFDM (Orthogonal Frequency-Division Multiplexing). \u0412 \u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u0432 \u044d\u0444\u0438\u0440\u0435.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439, \u043e\u043d\u0430 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0442\u0435\u043c, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0446\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439, \u043a\u0430\u043a\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<\/p>\n<h2>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h2>\n<p>\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, 28.07.2025\u0433. \u043d\u0430 \u0445\u0430\u0431\u0440 \u0431\u044b\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 <a href=\"https:\/\/habr.com\/en\/companies\/ru_mts\/articles\/931584\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043e \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 VarAC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e &#171;\u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435&#187;, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 SSB-\u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0432 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0433\u0440\u0430\u0442\u044c P2P \u0432 \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u044b\u0435 \u0438\u0433\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0440\u0435\u0432\u0435\u0440\u0441\u0438 \u0438\u043b\u0438 \u0448\u0430\u0448\u043a\u0438 \u0441 \u0448\u0430\u0445\u043c\u0430\u0442\u0430\u043c\u0438), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u043a \u043f\u043e\u043c\u0435\u0445\u0430\u043c. \u041f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, VarAC \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 OFDM \u2014 \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445, \u043c\u0435\u0442\u043e\u0434\u0435, \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u0438, Wi-Fi \u0438 LTE\/5G \u0441\u0435\u0442\u044f\u0445, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0437\u0432\u0430\u0432 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0440\u0430\u0434\u0438\u043e\u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a VarAC \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u0432\u0441\u044f \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u0443\u0432\u043e\u0435\u043d\u043d\u0430\u044f, \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 OFDM \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/p>\n<h2>TL;DR<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0434\u0435\u0442 \u043b\u043e\u043d\u0433\u0440\u0438\u0434 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0443\u043b \u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Python. \u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u044b &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435&#187; \u0438 &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u044d\u0444\u0438\u0440\u0435&#187;.<\/p>\n<p>\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>\u0412: \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<br \/>\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f OFDM \u0441 PSK \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0435\u0439, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u0432\u0443\u043a\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b?<br \/>\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 SSB-\u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a\u0438\u0435 PSK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f?<br \/>\u041e: BPSK \u0438 QPSK (QAM \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435).<\/p>\n<\/li>\n<li>\n<p>\u0412: \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043b\u0438 \u043a \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u0438?<br \/>\u041e: \u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 25% \u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u0432 \u044d\u0444\u0438\u0440\u0435?<br \/>\u041e: \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0444\u0438\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0434 \u0448\u0443\u043c\u0430\u043c\u0438?<br \/>\u041e: \u0434\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0448\u0443\u043c\u0430\u043c\u0438, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 -9 \u0434\u0411, \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b -7 \u0434\u0411.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a\u0430\u044f \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445?<br \/>\u041e: \u043e\u0442 353.9823 \u0434\u043e 707.9646 \u0431\u0438\u0442\/\u0441\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445?<br \/>\u041e: BPSK \u043e\u0442 117 \u0434\u043e 265 \u0431\u0438\u0442\/\u0441\u0435\u043a; QPSK \u043e\u0442 235 \u0434\u043e 530 \u0431\u0438\u0442\/\u0441\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0438 \u043f\u0438\u043b\u043e\u0442\u043e\u0432 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435?<br \/>\u041e: \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c 23 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 7 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043e\u0442 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438?<br \/>\u041e: 93.75 \u0413\u0446<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043b\u043e\u0442\u043d\u0435\u0435?<br \/>\u041e: \u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u044c \u0448\u0430\u0433\u043e\u043c 46.87 \u0413\u0446, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a \u0441\u0434\u0432\u0438\u0433\u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u044b?<br \/>\u041e: \u0434\u0430, \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 300\u0413\u0446.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a?<br \/>\u041e: \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u2153.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435?<br \/>\u041e: \u0434\u0430, \u043e\u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u00bd, \u2154 \u0438 \u00be.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434?<br \/>\u041e: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u0438\u0442\u0435\u0440\u0431\u0438 \u043d\u0430 \u043c\u044f\u0433\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u0431\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438?<br \/>\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443).<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043a\u0430\u043a\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f?<br \/>\u041e: \u043f\u043e\u043b\u043e\u0441\u0430 \u043e\u0442 300 \u0434\u043e 2700 \u0413\u0446.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430?<br \/>\u041e: \u0442\u0435\u0441\u0442 \u0431\u044b\u043b \u043d\u0430 \u0423\u041a\u0412 2 \u043c (144 \u041c\u0413\u0446), \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412: \u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043b\u0443\u0447\u0448\u0435 \u0447\u0435\u043c FT8 \u0438\u043b\u0438 VarAC?<br \/>\u041e: \u043d\u0438\u0447\u0435\u043c, FT8 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c; VarAC \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/h2>\n<p>\u041d\u0430 \u0442\u0435\u043c\u0443 OFDM \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043c, \u043f\u0440\u043e\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c OFDM \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 OFDM<\/h2>\n<p>Orthogonal Frequency Division Multiplexing \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0434\u0438\u043d \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0439 \u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445.<\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e.<\/p>\n<p>\u041e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. <\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"f(x) = \\frac{1}{2\\pi} \\int_{-\\infty}^{\\infty} \\hat{f}(\\omega) e^{i\\omega x} d\\omega\" alt=\"f(x) = \\frac{1}{2\\pi} \\int_{-\\infty}^{\\infty} \\hat{f}(\\omega) e^{i\\omega x} d\\omega\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e288562183d52584ee2a4d7f9646a6.svg\" width=\"212\" height=\"43\" data-width=\"26.476\" data-height=\"5.328\" data-vertical-align=\"-2.098\" style=\"width: 26.476ex; height: 5.328ex; vertical-align: -2.098ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e288562183d52584ee2a4d7f9646a6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e288562183d52584ee2a4d7f9646a6.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u0438 \u0444\u0430\u0437\u044b \u0447\u0430\u0441\u0442\u043e\u0442, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u041e\u0411\u041f\u0424 (IFFT), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 IQ-\u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e01\/d50\/d9b\/e01d50d9bc4bae52a6518681fefa2458.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 IFFT.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 IFFT.\" width=\"423\" height=\"327\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e01\/d50\/d9b\/e01d50d9bc4bae52a6518681fefa2458.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e01\/d50\/d9b\/e01d50d9bc4bae52a6518681fefa2458.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 IFFT.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a4c\/932\/dbf\/a4c932dbff25011bb79e4e88a90871dd.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442.\" width=\"1461\" height=\"617\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a4c\/932\/dbf\/a4c932dbff25011bb79e4e88a90871dd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a4c\/932\/dbf\/a4c932dbff25011bb79e4e88a90871dd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u0438 \u0444\u0430\u0437\u044b, \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043c\u0430\u043f\u043f\u0438\u043d\u0433) \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0444\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0435\u0439, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a BPSK, QPSK \u0438 QAM \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e <img decoding=\"async\" class=\"formula inline\" source=\"2^n\" alt=\"2^n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bea\/138\/3bc\/bea1383bcb5c5398ed24a754f0d0c22c.svg\" width=\"19\" height=\"14\" data-width=\"2.279\" data-height=\"1.641\" style=\"width: 2.279ex; height: 1.641ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bea\/138\/3bc\/bea1383bcb5c5398ed24a754f0d0c22c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bea\/138\/3bc\/bea1383bcb5c5398ed24a754f0d0c22c.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0431\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438; \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0439, \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043e\u043d\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u044e \u043f\u043e\u043c\u0435\u0445 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\/\u0448\u0443\u043c (SNR).<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u0447\u0435\u0440\u0435\u0437 [\u043f\u0440\u044f\u043c\u043e\u0435] \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u0440\u044c\u0435 (FFT) \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u0438 \u0444\u0430\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0435\u0441\u0443\u0449\u0438\u0445.<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\hat{f}(\\omega) = \\int_{-\\infty}^{\\infty} f(t) e^{-i\\omega t} dt\" alt=\"\\hat{f}(\\omega) = \\int_{-\\infty}^{\\infty} f(t) e^{-i\\omega t} dt\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ac\/ac2\/ac2cea80da5f81542e6955f3662108fa.svg\" width=\"180\" height=\"43\" data-width=\"22.522\" data-height=\"5.328\" data-vertical-align=\"-2.098\" style=\"width: 22.522ex; height: 5.328ex; vertical-align: -2.098ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ac\/ac2\/ac2cea80da5f81542e6955f3662108fa.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/ac\/ac2\/ac2cea80da5f81542e6955f3662108fa.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f OFDM \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0435\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043d\u0435\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441<\/h2>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 OFDM-\u0441\u0438\u0441\u0442\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044e (ISI \u2014 Inter Symbol Interferenct). \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c OFDM \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0433\u0434\u0435 \u0440\u0430\u0434\u0438\u043e\u0432\u043e\u043b\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u044d\u0445\u0430 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 3). \u0422\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0430\u043f\u043e\u043b\u0437\u0430\u043b\u0438 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435, \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438 (ICI \u2014 Inter Carrier Interference).<\/p>\n<p>\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u043d \u043d\u0430\u0437\u0432\u0430\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u0435\u0439 \u0445\u0432\u043e\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u0444\u0430\u0437\u0443 \u0438 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0438\u0445.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d36\/ffb\/d66\/d36ffbd66133ef03c52f694723f045a7.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\" width=\"575\" height=\"329\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d36\/ffb\/d66\/d36ffbd66133ef03c52f694723f045a7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d36\/ffb\/d66\/d36ffbd66133ef03c52f694723f045a7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u044d\u0444\u0438\u0440\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/69c\/7a0\/d8b\/69c7a0d8bb7adb888a9bac5375700308.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\" width=\"427\" height=\"116\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/69c\/7a0\/d8b\/69c7a0d8bb7adb888a9bac5375700308.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/69c\/7a0\/d8b\/69c7a0d8bb7adb888a9bac5375700308.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e15\/3f8\/9b7\/e153f89b705de28432656229673731e1.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.\" width=\"984\" height=\"242\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e15\/3f8\/9b7\/e153f89b705de28432656229673731e1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e15\/3f8\/9b7\/e153f89b705de28432656229673731e1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0431\u043e\u0440\u044c\u0431\u044b \u0441 ISI\/ICI \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0434\u0440\u0435\u0439\u0444 (CFO \u2014 Carrier Frequency Offset), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0432\u0443\u044e \u0441\u0432\u0435\u0440\u0442\u043a\u0443 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8d\/fed\/a25\/e8dfeda2578e5afb4344724aa79d23e1.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u041c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0432 \u0437\u043e\u043d\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u041c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0432 \u0437\u043e\u043d\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\" width=\"500\" height=\"117\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e8d\/fed\/a25\/e8dfeda2578e5afb4344724aa79d23e1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e8d\/fed\/a25\/e8dfeda2578e5afb4344724aa79d23e1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u041c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0432 \u0437\u043e\u043d\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u044c\u044e, \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u043d\u044b\u0439 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u043e, \u0434\u043b\u044f \u0435\u0433\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0447\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<h3>\u041f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b<\/h3>\n<p>OFDM-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0434\u0438\u043e\u0441\u0438\u0433\u043d\u0430\u043b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e-\u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0438\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439, \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u044f (\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c) \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u044c \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432 OFDM \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0438\u043b\u043e\u0442\u0430\u043c\u0438. \u0418\u0445 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0447\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u044e\u0442 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043e\u0439 \u0438 \u0444\u0430\u0437\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0438\u043b\u043e\u0442\u044b, \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e) \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044f \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/243\/dda\/eae\/243ddaeae2b7850380179837887c891f.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c.\" width=\"992\" height=\"279\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/243\/dda\/eae\/243ddaeae2b7850380179837887c891f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/243\/dda\/eae\/243ddaeae2b7850380179837887c891f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 CFO \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 OFDM-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0438\u043b\u043e\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0435\u0442\u043a\u0435. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0438, \u043f\u0438\u043b\u043e\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/h2>\n<p>\u0418\u0437 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e VarAC \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442, \u043f\u043e\u0432\u0435\u0440\u0445 SSB, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0439\u0442\u0438 \u0442\u0435\u043c \u0436\u0435 \u043f\u0443\u0442\u0435\u043c.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: <\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u0434\u0435\u043b\u043e\u0432 \u2014 BPSK, FFT\/IFFT \u0438 \u0441\u0440\u0435\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0438 \u043a\u0432\u0430\u0437\u0438-\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0433\u043e\u0442\u043e\u0432. \u0422\u0430\u043a-\u0442\u043e \u043e\u043d\u043e \u0442\u0430\u043a, \u0434\u0430 \u043d\u0435 \u0442\u0430\u043a, \u044d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u0437\u0436\u0435 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0432\u044b\u0448\u0435.<\/p>\n<\/blockquote>\n<p>VarAC \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 \u0432 \u0430\u043a\u0443\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442 \u043e\u0442 300 \u0413\u0446 \u0434\u043e 2700 \u0413\u0446, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u0441 \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 50 \u0413\u0446.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 SSB \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0433\u043e\u043b\u043e\u0441\u0430 (\u0442.\u043d. \u0442\u0435\u043b\u0435\u0444\u043e\u043d) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0447\u0430\u0441\u0442\u043e\u0442 2.7-3 \u041a\u0413\u0446, \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 12 \u041a\u0413\u0446, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043e 6 \u041a\u0413\u0446.<\/p>\n<pre><code class=\"python\">DEFAULT_SAMPLE_RATE = 12000sample_rate=DEFAULT_SAMPLE_RATE,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0428\u0430\u0433 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 VarAC, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0433\u0435\u0440\u0446. \u0420\u0430\u0437\u043c\u0435\u0440 FFT \u0431\u044b\u043b \u0437\u0430\u0434\u0430\u043d \u043a\u0430\u043a 128 \u043f\u043e\u043b\u043e\u0441, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 12000\/128=93.75 \u0413\u0446, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 CFO \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 +-46.875 \u0413\u0446. \u041f\u0440\u0438 \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u044b\u0448\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<pre><code class=\"python\">fft_bins=128,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: <\/p>\n<p>\u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439. \u0421\u0438\u043c\u0432\u043e\u043b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u0430\u0432\u0430\u043b \u043f\u0438\u043a \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 CFO \u043d\u043e \u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0432 \u0434\u0432\u0443\u0445\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u0443\u044e \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443 \u0438 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 CFO \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 300 \u0413\u0446.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043b\u043e\u0441\u0430 \u0447\u0430\u0441\u0442\u043e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c 300-2400 \u0413\u0446.<\/p>\n<pre><code class=\"python\">freq_lo=300,freq_hi=2400,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 23 \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25.<\/p>\n<p>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430 \u211614 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0435 1312.5 \u0413\u0446.<\/p>\n<pre><code class=\"python\">self._sample_rate = sample_rateself._fft_bins = fft_binsself._freq_step = self._sample_rate \/ self._fft_binsself._freq_lo = freq_loself._freq_hi = freq_hiself._bin_lo = int(self._freq_lo \/ self._freq_step)self._bin_hi = int(self._freq_hi \/ self._freq_step)self._bin_center = (self._bin_lo + self._bin_hi) \/\/ 2self._channel_indices = np.arange(self._bin_lo, self._bin_hi + 1)self._subcarriers = len(self._channel_indices)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103 \u2014 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442, \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u044b\u0445 \u0441 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438.<\/p>\n<\/blockquote>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u044b \u0447\u0430\u0441\u0442\u043e\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438 \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e ODFM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0431\u0435\u0437 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 128\/12000=0.01 \u0441\u0435\u043a.<\/p>\n<p>\u0418\u0437 23 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e 7 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432.<\/p>\n<pre><code class=\"python\">self._pilots_count = pilots_countself._pilot_local_indices = np.linspace(0, len(self._channel_indices) - 1, self._pilots_count, dtype=int)self._data_local_indices = np.delete(np.arange(len(self._channel_indices)), self._pilot_local_indices)self._pilot_carriers = self._channel_indices[self._pilot_local_indices]self._pilot_carriers_len = len(self._pilot_carriers)self._data_carriers = self._channel_indices[self._data_local_indices]self._data_carriers_len = len(self._data_carriers)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0438\u043b\u043e\u0442\u043e\u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u043f\u0438\u043b\u043e\u0442\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u043f\u0435\u043a\u0442\u0440\u0430; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0438\u043b\u043e\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u043b\u043e\u0441\u044b 3, 6, 10, 14, 17, 21, 25 (\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e-\u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438 125, 122, 118, 114, 111, 107, 103).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/011\/f7c\/75c\/011f7c75c50118f9171c0c04390d2dad.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0432 \u0441\u043f\u0435\u043a\u0442\u0440\u0435.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0432 \u0441\u043f\u0435\u043a\u0442\u0440\u0435.\" width=\"1093\" height=\"455\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/011\/f7c\/75c\/011f7c75c50118f9171c0c04390d2dad.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/011\/f7c\/75c\/011f7c75c50118f9171c0c04390d2dad.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8. \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0432 \u0441\u043f\u0435\u043a\u0442\u0440\u0435.<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0435\u0439. BPSK (Binary Phase Shift Keying) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043c\u0435\u0445\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0441\u0430\u043c\u044b\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 1 \u0431\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u042d\u0442\u043e\u0442 \u0432\u0438\u0434 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u0438 \u043f\u043b\u043e\u0445\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u0430\u043d\u0430\u043b\u0430. <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5b\/853\/0f3\/c5b8530f3ee72ca82bf4f7aefb5a3c4d.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f BPSK.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f BPSK.\" width=\"580\" height=\"582\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c5b\/853\/0f3\/c5b8530f3ee72ca82bf4f7aefb5a3c4d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5b\/853\/0f3\/c5b8530f3ee72ca82bf4f7aefb5a3c4d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 9. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f BPSK.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 9 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f BPSK. \u0421\u0445\u0435\u043c\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439:<\/p>\n<pre><code class=\"python\">_MAPPING_TABLE = {    (0,): -1 + 0j,    (1,): 1 + 0j,}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e BPSK \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 QPSK, \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 10. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043e\u0431\u044a\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d \u043a \u0444\u0430\u0437\u043e\u0432\u044b\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\/\u0448\u0443\u043c (SNR).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96c\/825\/fc6\/96c825fc64be8a06f105c04191532851.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f QPSK.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f QPSK.\" width=\"582\" height=\"582\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/96c\/825\/fc6\/96c825fc64be8a06f105c04191532851.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96c\/825\/fc6\/96c825fc64be8a06f105c04191532851.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 10. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0434\u043b\u044f QPSK.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f QPSK:<\/p>\n<pre><code class=\"python\">_NORM = np.sqrt(2.0)_MAPPING_TABLE = {    (0, 0): (-1.0 - 1j) \/ _NORM,    (0, 1): (-1.0 + 1j) \/ _NORM,    (1, 1): (1.0 + 1j) \/ _NORM,    (1, 0): (1.0 - 1j) \/ _NORM,}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 QPSK \u0431\u0438\u0442\u044b \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0438, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043a\u043b\u044e\u0447\u0438 <code>_MAPPING_TABLE<\/code> \u0437\u0430\u0434\u0430\u043d\u044b \u043a\u043e\u0440\u0442\u0435\u0436\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u0435\u0445\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0438 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 SNR \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u0432 \u0436\u0435\u0440\u0442\u0432\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">sym_tile=4,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>sym_tile<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c\u044b\u0439 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b. \u041d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u043f\u0440\u0438\u0440\u043e\u0441\u0442 SNR \u043d\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"10*log_{10}(4)\" alt=\"10*log_{10}(4)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c4\/dcf\/b78\/4c4dcfb780f3b24201a276422ab93dd3.svg\" width=\"101\" height=\"19\" data-width=\"11.929\" data-height=\"2.262\" data-vertical-align=\"-0.566\" style=\"width: 11.929ex; height: 2.262ex; vertical-align: -0.566ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c4\/dcf\/b78\/4c4dcfb780f3b24201a276422ab93dd3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c4\/dcf\/b78\/4c4dcfb780f3b24201a276422ab93dd3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>= 6.02 dB. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u0432 4 \u0440\u0430\u0437\u0430.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 sym_tile \u043f\u043e\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u0442\u0435\u043c.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u043c, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043b\u0438\u043d\u0433\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<h2>\u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0428\u0435\u043d\u043d\u043e\u043d\u0430<\/h2>\n<p>\u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0428\u0435\u043d\u043d\u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0443\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u0430\u0434\u0434\u0438\u0442\u0438\u0432\u043d\u044b\u043c \u0431\u0435\u043b\u044b\u043c \u0413\u0430\u0443\u0441\u0441\u043e\u0432\u0441\u043a\u0438\u043c \u0448\u0443\u043c\u043e\u043c (AWGN \u2014 Additive White Gaussian Noise).<\/p>\n<p>\u0420\u0430\u0441\u0447\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0428\u0435\u043d\u043d\u043e\u043d\u0430-\u0425\u0430\u0440\u0442\u043b\u0438:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"C = B \\log_2 \\left( 1 + \\frac{S}{N} \\right)\" alt=\"C = B \\log_2 \\left( 1 + \\frac{S}{N} \\right)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/ff\/ff5\/ff57dd4078c74d342a006d3f32059880.svg\" width=\"171\" height=\"43\" data-width=\"21.319\" data-height=\"5.428\" data-vertical-align=\"-2.148\" style=\"width: 21.319ex; height: 5.428ex; vertical-align: -2.148ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/ff\/ff5\/ff57dd4078c74d342a006d3f32059880.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/ff\/ff5\/ff57dd4078c74d342a006d3f32059880.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"C\" alt=\"C\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b4\/b9e\/79e\/3b4b9e79ef67ef543ab296090120bcdb.svg\" width=\"15\" height=\"14\" data-width=\"1.719\" data-height=\"1.645\" data-vertical-align=\"-0.05\" style=\"width: 1.719ex; height: 1.645ex; vertical-align: -0.05ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b4\/b9e\/79e\/3b4b9e79ef67ef543ab296090120bcdb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b4\/b9e\/79e\/3b4b9e79ef67ef543ab296090120bcdb.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430 (\u043f\u0440\u0435\u0434\u0435\u043b \u0428\u0435\u043d\u043d\u043e\u043d\u0430) \u0432 \u0431\u0438\u0442\u0430\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u0431\u0438\u0442\/\u0441)<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"B\" alt=\"B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/196\/25c\/5e1\/19625c5e162d09d52bd650208877948b.svg\" width=\"15\" height=\"13\" data-width=\"1.717\" data-height=\"1.545\" style=\"width: 1.717ex; height: 1.545ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/196\/25c\/5e1\/19625c5e162d09d52bd650208877948b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/196\/25c\/5e1\/19625c5e162d09d52bd650208877948b.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0413\u0435\u0440\u0446\u0430\u0445 (\u0413\u0446).<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"S\/N\" alt=\"S\/N\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ad\/0e7\/bfa\/2ad0e7bfa490a18fa9230bd77cf16f9f.svg\" width=\"39\" height=\"19\" data-width=\"4.6\" data-height=\"2.262\" data-vertical-align=\"-0.566\" style=\"width: 4.6ex; height: 2.262ex; vertical-align: -0.566ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ad\/0e7\/bfa\/2ad0e7bfa490a18fa9230bd77cf16f9f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ad\/0e7\/bfa\/2ad0e7bfa490a18fa9230bd77cf16f9f.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\/\u0448\u0443\u043c<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SNR \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0435\u0446\u0438\u0431\u0435\u043b\u0430\u0445, \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 SNR \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0432\u0438\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" class=\"formula\" source=\"SNR_{\\text{linear}} = 10^{\\frac{SNR_{\\text{dB}}}{10}}\" alt=\"SNR_{\\text{linear}} = 10^{\\frac{SNR_{\\text{dB}}}{10}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15e\/15e73d07f2179d3e7d4af6fbc3079845.svg\" width=\"157\" height=\"26\" data-width=\"19.577\" data-height=\"3.239\" data-vertical-align=\"-1.054\" style=\"width: 19.577ex; height: 3.239ex; vertical-align: -1.054ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15e\/15e73d07f2179d3e7d4af6fbc3079845.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/15\/15e\/15e73d07f2179d3e7d4af6fbc3079845.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0432 \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0428\u0435\u043d\u043d\u043e\u043d\u0430-\u0425\u0430\u0440\u0442\u043b\u0438 \u0448\u0438\u0440\u0438\u043d\u0443 \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f 2400-300=2100 \u0413\u0446 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SNR \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0443\u044e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0448\u0443\u043c\u0430.<\/p>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 1 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0428\u0435\u043d\u043d\u043e\u043d\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 SNR.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">SNR (dB)<\/p>\n<\/td>\n<td>\n<p align=\"left\">SNR (\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0435\u043b \u0428\u0435\u043d\u043d\u043e\u043d\u0430 (\u0431\u0438\u0442\/\u0441\u0435\u043a)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.1623<\/p>\n<\/td>\n<td>\n<p align=\"left\">4320.48 (max: 4200.00)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.5119<\/p>\n<\/td>\n<td>\n<p align=\"left\">3805.72<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.9953<\/p>\n<\/td>\n<td>\n<p align=\"left\">3323.63<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.5849<\/p>\n<\/td>\n<td>\n<p align=\"left\">2877.22<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.2589<\/p>\n<\/td>\n<td>\n<p align=\"left\">2468.84<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">2100.00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.7943<\/p>\n<\/td>\n<td>\n<p align=\"left\">1771.23<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.631<\/p>\n<\/td>\n<td>\n<p align=\"left\">1482.01<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-3<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.5012<\/p>\n<\/td>\n<td>\n<p align=\"left\">1230.82<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-4<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.3981<\/p>\n<\/td>\n<td>\n<p align=\"left\">1015.30<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.3162<\/p>\n<\/td>\n<td>\n<p align=\"left\">832.46<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-6<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.2512<\/p>\n<\/td>\n<td>\n<p align=\"left\">678.93<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-7<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.1995<\/p>\n<\/td>\n<td>\n<p align=\"left\">551.18<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-8<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.1585<\/p>\n<\/td>\n<td>\n<p align=\"left\">445.71<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">-9<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.1259<\/p>\n<\/td>\n<td>\n<p align=\"left\">359.25<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u041d\u0430\u0439\u043a\u0432\u0438\u0441\u0442\u0430 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"2B\" alt=\"2B\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/842\/81b\/713\/84281b713c9451257e330d46c6ca3482.svg\" width=\"24\" height=\"13\" data-width=\"2.848\" data-height=\"1.545\" style=\"width: 2.848ex; height: 1.545ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/842\/81b\/713\/84281b713c9451257e330d46c6ca3482.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/842\/81b\/713\/84281b713c9451257e330d46c6ca3482.svg 781w\" loading=\"lazy\" decode=\"async\"\/> = 2*2100 = 4200 \u0431\u0438\u0442\/\u0441\u0435\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SNR \u0441\u0432\u044b\u0448\u0435 5 \u0434\u0411 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b\u0430.<\/p>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u0428\u0435\u043d\u043d\u043e\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u0446\u0435\u043d\u043a\u0443 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0446\u0435\u043d\u043a\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a \u043f\u0440\u0435\u0434\u0435\u043b\u0443 \u0428\u0435\u043d\u043d\u043e\u043d\u0430.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u0430\u0439\u043b\u0438\u043d\u0433\u0430 \u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 4*0.0106+0.0026 = 0.0452 \u0441\u0435\u043a. \u0412\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 16 \u0431\u0438\u0442 \u0434\u043b\u044f BPSK \u0438 32 \u0434\u043b\u044f QPSK, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 353.9823 \u0431\u0438\u0442\/\u0441\u0435\u043a \u0438 707.9646 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 2 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u043e\u0446\u0435\u043d\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">SNR (dB)<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0435\u043b \u0428\u0435\u043d\u043d\u043e\u043d\u0430 (\u0431\u0438\u0442\/\u0441\u0435\u043a)<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">\u041c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 (\u0431\u0438\u0442\/\u0441\u0435\u043a)<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c (%)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0446\u0435\u043d\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">5<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">4200.00<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">16.85<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c QAM<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">3805.72<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">18.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c QAM<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">3<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">3323.63<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">21.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">2877.22<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">24.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">1<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">2468.84<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">28.67<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">0<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">2100.00<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">QPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">707.96<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">33.71<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-1<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">1771.23<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">19.98<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c QPSK<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-2<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">1482.01<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">23.88<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-3<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">1230.82<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">28.75<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-4<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">1015.30<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">34.86<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-5<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">832.46<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">42.52<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-6<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">678.93<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">52.13<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 FEC<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-7<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">551.18<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">64.22<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 FEC \u0441 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-8<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">445.71<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">79.41<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 FEC \u0441 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"59\" width=\"59\">\n<p align=\"left\">-9<\/p>\n<\/td>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">359.25<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">BPSK<\/p>\n<\/td>\n<td data-colwidth=\"104\" width=\"104\">\n<p align=\"left\">353.98<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">98.53<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0435\u043b<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b 2, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 -9 dB SNR, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 QAM. \u0422\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e QPSK \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f SNR \u0432 -2dB \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a (FEC \u2014 Forward Error Correction).<\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/h2>\n<p>\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0431\u0430\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 11 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0441\u0445\u0435\u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/246\/d75\/f6c\/246d75f6c0093ad41a210f3eb1cb9c22.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432.\" width=\"777\" height=\"249\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/246\/d75\/f6c\/246d75f6c0093ad41a210f3eb1cb9c22.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/246\/d75\/f6c\/246d75f6c0093ad41a210f3eb1cb9c22.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u043c \u0442\u0440\u0430\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043f\u043e\u043c\u0435\u0445\u043e\u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043b\u0438\u0432\u0438\u043d\u0433\u0443 \u0438 \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u043d\u0433\u0443. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f PSK-\u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u0432 IDFT. \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IDFT.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u043c\u0443. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0424\u0443\u0440\u044c\u0435 (DFT). PSK-\u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0435 (\u043c\u044f\u0433\u043a\u0438\u0435) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0435\u0440\u0435\u0434 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0412\u0438\u0442\u0435\u0440\u0431\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u044f\u0433\u043a\u0438\u0445 \u0431\u0438\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u0435\u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u0438\u043d\u0442\u0435\u0440\u043b\u0438\u0432\u0438\u043d\u0433\u0430. \u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c (CRC), \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ccb\/64b\/7ed\/ccb64b7ed4206391e777384cc11f6241.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.\" width=\"562\" height=\"789\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ccb\/64b\/7ed\/ccb64b7ed4206391e777384cc11f6241.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ccb\/64b\/7ed\/ccb64b7ed4206391e777384cc11f6241.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 11. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/374\/a30\/26b\/374a3026b7696aef39ecd7b4cffc8814.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.\" width=\"549\" height=\"763\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/374\/a30\/26b\/374a3026b7696aef39ecd7b4cffc8814.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/374\/a30\/26b\/374a3026b7696aef39ecd7b4cffc8814.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 12. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u0445 11 \u0438 12 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430<\/h3>\n<p>\u0412 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 13), \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0443\u044e \u0432 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (Header). \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0432 BPSK \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2153. \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043c, \u0442\u0438\u043f \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (Data).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/062\/9ef\/eb1\/0629efeb1897f5e902130246621de344.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.\" width=\"446\" height=\"50\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/062\/9ef\/eb1\/0629efeb1897f5e902130246621de344.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/062\/9ef\/eb1\/0629efeb1897f5e902130246621de344.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 13. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 14 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/405\/423\/e8a\/405423e8acffc996b18c78377c666172.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 14. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 14. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430.\" width=\"449\" height=\"30\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/405\/423\/e8a\/405423e8acffc996b18c78377c666172.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/405\/423\/e8a\/405423e8acffc996b18c78377c666172.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 14. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"python\">class PacketType(Enum):    BEACON = 0    DATA = 4class ModType(Enum):    BPSK = 0    QPSK = 1    ...class CCSpeed(Enum):    R13 = 0    R12 = 1    R23 = 2    R34 = 3@dataclassclass Header(PacketCRC8):    PACKET_SIZE: ClassVar[Final[int]] = 17 + PacketCRC8.CRC_SIZE    ver: int    typ: PacketType    mod: ModType    spd: CCSpeed    len: int    def encode(self) -&gt; npt.NDArray[np.uint8]:        ver = self._to_bits(self.ver, 2)        typ = self._to_bits(self.typ.value, 3)        mod = self._to_bits(self.mod.value, 2)        spd = self._to_bits(self.spd.value, 2)        len = self._to_bits(self.len, 8)        data = np.concatenate([ver, typ, mod, spd, len])        packet = self._append_crc(data)        return packet    @classmethod    def decode(cls, bits: npt.NDArray[np.uint8], check_crc: bool = True) -&gt; 'Header':        assert bits.shape == (cls.PACKET_SIZE,)        data = cls._extract_data(bits, check_crc)        ver = cls._from_bits(data[0:2])        typ = cls._from_bits(data[2:5])        mod = cls._from_bits(data[5:7])        spd = cls._from_bits(data[7:9])        len = cls._from_bits(data[9:17])        return cls(ver, PacketType(typ), ModType(mod), CCSpeed(spd), len)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>ver<\/code> (2 \u0431\u0438\u0442\u0430) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 1). \u041f\u043e\u043b\u0435 <code>typ<\/code> (3 \u0431\u0438\u0442\u0430) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043b\u044f <code>mod<\/code> \u0438 <code>spd<\/code> (\u043f\u043e 2 \u0431\u0438\u0442\u0430 \u043a\u0430\u0436\u0434\u044b\u0439) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0438\u043f\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438. \u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 <code>len<\/code> (8 \u0431\u0438\u0442), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0434\u043e 255 \u0431\u0438\u0442.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u044a\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 25 \u0431\u0438\u0442 (17 \u0431\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 8 \u0431\u0438\u0442 CRC).<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">Header(ver=1, typ= &lt; PacketType.BEACON: 0 &gt;, mod = &lt; ModType.BPSK: 0 &gt;, spd = &lt; CCSpeed.R13: 0 &gt;, len = 90)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438: <code>0b01_000_00_00_01011010_10011110.<\/code><\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b CRC-8. \u041f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0439 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 CRC \u043f\u0440\u0438\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c. \u0427\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439: \u043c\u0430\u044f\u043a, \u043f\u043e\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0439 \u0432 \u044d\u0444\u0438\u0440 \u0441\u0432\u043e\u0439 \u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0439 \u0441 QTH-\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u043c (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 15) \u0438 \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 16).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/178\/77a\/f9a\/17877af9a139c008cb03f022acfad211.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 15. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u044f\u043a\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 15. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u044f\u043a\u0430.\" width=\"445\" height=\"31\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/178\/77a\/f9a\/17877af9a139c008cb03f022acfad211.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/178\/77a\/f9a\/17877af9a139c008cb03f022acfad211.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 15. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u044f\u043a\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u044f\u043a\u0430:<\/p>\n<pre><code class=\"python\">class BeaconMode(Enum):    ...    BEACON = 15@dataclassclass Beacon(PacketCRC8):    PACKET_SIZE: ClassVar[Final[int]] = 82 + PacketCRC8.CRC_SIZE    callsign: str    qth: str    mode: BeaconMode = BeaconMode.BEACON    def encode(self) -&gt; npt.NDArray[np.uint8]:        call_val = callsign_to_int(self.callsign)        qth_val = qth6_to_int(self.qth)        call_bits = val_to_bits(call_val, 53)        qth_bits = val_to_bits(qth_val, 25)        mode_bits = val_to_bits(self.mode.value, 4)        data = np.concatenate([call_bits, qth_bits, mode_bits])        packet = self._append_crc(data)        return packet    @classmethod    def decode(cls, bits: npt.NDArray, check_crc: bool = True) -&gt; 'Beacon':        assert bits.shape == (cls.PACKET_SIZE,)        data = cls._extract_data(bits, check_crc)        call_bits = data[0:53]        qth_bits = data[53:78]        flag_bits = data[78:82]        call_val = bits_to_val(call_bits)        qth_val = bits_to_val(qth_bits)        mode = BeaconMode(bits_to_val(flag_bits))        args = int_to_callsign(call_val), int_to_qth6(qth_val), mode        return cls(*args)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u043b\u044f\u0445 <code>callsign<\/code> \u0438 <code>qth<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 53 \u0438 25 \u0431\u0438\u0442. \u041f\u043e\u043b\u0435 <code>mode<\/code> (4 \u0431\u0438\u0442\u0430) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0430\u044f\u043a\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>BEACON<\/code> \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u044f\u043a\u0430.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u043b \u043c\u0430\u044f\u043a\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0448\u0443\u043c\u043e\u0432, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c BPSK \u0438 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u0437\u044b\u0432\u043d\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c Base38:<\/p>\n<pre><code class=\"python\">ALPHABET = \" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\/\"BASE_CALL = len(ALPHABET)MAX_CALL_LEN = 10def callsign_to_int(callsign: str) -&gt; int:    s = callsign.strip().upper()[:MAX_CALL_LEN].ljust(MAX_CALL_LEN, \" \")    val = 0    for char in s:        val = val * BASE_CALL + ALPHABET.index(char)    return valdef int_to_callsign(val: int) -&gt; str:    chars = []    for _ in range(MAX_CALL_LEN):        chars.append(ALPHABET[val % BASE_CALL])        val \/\/= BASE_CALL    return \"\".join(reversed(chars)).strip()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0438\u0437 FT8, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0432 4 \u0431\u0438\u0442\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0437\u044b\u0432\u043d\u043e\u0433\u043e R9FEU: <code>4671407026402144<\/code> (<code>0b10000100110001001111010110100011010001111001101100000<\/code>)<\/p>\n<details class=\"spoiler\">\n<summary>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f QTH-\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438\u0437 FT8, \u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b \u0434\u043e 6 \u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def qth6_to_int(qth: str) -&gt; int:    q = qth.upper()    assert len(q) == 6      off = ord('A')        lon_field = ord(q[0]) - off    lat_field = ord(q[1]) - off    lon_sq = int(q[2])    lat_sq = int(q[3])    lon_sub = ord(q[4]) - off    lat_sub = ord(q[5]) - off    val = lon_field    val = val * 18 + lat_field    val = val * 10 + lon_sq    val = val * 10 + lat_sq    val = val * 24 + lon_sub    val = val * 24 + lat_sub    return valdef int_to_qth6(val: int) -&gt; str:    lat_sub = val % 24    val \/\/= 24    lon_sub = val % 24    val \/\/= 24    lat_sq = val % 10    val \/\/= 10    lon_sq = val % 10    val \/\/= 10    lat_field = val % 18    val \/\/= 18    lon_field = val % 18    off = ord('A')    return f\"{chr(lon_field + off)}{chr(lat_field + off)}{lon_sq}{lat_sq}{chr(lon_sub + off)}{chr(lat_sub + off)}\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 6 \u0437\u043d\u0430\u0447\u043d\u043e\u0433\u043e \u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 LO88ca: <code>12261936<\/code> (<code>0b101110110001101000110000<\/code>).<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0431\u0438\u0442:<\/p>\n<pre><code class=\"python\">@staticmethoddef _to_bits(val: int, count: int) -&gt; npt.NDArray[np.uint8]:    val = val &amp; ((1 &lt;&lt; count) - 1)    bytes_count = (count + 7) \/\/ 8    val_bytes = val.to_bytes(bytes_count, byteorder='big')    val_array = np.frombuffer(val_bytes, dtype=np.uint8)    return np.unpackbits(val_array)[-count:]@staticmethoddef _from_bits(bits: npt.NDArray[np.uint8]) -&gt; int:    pad_width = (8 - (len(bits) % 8)) % 8    padded_bits = np.pad(bits, (pad_width, 0), mode=\"constant\", constant_values=0)    bytes_array = np.packbits(padded_bits)    return int.from_bytes(bytes_array.tobytes(), byteorder='big')<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd4\/81d\/0a5\/bd481d0a5fd591c48572c87d0e6a119b.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 16. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 16. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\" width=\"448\" height=\"28\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bd4\/81d\/0a5\/bd481d0a5fd591c48572c87d0e6a119b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd4\/81d\/0a5\/bd481d0a5fd591c48572c87d0e6a119b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 16. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"python\">@dataclassclass Data(PacketCRC16):    reserved: int    payload: bytes    def encode(self) -&gt; npt.NDArray[np.uint8]:        reserved = self._to_bits(self.reserved, 20)        payload = np.unpackbits(np.frombuffer(self.payload, dtype=np.uint8))        data = np.concatenate([reserved, payload])        packet = self._append_crc(data)        return packet    @classmethod    def decode(cls, bits: npt.NDArray[np.uint8], check_crc: bool = True) -&gt; 'Data':        assert bits.shape &gt;= (44,)        data = cls._extract_data(bits, check_crc)        reserved = cls._from_bits(data[0:20])        payload = np.packbits(data[20:]).tobytes()        return cls(reserved, payload)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0435 <code>reserved<\/code> (20 \u0431\u0438\u0442) \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043b\u0435 <code>payload<\/code> \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 27 \u0431\u0430\u0439\u0442.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0431\u0430\u0439\u0442, \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 16 \u0431\u0438\u0442\u043d\u044b\u0439 CRC.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443, \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u0432 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0435\u0433\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<h2>CRC-8\/CRC-16<\/h2>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438\u00a0 CRC-8 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043c\u0430\u043b\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0438 CRC-16 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"python\">def crc(bits: npt.NDArray[np.uint8], polynomial: int, seed: int, crc_bits: int) -&gt; int:    mask = (1 &lt;&lt; crc_bits) - 1    crc = seed &amp; mask    for bit in bits:        crc_msb = (crc &gt;&gt; (crc_bits - 1)) &amp; 1        crc = (crc &lt;&lt; 1) &amp; mask        if crc_msb ^ (bit &amp; 1):            crc ^= polynomial    return crc<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>crc<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0438\u0442 <code>bits<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 polynomial. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>seed<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 CRC; \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>crc_bits<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u0432\u0437\u044f\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u044b \u0438\u0437 LTE \u0438 Wi-Fi:<\/p>\n<pre><code class=\"python\">POLY_ITU_LTE = 0x07POLY_CCITT_WIFI = 0x1021<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 <code>crc8_lte<\/code> \u0438 <code>crc16_ccitt<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u0431\u0435\u0440\u0442\u043a\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 CRC \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"python\">def crc8(bits: npt.NDArray[np.uint8], polynomial: int) -&gt; int:    return crc(bits, polynomial, 0xff, 8)def crc16(bits: npt.NDArray[np.uint8], polynomial: int) -&gt; int:    return crc(bits, polynomial, 0xffff, 16)def crc8_lte(bits: npt.NDArray[np.uint8]) -&gt; int:    return crc8(bits, POLY_ITU_LTE)def crc16_ccitt(bits: npt.NDArray[np.uint8]) -&gt; int:    return crc16(bits, POLY_CCITT_WIFI)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0438\u0442 <code>0b1000010011000100111101011010001101000111100110110000001011101100011000000001110000<\/code> CRC-8 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <code>0b10101101<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 <code>0b00000011000001010111001000000010000000100000001000000101010001101000011011110111010101100111011010000010000001110100011010000110100101110011001000000110001001100101001000000110110101100001011001000110111001100101011100110111001100101100<\/code> CRC-16 \u0440\u0430\u0432\u0435\u043d <code>0b1001001100011111<\/code>.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 CRC \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"python\">@classmethoddef _check_crc(cls, data: npt.NDArray[np.uint8], crc_data: npt.NDArray[np.uint8],                    raise_exception: bool = True) -&gt; bool:    crc_our = cls._calc_crc(data)    crc_their = cls._from_bits(crc_data)    ok = crc_our == crc_their    if raise_exception and not ok:        raise PacketCRCMissmatch(\"Packet CRC missmatch\")    return ok<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430<\/h2>\n<p>\u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0438\u0437 \u044d\u0444\u0438\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u043c\u043e\u0433 \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447:<\/p>\n<ol>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c CFO;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0443\u043d\u043a\u0442 \u043d\u043e\u043c\u0435\u0440 1 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u043e\u0432 2 \u0438 3.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a OFDM \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438 \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f (\u0410\u041a\u0424) \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u043e\u0447\u0435\u043d\u044c \u0447\u0435\u0442\u043a\u0438\u0439 \u043f\u0438\u043a \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u043a\u043e\u0432\u044b\u0435 \u043b\u0435\u043f\u0435\u0441\u0442\u043a\u0438 (\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u044b). \u0422\u0430\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0410\u041a\u0424 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443 (Zadoff-Chu, \u0434\u0430\u043b\u0435\u0435 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c), \u0448\u0438\u0440\u043e\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u0430\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0433\u0440\u0443\u043f\u043f\u0435 CAZAC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c Constant Amplitude Zero AutoCorrelation, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0435 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430, \u0430 \u0410\u041a\u0424 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0434\u0435\u043b\u044c\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0438\u043a \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 19).<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"x_u(n) = \\begin{cases}  \\exp\\left( -j \\frac{\\pi u n^2}{N} \\right), &amp; \\text{if } N \\text{ is even} \\\\  \\exp\\left( -j \\frac{\\pi u n (n + 1)}{N} \\right), &amp; \\text{if } N \\text{ is odd}  \\end{cases}\" alt=\"x_u(n) = \\begin{cases}  \\exp\\left( -j \\frac{\\pi u n^2}{N} \\right), &amp; \\text{if } N \\text{ is even} \\\\  \\exp\\left( -j \\frac{\\pi u n (n + 1)}{N} \\right), &amp; \\text{if } N \\text{ is odd}  \\end{cases}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/06\/063\/0639249d2e33bf7e78f96a0d37e4eac1.svg\" width=\"334\" height=\"69\" data-width=\"41.703\" data-height=\"8.593\" data-vertical-align=\"-3.731\" style=\"width: 41.703ex; height: 8.593ex; vertical-align: -3.731ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/06\/063\/0639249d2e33bf7e78f96a0d37e4eac1.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/06\/063\/0639249d2e33bf7e78f96a0d37e4eac1.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"python\">@staticmethoddef _gen_zc_seq(root: int, length: int) -&gt; npt.NDArray[np.complex64]:    n = np.arange(length)    seq = np.exp(-1j * np.pi * root * n * (n + length % 2) \/ length)    return seq<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c: \u0435\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0432\u043d\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0434\u0435\u043b\u044c\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 19), \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0434\u043b\u0438\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0431\u044b\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">zc_preamble_root=17,zc_preamble_len=23,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0440\u0430\u0432\u043d\u043e\u0439 23, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u043d\u044f \u0437\u0430\u0434\u0430\u043d\u043e \u043a\u0430\u043a 17, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0430 23 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0449\u0435 \u0438 \u0441\u0430\u043c\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u043d\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u043b\u0438\u043d\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437-\u0437\u0430 \u0435\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u0440\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b \u043e\u0441\u0442\u0430\u0442\u043a\u0443 \u043e\u0442 \u0438\u0445 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0438 \u0434\u043b\u0438\u043d\u0430 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0432\u043d\u044b 23, \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0438 \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ef\/fda\/b13\/0effdab133ca91cc59d52d3c30e0848a.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 17. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 17. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" width=\"756\" height=\"681\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0ef\/fda\/b13\/0effdab133ca91cc59d52d3c30e0848a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ef\/fda\/b13\/0effdab133ca91cc59d52d3c30e0848a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 17. \u0421\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c58\/b58\/ddd\/c58b58ddd7593aedea58b5969174f4a9.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 18. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f ZC \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 18. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f ZC \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" width=\"957\" height=\"769\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c58\/b58\/ddd\/c58b58ddd7593aedea58b5969174f4a9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c58\/b58\/ddd\/c58b58ddd7593aedea58b5969174f4a9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 18. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f ZC \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u0445 17 \u0438 18 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0444\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443 \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/488\/c37\/715\/488c37715c460d7108e2cb45a745fd58.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 19. \u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0430\u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0410\u041a\u0424 \u0434\u043b\u044f ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 19. \u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0430\u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0410\u041a\u0424 \u0434\u043b\u044f ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" width=\"1836\" height=\"726\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/488\/c37\/715\/488c37715c460d7108e2cb45a745fd58.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/488\/c37\/715\/488c37715c460d7108e2cb45a745fd58.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 19. \u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0430\u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0410\u041a\u0424 \u0434\u043b\u044f ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043a\u043e\u0432\u044b\u0445 \u043b\u0435\u043f\u0435\u0441\u0442\u043a\u043e\u0432 \u0410\u041a\u0424 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 19) \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0434\u0432\u0438\u0433\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0441 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 OFDM \u0441\u0438\u043c\u0432\u043e\u043b. ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043f\u043e\u043c\u0435\u0445\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u043e\u043c SNR. \u0414\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u0435\u0445\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 (\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432), \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u0439\u043b\u0438\u043d\u0433\u0430, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<pre><code class=\"python\">zc_preamble_count=4,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 ISI \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0441\u0432\u0435\u0440\u0442\u043a\u0438 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441.<\/p>\n<pre><code class=\"python\">def _gen_preamble_symbol(self):    symbol_freq = np.zeros(self._fft_bins, dtype=np.complex64)    zc_seq = self._gen_zc_seq(self._zc_preamble_root, self._zc_preamble_len)    start_bin = self._bin_center - (self._zc_preamble_len \/\/ 2)    symbol_freq[start_bin: start_bin + self._zc_preamble_len] = zc_seq    symbol = self._idft(symbol_freq)    return symbol...def gen_zc_preamble(self) -&gt; npt.NDArray[np.complex64]:    preamble_zc = self._gen_preamble_symbol()    preamble_base = np.tile(preamble_zc, self._zc_preamble_count)    preamble_block = self._add_cp(preamble_base)    return preamble_block<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043d\u043e \u0434\u0430\u0435\u0442 \u043d\u0438\u0437\u043a\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 CFO, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 CFO \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0442\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043f\u0438\u043a \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e OFDM, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0446\u0435\u043d\u043a\u0430 CFO \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u0431\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 CFO \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0435\u0442\u043a\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 \u0444\u0430\u0437.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b, \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 4 \u0442\u043e\u043d\u043e\u0432, \u0441\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: <\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0444\u0438\u0440\u0435 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u043b\u0430\u0441\u044c \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0431\u044b\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0410\u0420\u0423 (AGC), \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u043a \u043a\u043b\u0438\u043f\u043f\u0438\u043d\u0433\u0443 \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0410\u0420\u0423. \u041d\u043e, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u043e\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0410\u0420\u0423 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043b\u0430\u0431\u043e, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0435\u043c\u043a\u0443\u044e \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u044e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0435\u0439 CFO, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0449\u0435\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u0438 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f 4 \u0442\u043e\u043d\u0430 \u0441 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u043e\u043c \u0432 4 \u043f\u043e\u043b\u043e\u0441\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<pre><code class=\"python\">self._newman_preamble_bins = np.arange(self._bin_center - 6, self._bin_center + 6 + 1, 4)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e\u043b\u043e\u0441: 8, 12, 16, 20.<\/p>\n<p>\u041e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u043d\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435, \u043d\u043e \u043d\u0435 \u0434\u0430\u0435\u0442 \u043e\u0446\u0435\u043d\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043b\u043e\u0436\u043d\u043e-\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0447\u0435\u0442\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u043d\u043e\u0432 \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u0432 2 \u043f\u043e\u043b\u043e\u0441\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439, \u0447\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0443\u0436\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<pre><code class=\"python\">self._newman_preamble_shifts = [0, 2]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e\u043b\u043e\u0441: 10, 14, 18, 22.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0435 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 IDFT \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0444\u0430\u0437 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0438\u043a \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u0434\u0435\u043b\u044c\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438; \u0433\u043e\u0432\u043e\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0433\u0440\u043e\u043c\u043a\u0438\u0439 \u0449\u0435\u043b\u0447\u043e\u043a.<\/p>\n<p>\u0412 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0438\u043d\u0442\u0435\u0437 \u0442\u043e\u043d\u043e\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u041d\u044c\u044e\u043c\u0430\u043d\u0430, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0430\u0437 \u0442\u043e\u043d\u043e\u0432, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u043a-\u0444\u0430\u043a\u0442\u043e\u0440\u0430 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 CAZAC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b).<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\phi_m = \\frac{\\pi \\cdot m^2}{M}\" alt=\"\\phi_m = \\frac{\\pi \\cdot m^2}{M}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e2\/e2a\/e2a6792b5d6fc24ea5505a3da91e2b9e.svg\" width=\"103\" height=\"40\" data-width=\"12.852\" data-height=\"4.968\" data-vertical-align=\"-1.918\" style=\"width: 12.852ex; height: 4.968ex; vertical-align: -1.918ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e2\/e2a\/e2a6792b5d6fc24ea5505a3da91e2b9e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e2\/e2a\/e2a6792b5d6fc24ea5505a3da91e2b9e.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<pre><code class=\"python\">@staticmethoddef _gen_newman_phases(M: int) -&gt; npt.NDArray[np.float64]:    m = np.arange(M)    newman_phases = (np.pi * (m ** 2)) \/ M    return newman_phases<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>gen_newman_preamble_tiles<\/code> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043f\u0435\u043a\u0442\u0440 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">def gen_newman_preamble_tiles(self) -&gt; npt.NDArray[np.complex64]:    phases = self._gen_newman_phases(M=len(self._newman_preamble_bins))    tone_values = np.exp(1j * phases).astype(np.complex64)    sym_mat = np.zeros((len(self._newman_preamble_shifts), self._fft_bins), dtype=np.complex64)    for i, shift in enumerate(self._newman_preamble_shifts):        current_bins = self._newman_preamble_bins + shift        sym_mat[i, current_bins] = tone_values        sym_mat[i, self._fft_bins - current_bins] = np.conj(tone_values)    return sym_mat<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>gen_newman_preamble<\/code> \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0435\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u041a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0410\u0420\u0423, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>_newmanpreamble_tile<\/code>.<\/p>\n<pre><code class=\"python\">self._newman_preamble_tile = 10...def gen_newman_preamble(self) -&gt; typing.Iterator[npt.NDArray[np.complex64]]:    sym_mat = self.gen_newman_preamble_tiles()    for i, symbol in enumerate(sym_mat):        signal = self._idft(symbol)        signal_tile = np.tile(signal, self._newman_preamble_tile * (2 if i == 0 else 1))        yield signal_tile<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0435\u0442\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u0410\u0420\u0423 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430.<\/p>\n<pre><code class=\"python\">def gen_preamble(self) -&gt; typing.Iterator[npt.NDArray[np.complex64]]:    yield self.gen_zc_preamble()...def gen_preamble(self) -&gt; typing.Iterator[npt.NDArray[np.complex64]]:     yield from self.gen_newman_preamble()     yield from super().gen_preamble()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 20 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3a1\/b49\/6c4\/3a1b496c4236ff94f91650ca02c354a5.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 20. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 20. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b.\" width=\"2014\" height=\"1612\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3a1\/b49\/6c4\/3a1b496c4236ff94f91650ca02c354a5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3a1\/b49\/6c4\/3a1b496c4236ff94f91650ca02c354a5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 20. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b.<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u043e\u0438\u0441\u043a \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b<\/h2>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430: \u043f\u043e\u0438\u0441\u043a \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u0438 \u043f\u043e\u0438\u0441\u043a ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b.<\/p>\n<pre><code class=\"python\">def detect_preamble(self, signal: npt.NDArray[np.complex64]) -&gt; typing.Optional[typing.Tuple[int, float]]:   return self.detect_zc_preamble(signal)...def detect_preamble(self, signal: npt.NDArray[np.complex64]) -&gt; typing.Optional[typing.Tuple[int, float]]:    if not (coarse := self.detect_newman_preamble(signal)):        return None    coarse_sample, coarse_cfo = coarse    coarse_shifted = freq_shift(self._sample_rate, signal[coarse_sample:], coarse_cfo)    if not (fine := super().detect_preamble(coarse_shifted)):        return None    fine_sample, fine_cfo = fine    cfo = coarse_cfo + fine_cfo    return (fine_sample + coarse_sample, cfo)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0430\u0437\u044b \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u043d\u0435 \u043d\u0435\u0441\u0443\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0441\u043f\u0435\u043a\u0442\u0440\u0430 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0449\u0435 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e CFO.<\/p>\n<pre><code class=\"python\">def detect_newman_preamble(self, signal: npt.NDArray[np.complex64]) -&gt; typing.Optional[typing.Tuple[int, float]]:    N = self._fft_bins    T = self._newman_preamble_tile    bin_width = self._sample_rate \/ N    sym_mat = self.gen_newman_preamble_tiles()    K = sym_mat.shape[0]    masks = (np.abs(sym_mat) &gt; 0).astype(np.float32)    cfo_shifts = np.arange(-self._max_cfo, self._max_cfo + 1)    num_shifts = len(cfo_shifts)...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0433\u0440\u0443\u0431\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 CFO \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<\/p>\n<pre><code class=\"python\">...    shifted_masks_mat = np.zeros((K, num_shifts, N), dtype=np.float32)    for s_idx, shift in enumerate(cfo_shifts):        if shift &gt;= 0:            shifted_masks_mat[:, s_idx, shift:] = masks[:, :-shift] if shift &gt; 0 else masks        else:            shifted_masks_mat[:, s_idx, :shift] = masks[:, -shift:]    num_blocks = len(signal) \/\/ N    total_preamble_blocks = 2 * T + (K - 1) * T    if num_blocks &lt; total_preamble_blocks:        return None...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0440\u0430\u0432\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u0435 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u043a\u0442\u0440 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0447\u0430\u0441\u0442\u043e\u0442.<\/p>\n<pre><code class=\"python\">...    spectrogram = np.zeros((num_blocks, N), dtype=np.float32)    for b in range(num_blocks):        spectrogram[b, :] = np.abs(np.fft.fft(signal[b * N: (b + 1) * N])) ** 2    best_metric = -1.0    best_block_idx = 0    best_cfo_idx = 0...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u044d\u043d\u0435\u0440\u0433\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0441\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a.<\/p>\n<pre><code class=\"python\">...    for b in range(num_blocks - total_preamble_blocks + 1):        accum_symbols = np.zeros((K, N), dtype=np.float32)        current_block_offset = b        for k in range(K):            blocks_to_sum = 2 * T if k == 0 else T            accum_symbols[k, :] = np.sum(                spectrogram[current_block_offset: current_block_offset + blocks_to_sum, :],                axis=0            )            current_block_offset += blocks_to_sum        signal_powers = np.sum(accum_symbols[:, np.newaxis, :] * shifted_masks_mat, axis=2)        total_powers = np.sum(accum_symbols, axis=1)[:, np.newaxis] + 1e-10        norm_powers = signal_powers \/ total_powers...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043c\u0435\u0442\u0440\u0438\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u043a\u0438 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c CFO.<\/p>\n<pre><code class=\"python\">...        metrics_for_all_shifts = np.prod(norm_powers, axis=0)        max_shift_idx = np.argmax(metrics_for_all_shifts)        current_best_metric = metrics_for_all_shifts[max_shift_idx]        if current_best_metric &gt; best_metric:            best_metric = current_best_metric            best_block_idx = b            best_cfo_idx = max_shift_idx...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u043d\u0438\u0436\u0435 \u043f\u043e\u0440\u043e\u0433\u0430, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0448\u0443\u043c\u043e\u043c.<\/p>\n<pre><code class=\"python\">...    threshold = 0.05    if best_metric &lt; threshold:        return None...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0443\u0431\u0430\u044f \u0438 \u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0438 CFO. \u0413\u0440\u0443\u0431\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0432 \u0441\u043f\u0435\u043a\u0442\u0440\u0435. \u0414\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>coarse_cfo_hz<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437, \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c CFO.<\/p>\n<pre><code class=\"python\">...    sample_index = best_block_idx * N    coarse_cfo_bin = cfo_shifts[best_cfo_idx]    coarse_cfo_hz = coarse_cfo_bin * bin_width    preamble_part = signal[sample_index: sample_index + 2 * T * N]    t = np.arange(len(preamble_part))    preamble_corrected = preamble_part * np.exp(-1j * 2 * np.pi * coarse_cfo_hz * t \/ self._sample_rate)    r_sum = np.sum(np.conj(preamble_corrected[:-N]) * preamble_corrected[N:])    phase_diff = np.angle(r_sum)    cfo_error = phase_diff * self._sample_rate \/ (2 * np.pi * N)    cfo = coarse_cfo_hz + cfo_error    return sample_index, cfo<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u041d\u044c\u044e\u043c\u0430\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u043d\u0438\u044f CFO \u0434\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0433\u0435\u0440\u0446, \u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0435\u0440\u044f\u0435\u0442 \u0444\u0430\u0437\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u043e\u0441\u0442\u0443 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0448\u0443\u043c\u0430.<\/p>\n<p>\u041b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430, \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u043c ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b, \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440.<\/p>\n<pre><code class=\"python\">def detect_zc_preamble(self, signal: npt.NDArray[np.complex64]) -&gt; typing.Optional[typing.Tuple[int, float]]:    N = self._fft_bins    L = self._zc_preamble_count    CP = self._cyclic_prefix    preamble_len = L * N    assert len(signal) &gt;= preamble_len...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0443, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0433\u0438\u043f\u043e\u0442\u0435\u0437, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 CFO \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 <code>-max_cfo<\/code> \u0434\u043e <code>max_cfo<\/code>.<\/p>\n<pre><code class=\"python\">...    max_cfo = self._max_cfo    hypotheses = np.arange(-max_cfo, max_cfo + 1)    global_metric_max = -1.0    best_m = 0    best_start_zc_coarse = 0    preamble_block = self.gen_zc_preamble()    one_zc_base = preamble_block[-N:]    sig_energy_single = np.abs(signal) ** 2    energy_cumsum = np.cumsum(np.insert(sig_energy_single, 0, 0.0))...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e \u0441\u043e\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u044b\u0439 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b). <code>fftconvolve<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440.<\/p>\n<pre><code class=\"python\">...    for m in hypotheses:        t = np.arange(N)        cfo_shift_vector = np.exp(2j * np.pi * m * t \/ N)        modulated_zc = one_zc_base * cfo_shift_vector        one_zc_kernel = np.conj(modulated_zc[::-1])        corr_single = np.abs(fftconvolve(signal, one_zc_kernel, mode=\"valid\"))        coarse_corr = np.zeros(len(corr_single) - (L - 1) * N)        for i in range(L):            shift = i * N            coarse_corr += corr_single[shift: shift + len(coarse_corr)]        local_max_idx = np.argmax(coarse_corr)        local_max_val = coarse_corr[local_max_idx]...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0438\u043a\u0430 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"python\">...        idx_start = local_max_idx        idx_end = local_max_idx + preamble_len        if idx_end &lt;= len(signal):            window_energy = energy_cumsum[idx_end] - energy_cumsum[idx_start]            epsilon = 1e-8            if window_energy &gt; epsilon:                local_metric = local_max_val \/ (window_energy * preamble_len) ** 0.5            else:                local_metric = 0.0            mean_corr_floor = np.mean(coarse_corr)            peak_to_floor_ratio = local_max_val \/ (mean_corr_floor + epsilon)            base_threshold = self._detection_threshold            if peak_to_floor_ratio &lt; 3.5:                dynamic_threshold = base_threshold + 0.1 * (3.5 - peak_to_floor_ratio)                dynamic_threshold = min(dynamic_threshold, 0.45)            else:                dynamic_threshold = base_threshold        else:            local_metric = 0.0            dynamic_threshold = self._detection_threshold...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u0441 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u043c\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438.<\/p>\n<pre><code class=\"python\">...        if local_metric &gt; global_metric_max and local_metric &gt;= dynamic_threshold:            global_metric_max = local_metric            best_start_zc_coarse = local_max_idx            best_m = m    if global_metric_max &lt;= 0.0:        return None    start_zc_coarse = best_start_zc_coarse    true_start_zc = start_zc_coarse    est_time = true_start_zc - CP    if true_start_zc + preamble_len &gt; len(signal) or true_start_zc &lt; 0:        return None...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0439 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0435\u0440\u043e\u0442\u0430\u0446\u0438\u044f \u0444\u0430\u0437\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044f \u0433\u0440\u0443\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CFO. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0434\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443 CFO.<\/p>\n<pre><code class=\"python\">...    preamble_signal = signal[true_start_zc: true_start_zc + preamble_len]    t_full = np.arange(preamble_len)    de_rotated_preamble = preamble_signal * np.exp(-2j * np.pi * best_m * t_full \/ N)    sig_current = de_rotated_preamble[: (L - 1) * N]    sig_delayed = de_rotated_preamble[N: preamble_len]    r_vector = np.sum(np.conj(sig_current) * sig_delayed)    phase_diff = np.angle(r_vector)    fractional_cfo = phase_diff \/ (2 * np.pi * (N \/ self._sample_rate))    subcarrier_spacing = self._sample_rate \/ N    final_cfo = (best_m * subcarrier_spacing) + fractional_cfo    final_time = est_time + len(preamble_block)    return final_time, final_cfo<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0441\u0435\u043c\u043f\u043b\u0430, \u0432 <code>est_time<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u0441\u044d\u043c\u043f\u043b\u0430, \u0433\u0434\u0435 \u0431\u044b\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>final_time<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u044d\u043c\u043f\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u044b.<\/p>\n<h3>\u041f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0435 \u043f\u043e\u0434 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>1+0j<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u0442\u044b\u0439 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043e\u0439 \u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0444\u0430\u0437\u043e\u0439. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u043e\u0441\u0442\u0443 \u043f\u0438\u043a-\u0444\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443.<\/p>\n<pre><code class=\"python\">def _get_pilot_values(self) -&gt; npt.NDArray[np.complex64]:    return self._gen_zc_seq(self._zc_pilots_root, self._pilots_count)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"python\">zc_pilots_root=3,zc_pilots_count=7,<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u043e\u0439, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0434\u043b\u044f \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 ZC-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u2014 \u043e\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u043a-\u0444\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<\/blockquote>\n<h3>PSK \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430<\/h3>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0432 OFDM \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u0435\u043c\u043a\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0435\u043c\u043a\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0431\u0438\u0442 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0438, \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0432\u0435\u043d \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430.<\/p>\n<pre><code class=\"python\">def _serial_to_parallel(self, bits: npt.NDArray[np.complex64]):    return bits.reshape((self.data_carriers_len, self._mapper.MU))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>_serialto_parallel<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0431\u0438\u0442 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0438\u0442, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u0438\u043d PSK-\u0441\u0438\u043c\u0432\u043e\u043b (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>MU<\/code>). \u0422\u0430\u043a, \u0434\u043b\u044f BPSK \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1 \u0431\u0438\u0442, \u0430 \u0434\u043b\u044f QPSK \u2014 2 \u0431\u0438\u0442\u0430.<\/p>\n<p>\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 PSK-\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c map \u043a\u043b\u0430\u0441\u0441\u0430 PSKMapper:<\/p>\n<pre><code class=\"python\">class PSKMapper(ABC):    ...    @classmethod    def map(cls, bits: npt.NDArray) -&gt; npt.NDArray:        m_table = cls._mapping_table()        return np.array([m_table[tuple(b)] for b in bits])class BPSKMapper(PSKMapper):    MU = 1    _MAPPING_TABLE = {        (0,): -1 + 0j,        (1,): 1 + 0j,    }class QPSKMapper(PSKMapper):    MU = 2    _NORM = np.sqrt(2.0)    _MAPPING_TABLE = {        (0, 0): (-1.0 - 1j) \/ _NORM,        (0, 1): (-1.0 + 1j) \/ _NORM,        (1, 1): (1.0 + 1j) \/ _NORM,        (1, 0): (1.0 - 1j) \/ _NORM,    }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0432\u0445\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 map \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>_serialto_parallel<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>MU<\/code> (<img decoding=\"async\" class=\"formula inline\" source=\"\u03bc\" alt=\"\u03bc\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/184\/7ea\/ef5\/1847eaef51f4aca8a926eab4c2c8d04d.svg\" width=\"12\" height=\"13\" data-width=\"1.364\" data-height=\"1.489\" data-vertical-align=\"-0.489\" style=\"width: 1.364ex; height: 1.489ex; vertical-align: -0.489ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/184\/7ea\/ef5\/1847eaef51f4aca8a926eab4c2c8d04d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/184\/7ea\/ef5\/1847eaef51f4aca8a926eab4c2c8d04d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0438\u0442 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b.<\/p>\n<pre><code class=\"python\">def _map_subsymbols_bits(self, bits: npt.NDArray) -&gt; npt.NDArray[np.complex64]:    bits_sp = self._serial_to_parallel(bits)    subsymbols = self._mapper.map(bits_sp)    return subsymbols<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>_mapsubsymbols_bits<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0431\u0438\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 PSK \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>\u041c\u0430\u0441\u0441\u0438\u0432 PSK-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438:<\/p>\n<pre><code class=\"python\">def gen_symbol(self, bits: npt.NDArray) -&gt; npt.NDArray[np.complex64]:    subsymbols = self._map_subsymbols_bits(bits)    symbol = np.zeros(self._fft_bins, dtype=np.complex64)    symbol[self._channel_indices] = subsymbols    mirror_bins = self._fft_bins - np.array(self._channel_indices)    symbol[mirror_bins] = np.conj(subsymbols)    return symbol<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u2014 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435:<\/p>\n<pre><code class=\"python\">def _add_cp(self, signal: npt.NDArray[np.complex64]) -&gt; npt.NDArray[np.complex64]:    cp = signal[-self.cyclic_prefix:]    return np.hstack([cp, signal])def _modulate_signal(self, symbol: npt.NDArray[np.complex64]) -&gt; npt.NDArray[np.complex64]:    signal = self._idft(symbol)    return signaldef modulate_symbol_cp(self, bits: npt.NDArray) -&gt; npt.NDArray[np.complex64]:    symbol = self.gen_symbol(bits)    signal = self._modulate_signal(symbol)    signal_cp = self._add_cp(signal)    return signal_cp<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0414\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f \u0438 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430<\/h3>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430:<\/p>\n<pre><code class=\"python\">def demodulate_symbol_cp(self, symbol: npt.NDArray[np.complex64]) -&gt; npt.NDArray[np.complex64]:    assert len(symbol) == self.symbol_len    signal_no_cp = self._remove_cp(symbol)    demod_all = self._demodulate_signal(signal_no_cp)    return demod_all<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043f\u0440\u0438\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u043c \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443.<\/p>\n<pre><code class=\"python\">def _demodulate_signal(self, signal: npt.NDArray[np.complex64]) -&gt; npt.NDArray[np.complex64]:    repeats = signal.reshape(self.sym_tile, -1)    tiles = self.sym_tile...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0438\u0441\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430 \u0444\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0430\u044f \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">...    x_data = [0]    y_data = [0.0]    step = min(3, tiles - 1)    phase_diffs = {}    for step in range(1, step + 1):        for i in range(tiles - step):            j = i + step            R_ij = np.sum(repeats[i] * np.conj(repeats[j]))            phase_diffs[(i, j)] = np.angle(R_ij)...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0441\u0447\u0435\u0442 \u0444\u0430\u0437 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e.<\/p>\n<pre><code class=\"python\">...    for target in range(1, tiles):        if target &lt;= step:            x_data.append(target)            y_data.append(phase_diffs[(0, target)])        chain_phase = 0.0        for i in range(target):            chain_phase += phase_diffs[(i, i + 1)]        x_data.append(target)        y_data.append(chain_phase)        if target &gt;= 2:            step2_phase = 0.0            curr = target            while curr &gt;= 2:                step2_phase += phase_diffs[(curr - 2, curr)]                curr -= 2            if curr == 1:                step2_phase += phase_diffs[(0, 1)]            x_data.append(target)            y_data.append(step2_phase)...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430. \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u0442\u043e\u0447\u043a\u0438 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u043c 2-\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0434\u0440\u0435\u0439\u0444 \u0444\u0430\u0437\u044b, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0439 CFO. \u0424\u0430\u0437\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<pre><code class=\"python\">...    poly_coeffs = np.polyfit(x_data, y_data, deg=2)    idx = np.arange(tiles)    smooth_phases = np.polyval(poly_coeffs, idx)    smooth_phases -= smooth_phases[0]...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0437 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435.<\/p>\n<pre><code class=\"python\">...    phase_corrs = np.exp(1j * smooth_phases)[:, np.newaxis]    corrected = repeats * phase_corrs    acc = np.mean(corrected, axis=0)    demod = super()._demodulate_signal(acc)    return demod<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0443\u044e \u043f\u0443\u0442\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435:<\/p>\n<pre><code class=\"python\">def _demodulate_signal(self, signal: npt.NDArray[np.complex64]) -&gt; npt.NDArray[np.complex64]:    demod = self._dft(signal)    return demoddef demodulate_symbol_cp_soft(self, symbol: npt.NDArray[np.complex64]) -&gt; typing.Tuple[    npt.NDArray[np.float64], float, npt.NDArray[np.float64]]:    demod_all = self.demodulate_symbol_cp(symbol)    demod_channel = demod_all[self._channel_indices]    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0430\u043f \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0440\u0443\u0431\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u0430\u0445 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u0433\u0440\u0443\u0431\u0430\u044f \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"python\">    ...    pilots_ref = self._get_pilot_values()    pilots = demod_all[self._pilot_carriers]    H_est_init = self._channel_estimate_zf(pilots_ref, pilots, self._pilot_carriers)    eq_init = demod_channel \/ (H_est_init + 1e-6)    data_init = eq_init[self._data_local_indices]    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0440\u0443\u0431\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0444\u0430\u0437 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043f\u0443\u0442\u0435\u043c \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u043d\u0430 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f\u0445 BPSK \u0438\u043b\u0438 QPSK:<\/p>\n<pre><code class=\"python\">    ...    mu = self._mapper.MU    if mu == 1:        ideal_init = np.sign(np.real(data_init))        ideal_init[ideal_init == 0] = 1.0    elif mu == 2:        ideal_init_real = np.sign(np.real(data_init))        ideal_init_real[ideal_init_real == 0] = 1.0        ideal_init_imag = np.sign(np.imag(data_init))        ideal_init_imag[ideal_init_imag == 0] = 1.0        ideal_init = (ideal_init_real + 1j * ideal_init_imag) \/ np.sqrt(2.0)    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u0448\u0443\u043c\u0430 \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 (MSE) \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c\u0438 \u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f:<\/p>\n<pre><code class=\"python\">    ...    noise_var_eq_init = np.mean(np.abs(data_init - ideal_init) ** 2)    mean_H_power_init = np.mean(np.abs(H_est_init[self._data_local_indices]) ** 2)    curr_noise_var = max(noise_var_eq_init * mean_H_power_init, 1e-6)    curr_noise_var = min(curr_noise_var, 60.0)    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0448\u0443\u043c\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0412\u0438\u043d\u0435\u0440\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f MMSE-\u044d\u043a\u0432\u0430\u043b\u0430\u0439\u0437\u0435\u0440 (Minimum Mean Square Error):<\/p>\n<pre><code class=\"python\">    ...    H_est = self._channel_estimate_wiener(pilots_ref, pilots, self._pilot_carriers, curr_noise_var)    equalized_all = (demod_channel * np.conj(H_est)) \/ (np.abs(H_est) ** 2 + curr_noise_var)    equalized_data_symbols = equalized_all[self._data_local_indices]    data_symbols = equalized_data_symbols    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0444\u0430\u0437 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e BPSK \u0438 QPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439:<\/p>\n<pre><code class=\"python\">    ...    if mu == 1:        bpsk_dec = np.sign(real_parts)        bpsk_dec[bpsk_dec == 0] = 1.0        amplitude = np.mean(real_parts * bpsk_dec)        noise_var_eq_real = np.mean((real_parts - amplitude * bpsk_dec) ** 2)        noise_var_eq_imag = np.mean(imag_parts ** 2)        noise_var_eq = noise_var_eq_real + noise_var_eq_imag    elif mu == 2:        qpsk_dec_real = np.sign(real_parts)        qpsk_dec_real[qpsk_dec_real == 0] = 1.0        qpsk_dec_imag = np.sign(imag_parts)        qpsk_dec_imag[qpsk_dec_imag == 0] = 1.0        amplitude_real = np.mean(real_parts * qpsk_dec_real)        amplitude_imag = np.mean(imag_parts * qpsk_dec_imag)        noise_var_eq_real = np.mean((real_parts - amplitude_real * qpsk_dec_real) ** 2)        noise_var_eq_imag = np.mean((imag_parts - amplitude_imag * qpsk_dec_imag) ** 2)        noise_var_eq = noise_var_eq_real + noise_var_eq_imag    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u043e\u0432 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435:<\/p>\n<pre><code class=\"python\">    ...    H_data = H_est[self._data_local_indices]    H_power_sq = np.abs(H_data) ** 2    mean_H_power = np.mean(H_power_sq)    updated_noise_var = noise_var_eq * mean_H_power    alpha = 0.1    noise_var = alpha * updated_noise_var + (1 - alpha) * curr_noise_var    noise_var = max(noise_var, 1e-6)    ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e62\/b87\/f85\/e62b87f85b7b1f46f0eda5987ff35570.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 21. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 BPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 21. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 BPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).\" width=\"1000\" height=\"626\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e62\/b87\/f85\/e62b87f85b7b1f46f0eda5987ff35570.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e62\/b87\/f85\/e62b87f85b7b1f46f0eda5987ff35570.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 21. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 BPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5c\/398\/727\/d5c3987270afcaff07fe1b322026ac4a.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 22. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 QPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 22. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 QPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).\" width=\"1000\" height=\"626\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d5c\/398\/727\/d5c3987270afcaff07fe1b322026ac4a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5c\/398\/727\/d5c3987270afcaff07fe1b322026ac4a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 22. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 QPSK \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u0440\u0438 -9 \u0438 -3 dB SNR).<\/figcaption><\/div>\n<\/figure>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u2014 \u0440\u0430\u0441\u0447\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u0431\u0438\u0442 \u043a \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0448\u0443\u043c\u0430 (Es\/N0) \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u044f\u0433\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 (LLR):<\/p>\n<pre><code class=\"python\">    ...    es_n0_linear_per_carrier = H_power_sq \/ noise_var    es_n0_linear = mean_H_power \/ noise_var    if mu == 1:        llr_outputs = 4.0 * real_parts * es_n0_linear_per_carrier    elif mu == 2:        llr_i = 2.0 * real_parts * es_n0_linear_per_carrier        llr_q = 2.0 * imag_parts * es_n0_linear_per_carrier        llr_outputs = np.empty(2 * len(data_symbols), dtype=np.float64)        llr_outputs[0::2] = llr_i        llr_outputs[1::2] = llr_q    llr_outputs = np.clip(llr_outputs, -20.0, 20.0)    return es_n0_linear_per_carrier, es_n0_linear, llr_outputs<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u0438\u0442 (LLR) \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c \u043e\u0442 -20 \u0434\u043e 20. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 SNR \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0448\u0438\u0440\u043e\u043a\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>demodulate_symbol_cp_soft<\/code> \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u044f\u0433\u043a\u0438\u0445 \u0431\u0438\u0442 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0412\u0438\u0442\u0435\u0440\u0431\u0438 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u043c\u0435\u0445\u0430\u043c \u0438 \u0437\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u044f\u043c\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0444\u0430\u0437\u043e\u0432\u044b\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c OFDM \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041a\u043e\u0434\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u044f \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043a \u043f\u0440\u0435\u0434\u0435\u043b\u0443 \u0428\u0435\u043d\u043d\u043e\u043d\u0430.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 25 \u0431\u0438\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0434\u043e 255 \u0431\u0438\u0442 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: <\/p>\n<p>\u0421\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u043b\u044b\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0412\u0438\u0442\u0435\u0440\u0431\u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432.<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043d\u0430 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438; \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u2153 \u0438 LTE \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u044b: <code>0o133<\/code>, <code>0o171<\/code>, <code>0o165<\/code> (\u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <code>0o133<\/code>, <code>0o171<\/code> \u2014 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u044b NASA, \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0432\u0448\u0438\u0435 \u0441\u0435\u0431\u044f \u0432 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435).<\/p>\n<pre><code class=\"python\">class ConvCodec:    @classmethod    def _encode(cls, bits: npt.NDArray[np.uint8]) -&gt; npt.NDArray[np.uint8]:        k = 0        state = 0        symbols = np.zeros(len(bits) * len(cls.POLY), dtype=np.uint8)        for bit in bits:            state = ((state &lt;&lt; 1) | int(bit)) &amp; cls.MASK            for poly in cls.POLY:                n = state &amp; poly                symbols[k] = n.bit_count() % 2                k += 1        return symbols    @classmethod    def calc_cc_elements(cls, bits_count: int) -&gt; int:        return (bits_count + cls.PAD_LEN) * cls.SPEED    @classmethod    def encode(cls, bits: npt.NDArray[np.uint8]) -&gt; npt.NDArray[np.uint8]:        data_tailed = np.pad(bits, pad_width=(0, cls.PAD_LEN), mode=\"constant\")        cc_data = cls._encode(data_tailed)        return cc_data<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u0430\u0441\u0441 <code>ConvCodec<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041c\u0435\u0442\u043e\u0434 <code>_encode<\/code><em> <\/em>\u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<em>. <\/em>\u041c\u0435\u0442\u043e\u0434 <code>encode<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>calccc_elements<\/code> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u0412 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0431\u0438\u0442 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u043d\u0443\u043b\u0435\u0439, \u0434\u043b\u0438\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c PAD_LEN (\u0441\u043c. \u0444\u0443\u043d\u043a\u0446\u0438\u044e encode).<\/p>\n<\/blockquote>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0428\u0435\u043d\u043d\u043e\u043d\u0430, \u043f\u0440\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 SNR \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u2153 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0430\u044f \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u00bd, \u2154, \u0438 \u00be \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u044b\u043a\u0430\u043b\u044b\u0432\u0430\u043d\u0438\u044f) \u0431\u0438\u0442 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u2153. <\/p>\n<pre><code class=\"python\">class ConvCodecPunctured(ConvCodec):    @classmethod    def calc_cc_elements(cls, bits_count: int) -&gt; int:        k = cls.PUNCTURE_MASK.shape[1]        n = int(np.sum(cls.PUNCTURE_MASK == 1))        num_bits = bits_count + cls.PAD_LEN        blocks = (num_bits + k - 1) \/\/ k        return blocks * n    @classmethod    def puncture(cls, bits: npt.NDArray[np.uint8]) -&gt; npt.NDArray[np.uint8]:        mask = cls.PUNCTURE_MASK        period = mask.shape[1]        stream = np.array(bits).reshape(-1, cls.SPEED).T        num_elements = stream.shape[1]        reps = (num_elements + period - 1) \/\/ period        full_mask = np.tile(mask, (1, reps))[:, :num_elements]        return stream.T[full_mask.T.astype(bool)]    @classmethod    def encode(cls, bits: npt.NDArray[np.uint8]) -&gt; npt.NDArray[np.uint8]:        cc_data = super().encode(bits)        cc_data_punct = cls.puncture(cc_data)        return cc_data_punct<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 puncture \u043f\u0440\u043e\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0438\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435 <code>PUNCTURE_MASK<\/code> \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0431\u0438\u0442 \u0438\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">class CCLTEBPSK(ConvCodecPunctured, metaclass=MetaConvCodec):    PUNCTURE_MASK = np.array([[1], [1], [1]])    POLY = [0o133, 0o171, 0o165]    K = 7    SOFT_BIT_SCALE = 1.0CCLTEBPSK_13 = CCLTEBPSKclass CCLTEBPSK_12(CCLTEBPSK, metaclass=MetaConvCodec):    PUNCTURE_MASK = np.array([[1, 1], [1, 0], [0, 1]])class CCLTEBPSK_23(CCLTEBPSK, metaclass=MetaConvCodec):    PUNCTURE_MASK = np.array([[1, 1], [1, 0], [0, 0]])class CCLTEBPSK_34(CCLTEBPSK, metaclass=MetaConvCodec):    PUNCTURE_MASK = np.array([[1, 1, 1], [1, 0, 0], [0, 0, 0]])<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b <code>CCLTEBPSK_13<\/code>, <code>CCLTEBPSK_12<\/code>, <code>CCLTEBPSK_23<\/code>, <code>CCLTEBPSK_34<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u0434\u0435\u0440\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<p>\u041e\u0442\u043a\u043b\u0438\u043a \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u2153 \u043d\u0430 \u0434\u0435\u043b\u044c\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0439 \u0431\u0438\u0442): <code>111100001110111011111<\/code>.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a: <code>0100000000101101010011110<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u2153: <code>000111100001110111011111000000111100110101010011010010110001010011001011100011101011100111000<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u00bd: <code>00111001111101110000111011110101010011010101000110011001101100<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u2154: <code>00110011101100011111101001011001000010010010100<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u00be: <code>001100110110001111100100110001001001011100<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0412\u0438\u0442\u0435\u0440\u0431\u0438. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u044f\u0433\u043a\u0438\u0445 \u0431\u0438\u0442 (LLR \u2014 Log-Likelihood Ratio), \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445 \u0430\u043f\u043e\u0441\u0442\u0435\u0440\u0438\u043e\u0440\u043d\u0443\u044e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0431\u0438\u0442\u0430. \u0417\u043d\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u2014 \u043d\u0443\u043b\u044e. \u041c\u043e\u0434\u0443\u043b\u044c LLR \u0437\u0430\u0434\u0430\u0435\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0435 \u043a \u043d\u0443\u043b\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u2153. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u043d\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0438\u0442, \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043f\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u043c. \u0414\u0435\u043f\u0443\u043d\u043a\u0442\u043e\u0440 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0438\u0442\u044b \u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 LLR \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0442.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0435\u043f\u0443\u043d\u043a\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"python\">class ConvCodecPunctured(ConvCodec):    ...    @classmethod    def depuncture(cls, soft_bits: npt.NDArray[np.float128], bits_count: int) -&gt; npt.NDArray[np.float128]:        mask = cls.PUNCTURE_MASK        base_streams = mask.shape[0]        period = mask.shape[1]        num_elements = bits_count + cls.PAD_LEN        if (mod := num_elements % period) != 0:            num_elements += period - mod        reps = num_elements \/\/ period        full_mask = np.tile(mask, (1, reps))        depunct_T = np.zeros((num_elements, base_streams), dtype=soft_bits.dtype)        bool_mask_T = full_mask.T.astype(bool)        slots = np.sum(bool_mask_T)        actual_bits = min(soft_bits.size, slots)        if slots &gt; actual_bits:            indices = np.where(bool_mask_T)            bool_mask_T[indices[0][actual_bits:], indices[1][actual_bits:]] = False        depunct_T[bool_mask_T] = soft_bits[:actual_bits]        return depunct_T.ravel()     @classmethod     def decode(cls, soft_bits: npt.NDArray[np.float128], bits_count: int) -&gt; npt.NDArray[np.uint8]:        soft_bits_depuct = cls.depuncture(soft_bits, bits_count)        bits = super().decode(soft_bits_depuct, bits_count)        return bits<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 \u0412\u0438\u0442\u0435\u0440\u0431\u0438:<\/p>\n<pre><code class=\"python\">class ConvCodec:    ...    @classmethod    def _decode(cls, soft_bits: npt.NDArray[np.float128], total_steps: int) -&gt; npt.NDArray[np.uint8]:        path_metrics = np.full(cls.NUM_STATES, -np.inf)        path_metrics[0] = 0.0        tb_bits = np.zeros((total_steps, cls.NUM_STATES), dtype=np.uint8)        tb_prev_states = np.zeros((total_steps, cls.NUM_STATES), dtype=np.uint8)        num_polys = cls.EXPECTED_SYMS.shape[2]        for step in range(total_steps):            rx_chunk = soft_bits[step * num_polys: (step + 1) * num_polys]            next_path_metrics = np.full(cls.NUM_STATES, -np.inf)            for curr_state in range(cls.NUM_STATES):                if path_metrics[curr_state] == -np.inf:                    continue                for bit in (0, 1):                    next_state = cls.NEXT_STATES[curr_state, bit]                    exp_syms = cls.EXPECTED_SYMS[curr_state, bit]                    branch_metric = np.sum(rx_chunk * exp_syms)                    candidate_metric = path_metrics[curr_state] + branch_metric                    if candidate_metric &gt; next_path_metrics[next_state]:                        next_path_metrics[next_state] = candidate_metric                        tb_bits[step, next_state] = bit                        tb_prev_states[step, next_state] = curr_state            path_metrics = next_path_metrics        decoded_bits = np.zeros(total_steps, dtype=int)        best_state = np.argmax(path_metrics)        for step in range(total_steps - 1, -1, -1):            decoded_bits[step] = tb_bits[step, best_state]            best_state = tb_prev_states[step, best_state]        return decoded_bits    @classmethod    def decode(cls, soft_bits: npt.NDArray[np.float128], bits_count: int) -&gt; npt.NDArray[np.uint8]:        soft_bits_cropped = soft_bits[:(bits_count + cls.PAD_LEN) * cls.SPEED]        bits = cls._decode(soft_bits_cropped, bits_count)        bits_cropped = bits[:bits_count]        return bits_cropped<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>_decode<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0412\u0438\u0442\u0435\u0440\u0431\u0438. \u041c\u0435\u0442\u043e\u0434 <code>decode<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 bitscount \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0438\u0442.<\/p>\n<p>\u0414\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <code>NEXT_STATES<\/code>. <code>EXPECTED_SYMS<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0444\u0442-\u0431\u0438\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<h2>\u0418\u043d\u0442\u0435\u0440\u043b\u0438\u0432\u0435\u0440<\/h2>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u044b \u043a \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c. \u0414\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u043d\u0442\u0435\u0440\u043b\u0438\u0432\u0438\u043d\u0433\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438\u0441\u044c \u0432 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435.<\/p>\n<pre><code class=\"python\">def interleave(bits: npt.NDArray, num_carriers: int) -&gt; npt.NDArray:    data_len = len(bits)    num_rows = int(np.ceil(data_len \/ num_carriers))    total_cells = num_rows * num_carriers    indices = np.arange(total_cells)    interleaved_indices = indices.reshape(num_rows, num_carriers).T.flatten()    pruned_indices = interleaved_indices[interleaved_indices &lt; data_len]    return bits[pruned_indices]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f interleave \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0431\u0438\u0442\u0430\u043c\u0438, \u0437\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0434\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443.<\/p>\n<pre><code class=\"python\">def deinterleave(symbols: npt.NDArray, num_carriers: int) -&gt; npt.NDArray:    data_len = len(symbols)    num_rows = int(np.ceil(data_len \/ num_carriers))    total_cells = num_rows * num_carriers    indices = np.arange(total_cells)    interleaved_indices = indices.reshape(num_rows, num_carriers).T.flatten()    pruned_indices = interleaved_indices[interleaved_indices &lt; data_len]    deinterleaved = np.zeros(data_len, dtype=symbols.dtype)    deinterleaved[pruned_indices] = symbols    return deinterleaved<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f deinterleave \u0440\u0435\u0448\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 32 \u0431\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0442\u0435\u0440\u043b\u0438\u0432\u0438\u043d\u0433\u0430 \u043d\u0430 16 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445:<\/p>\n<pre><code>0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>PAPR \u0438 \u0421\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 OFDM-\u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0438\u043a-\u0444\u0430\u043a\u0442\u043e\u0440\u0430 (PAPR), \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0435\u0439 \u0444\u0430\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0445 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0444\u0430\u0437\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0435\u0437\u043a\u0438\u043c \u0432\u044b\u0431\u0440\u043e\u0441\u0430\u043c, \u0432\u044b\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0449\u0435\u043b\u0447\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0443 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044f \u0438 \u043a\u043b\u0438\u043f\u043f\u0438\u043d\u0433\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u041f\u0440\u0438 \u043a\u043b\u0438\u043f\u043f\u0438\u043d\u0433\u0435 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0432\u043d\u0435\u043f\u043e\u043b\u043e\u0441\u043d\u044b\u0435 \u0438\u0437\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u043f\u043e\u043c\u0435\u0445\u0438, \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e OFDM.<\/p>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0444\u0430\u0437 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0438\u0442 (PSK-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432).<\/p>\n<p>\u0414\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 OFDM-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0440\u0438\u0434\u0430\u044e\u0449\u0435\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0439 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435.<\/p>\n<pre><code class=\"python\">DEFAULT_SEED = 0x5Adef scrambler(data: npt.NDArray, seed: int, operator: typing.Callable[[int, typing.Any], typing.Any]) -&gt; npt.NDArray:    scrambled = np.zeros_like(data)    lfsr = seed &amp; 0x7FFF    if lfsr == 0:        lfsr = 1    for i in range(len(data)):        fb = ((lfsr &gt;&gt; 6) ^ (lfsr &gt;&gt; 3)) &amp; 1        prbs_bit = lfsr &amp; 1        scrambled[i] = operator(prbs_bit, data[i])        lfsr = ((lfsr &lt;&lt; 1) | fb) &amp; 0x7FFF    return scrambleddef scramble(bits: npt.NDArray[np.uint8], seed: int = DEFAULT_SEED) -&gt; npt.NDArray[np.uint8]:    return scrambler(bits, seed, operator=lambda prbs_bit, value: value ^ prbs_bit)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>scrambler<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c (\u0438\u043d\u0430\u0447\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f 0), \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>0x5A<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 0 \u0438 1.<\/p>\n<p>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 operator \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e xor \u043d\u0430\u0434 \u0431\u0438\u0442\u0430\u043c\u0438.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0442 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: <code>011011011110000001110001111111111000110110011111000011001001000000101100100010100110011010111000<\/code><\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c: <code>011001110101111011100101100100011011001000011000011101011111010010101101100110010111000111100011<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u0438\u0442.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 XOR \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u044b\u0442\u044c \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c: \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u0441\u043a\u0440\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043c\u044f\u0433\u043a\u0438\u0445 \u0431\u0438\u0442. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043c\u044f\u0433\u043a\u0438\u043c\u0438 \u0431\u0438\u0442\u0430\u043c\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f XOR \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043c\u0435\u043d\u044b \u0437\u043d\u0430\u043a\u0430:<\/p>\n<pre><code class=\"python\">def descramble(llr_bits: npt.NDArray[np.float64], seed: int = DEFAULT_SEED) -&gt; npt.NDArray[np.float64]:    return scrambler(llr_bits, seed, operator=lambda prbs_bit, value: value * (-1.0 if prbs_bit == 1 else 1.0))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f Clip and Filter<\/h3>\n<p>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f PAPR \u0432 OFDM, \u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u0432\u044b\u0431\u0440\u043e\u0441\u044b. \u0414\u043b\u044f \u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u043a\u043b\u0438\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 (Clip and Filter, CAF), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0438\u043a\u043e\u0432\u0443\u044e \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432\u043d\u0435\u043f\u043e\u043b\u043e\u0441\u043d\u044b\u0435 \u0441\u043f\u0435\u043a\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435.<\/p>\n<blockquote>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u0432\u044f\u0437\u0438 \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f PAPR \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 DFT-\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u0432\u0432\u043e\u0434\u044f\u0449\u0435\u0435 \u0432 OFDM \u0441\u0445\u0435\u043c\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0443 DFT-IDFT. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044e \u043f\u043e\u043c\u0435\u0445\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438. \u0413\u0440\u0430\u0444\u0438\u043a\u0438 BER\/PER \u0441\u043c\u0435\u0449\u0430\u043b\u0438\u0441\u044c \u043f\u043e \u043e\u0441\u0438 SNR \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 \u044d\u0442\u043e\u0439 \u0438\u0434\u0435\u0435 \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d CAF.<\/p>\n<\/blockquote>\n<pre><code class=\"python\">def clip_and_filter(       data: npt.NDArray[np.float64], papr_cutoff_db: float, cutoff_freq_hz: float, fs_hz: float, filter_order: int = 8) -&gt; npt.NDArray[np.float64]:    rms = np.sqrt(np.mean(data ** 2))    clip_threshold = rms * (10 ** (papr_cutoff_db \/ 20.0))    clipped_data = np.clip(data, -clip_threshold, clip_threshold)    nyquist = 0.5 * fs_hz    normal_cutoff = cutoff_freq_hz \/ nyquist    b, a = signal.butter(filter_order, normal_cutoff, btype='low', analog=False)    filtered_data = signal.filtfilt(b, a, clipped_data)    return filtered_data<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>clip_and_filter<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>papr_cutoff_db<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f PAPR \u0432 \u0434\u0435\u0446\u0438\u0431\u0435\u043b\u0430\u0445, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u041a\u043b\u0438\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f Low-Pass \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u0411\u0430\u0442\u0442\u0435\u0440\u0432\u043e\u0440\u0442\u0430 8 \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u044b\u0448\u0435 <code>cutoff_freq_hz<\/code>.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u043f\u043f\u0438\u043d\u0433 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432 6 \u0434\u0411 \u0438 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0432 3.0 \u041a\u0413\u0446.<\/p>\n<pre><code class=\"python\">signal_caf = clip_and_filter(    signal_full,    papr_cutoff_db=6.0, cutoff_freq_hz=3000,    fs_hz=self.DEFAULT_SAMPLE_RATE)...signal = (signal_caf * 32768).astype(np.int16)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0441\u0442\u044c\u044e 16 \u0431\u0438\u0442 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 12.0 \u041a\u0413\u0446 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0430\u043d \u043d\u0430 \u0432\u0445\u043e\u0434 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u043a\u0442\u0430 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430.<\/p>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435<\/h2>\n<p>\u041e\u0446\u0435\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u044d\u0444\u0438\u0440\u0430. \u041d\u0430 \u043d\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f AWGN, \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435, \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0434\u0440\u0435\u0439\u0444, \u0430 \u0442\u0430\u043a\u0436\u0435 BEC \u0438 BSC \u2014 \u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441 \u0437\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:<\/p>\n<pre><code class=\"python\">SNRdb = -6channelResponse = np.array([1.0, 0, 0.4, 0, 0, 0.2])bit_flip_prob = 0.001erasure_prob = 0.02<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>SNRdb<\/code> \u2014 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\/\u0448\u0443\u043c \u0432 \u0434\u0435\u0446\u0438\u0431\u0435\u043b\u0430\u0445.<br \/><code>channelResponse<\/code> \u2014 \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0442\u043a\u043b\u0438\u043a\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 (\u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430\u0434\u0430\u0435\u0442 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u2014 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0445).<br \/><code>bit_flip_prob<\/code> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0442 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435.<br \/><code>erasure_prob<\/code> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0437\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u041a\u043e\u0434 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"python\">def simulate_channel(        signal, time_shift: int, freq_shift_hz: float, sample_rate: int,        frame_size: int = 160):    rx_time = np.zeros(len(signal) + time_shift, dtype=float)    rx_time[time_shift:] = signal    analytic_signal = hilbert(rx_time)...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0434\u0440\u0435\u0439\u0444\u0430. \u0412\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0413\u0438\u043b\u044c\u0431\u0435\u0440\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u043a\u0442\u0440\u0430 \u043f\u0443\u0442\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443.<\/p>\n<pre><code class=\"python\">...    t = np.arange(len(analytic_signal)) \/ sample_rate    dynamic_cfo = freq_shift_hz + 5.0 * (t \/ t[-1]) ** 2    phase_drift = 2 * np.pi * np.cumsum(dynamic_cfo) \/ sample_rate    cfo_vector = np.exp(1j * phase_drift)    shifted_complex = analytic_signal * cfo_vector    shifted_real = shifted_complex.real...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0418\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043a\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u043a\u043b\u0438\u043a\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0431\u0435\u043b\u044b\u043c \u0448\u0443\u043c\u043e\u043c, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>SNRdb<\/code> \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u0434\u0435\u0446\u0438\u0431\u0435\u043b \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431.<\/p>\n<pre><code class=\"python\">...    convolved = np.convolve(shifted_real, channelResponse, mode='full')    signal_power = np.mean(convolved ** 2)    if signal_power &gt; 0:        sigma2 = signal_power * 10 ** (-SNRdb \/ 10)        noise = np.sqrt(sigma2) * np.random.randn(*convolved.shape)        result = convolved + noise    else:        result = np.random.randn(*convolved.shape) * 10 ** (-SNRdb \/ 20)    num_samples = len(result)    num_frames = int(np.ceil(num_samples \/ frame_size))...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0439 BSC. \u0414\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0442 \u0431\u043b\u043e\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 -1. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u0430\u0437\u0443 \u043d\u0430 \u03c0 \u0440\u0430\u0434\u0438\u0430\u043d, \u0447\u0442\u043e \u043f\u0440\u0438 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043c\u0435\u043d\u0435 \u0431\u0438\u0442.<\/p>\n<pre><code class=\"python\">...    if bit_flip_prob &gt; 0.0 and frame_size &gt; 0:         flip_decisions = np.random.choice([-1, 1], size=num_frames, p=[bit_flip_prob, 1.0 - bit_flip_prob])        flip_mask = np.repeat(flip_decisions, frame_size)[:num_samples]        result *= flip_mask...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0439 BEC. \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u0437\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u0439 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u043b\u043e\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 0. \u041e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u0442\u0438\u0448\u0438\u043d\u0430 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u043f\u043e\u0442\u0435\u0440\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<pre><code class=\"python\">...    if erasure_prob &gt; 0.0 and frame_size &gt; 0:        erasure_decisions = np.random.choice([0, 1], size=num_frames, p=[erasure_prob, 1.0 - erasure_prob])        erasure_mask = np.repeat(erasure_decisions, frame_size)[:num_samples]        result *= erasure_mask...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 BER (Bit Error Rate) \u0438 PER (Packet Error Rate) \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0439 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u0445 23 \u0438 24.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bf\/dde\/cd2\/6bfddecd23499da0948860b81333951b.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 23. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 23. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.\" width=\"681\" height=\"576\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6bf\/dde\/cd2\/6bfddecd23499da0948860b81333951b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bf\/dde\/cd2\/6bfddecd23499da0948860b81333951b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 23. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/207\/e93\/3e3\/207e933e35add7b0226bf57917256d39.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 24. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 24. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.\" width=\"690\" height=\"577\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/207\/e93\/3e3\/207e933e35add7b0226bf57917256d39.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/207\/e93\/3e3\/207e933e35add7b0226bf57917256d39.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 24. \u0413\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 BER \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f SNR.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0435\u0442\u0440\u0438\u043a\u0430 BER \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0431\u0438\u0442 \u0432 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 PER \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u043e\u043b\u044e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 PER \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c 10%, \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 SNR = -7 \u0434\u0411 (\u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e -7.5 \u0434\u0411).<\/p>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u044d\u0444\u0438\u0440\u0435<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043a \u0448\u0443\u043c\u0430\u043c, \u0437\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u044f\u043c \u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u0441\u0435\u0440\u0438\u044f \u043d\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 ICOM IC-9700 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 25), \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u0430\u043a \u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u0438\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u0441\u044f \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440, \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 14 \u043a\u043c \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0430\u043d\u0442\u0435\u043d\u043d\u0435 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 WAV \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u0430. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432\u0435\u043b\u0430\u0441\u044c \u043d\u0430 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 2 \u043c, \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 144.300 \u041c\u0413\u0446 \u0432 \u043e\u0434\u043d\u043e\u043f\u043e\u043b\u043e\u0441\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 (USB).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/37b\/ec0\/8da\/37bec08da22ace107792b7c5b57c86c0.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 25. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 IC-9700.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 25. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 IC-9700.\" width=\"789\" height=\"442\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/37b\/ec0\/8da\/37bec08da22ace107792b7c5b57c86c0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/37b\/ec0\/8da\/37bec08da22ace107792b7c5b57c86c0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 25. \u041b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 IC-9700.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435 \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044f (AGC), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u0435 \u0437\u0430\u0449\u0438\u0442\u043d\u043e\u0439 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0410\u0420\u0423. \u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u0410\u0420\u0423 \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0430 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0435\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c CFO.<\/p>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0430\u043c \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0431\u044b\u043b \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0431\u044b\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u0432 \u043d\u0435\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0410\u0420\u0423 \u0438 \u043a\u043b\u0438\u043f\u043f\u0438\u043d\u0433\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\u00a0 \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0434 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0438 \u0442\u0438\u043f \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u044d\u043a\u0432\u0430\u043b\u0430\u0439\u0437\u0435\u0440 \u0437\u0432\u0443\u043a\u0430 \u0432 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435, \u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u044b\u043b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 ZC-\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u043b\u0438\u044f\u043d\u0438\u044e \u0410\u0420\u0423, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044b \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u043a-\u0444\u0430\u043a\u0442\u043e\u0440\u0430 (PAPR) \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SDR-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 RX-888 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 27) \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 SDR Console (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 28). \u0414\u0435\u043c\u043e\u0434\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0441\u044f \u0432 WAV. \u0417\u0430\u043f\u0438\u0441\u044c \u0432\u0435\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0441\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423, \u0442\u0430\u043a \u0438 \u0431\u0435\u0437 \u043d\u0435\u0435 \u2014 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044f (\u0440\u0438\u0441\u0443\u043d\u043a\u0438 29 \u0438 30).<\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0432 \u0441\u0435\u0431\u0435 \u0442\u0440\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 <code>BEACON<\/code> (<code>R9FEU<\/code> <code>LO88CA<\/code>) \u0438 \u0434\u0432\u0435 \u043f\u0430\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>DATA<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0438 <code>\"\u00a0 \u00a0 Though this be madness,\" \u0438 \" yet there is method in't. \"<\/code> (\u043e\u0431\u0435 \u043f\u043e 27 \u0431\u0430\u0439\u0442). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c QPSK-\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 26 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0412 \u043f\u0440\u0430\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0442\u0447\u0435\u0442\u043b\u0438\u0432\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 BPSK- \u0438 QPSK-\u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fb7\/4c2\/b2e\/fb74c2b2ed57060c74e9b4537a6d2562.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 26. \u0421\u043f\u0435\u043a\u0442\u0440 \u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 26. \u0421\u043f\u0435\u043a\u0442\u0440 \u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\" width=\"2005\" height=\"1607\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fb7\/4c2\/b2e\/fb74c2b2ed57060c74e9b4537a6d2562.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fb7\/4c2\/b2e\/fb74c2b2ed57060c74e9b4537a6d2562.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 26. \u0421\u043f\u0435\u043a\u0442\u0440 \u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/163\/92c\/a42\/16392ca424633463d346d12684ac4a8b.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 27. SDR-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a RX-888.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 27. SDR-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a RX-888.\" width=\"1000\" height=\"1000\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/163\/92c\/a42\/16392ca424633463d346d12684ac4a8b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/163\/92c\/a42\/16392ca424633463d346d12684ac4a8b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 27. SDR-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a RX-888.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b3\/048\/874\/7b3048874ff9af95fc9a1d204db0b314.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 28. \u041f\u0440\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 SDR Console.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 28. \u041f\u0440\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 SDR Console.\" width=\"656\" height=\"788\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7b3\/048\/874\/7b3048874ff9af95fc9a1d204db0b314.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b3\/048\/874\/7b3048874ff9af95fc9a1d204db0b314.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 28. \u041f\u0440\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 SDR Console.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f4\/ca0\/b28\/2f4ca0b28315ac263cf2d8b5d55e2408.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 29. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 29. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.\" width=\"2008\" height=\"1610\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2f4\/ca0\/b28\/2f4ca0b28315ac263cf2d8b5d55e2408.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f4\/ca0\/b28\/2f4ca0b28315ac263cf2d8b5d55e2408.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 29. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/197\/877\/e54\/197877e54b5bd0e0f98028f0cc290aef.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 30. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 30. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.\" width=\"2010\" height=\"1619\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/197\/877\/e54\/197877e54b5bd0e0f98028f0cc290aef.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/197\/877\/e54\/197877e54b5bd0e0f98028f0cc290aef.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 30. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423.<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u0437 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0410\u0420\u0423 \u0431\u044b\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0440\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u0437-\u0437\u0430 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439, \u0432\u043d\u043e\u0441\u0438\u043c\u044b\u0445 \u0410\u0420\u0423.<\/p>\n<p>\u0412 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0439 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0432\u0443\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0431\u044b\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u043c \u0442\u0440\u0430\u043a\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430. \u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u043b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0410\u0420\u0423.<\/p>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0447\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0410\u0420\u0423 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043b\u043e\u0433 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>18:30:28 [   INFO] Packet: Beacon(callsign='R9FEU', qth='LO88CA', mode=&lt;BeaconMode.BEACON: 15&gt;)18:30:28 [   INFO] Es\/N0 carriers: -5.073dB, -2.487dB, 0.038dB, 0.183dB, 0.105dB, -2.126dB, -3.169dB, -2.747dB, -2.081dB, -1.789dB, -1.675dB, -2.011dB, -1.138dB, 1.060dB, 1.333dB, 1.815dBdB18:30:28 [   INFO] Es\/N0: -0.871dB18:30:28 [   INFO] SNR: -6.892dB18:30:28 [   INFO] BER: 3.41%18:30:28 [   INFO] Packet: Beacon(callsign='R9FEU', qth='LO88CA', mode=&lt;BeaconMode.BEACON: 15&gt;)18:30:28 [   INFO] Es\/N0 carriers: -3.940dB, -1.089dB, 2.176dB, 2.472dB, 2.449dB, 0.260dB, -0.733dB, -0.290dB, 0.368dB, 0.664dB, 0.748dB, 0.335dB, 1.150dB, 3.362dB, 3.568dB, 3.919dBdB18:30:28 [   INFO] Es\/N0: 1.370dB18:30:28 [   INFO] SNR: -4.651dB18:30:28 [   INFO] BER: 5.77%18:30:28 [WARNING] Demod failed: head18:30:28 [   INFO] Packet: Beacon(callsign='R9FEU', qth='LO88CA', mode=&lt;BeaconMode.BEACON: 15&gt;)18:30:28 [   INFO] Es\/N0 carriers: -3.324dB, -0.758dB, 2.651dB, 2.997dB, 2.991dB, 1.071dB, 0.267dB, 0.639dB, 1.120dB, 1.375dB, 1.525dB, 1.193dB, 1.917dB, 3.939dB, 4.112dB, 4.359dBdB18:30:28 [   INFO] Es\/N0: 2.003dB18:30:28 [   INFO] SNR: -4.018dB18:30:28 [   INFO] BER: 6.30%18:30:29 [   INFO] Packet: Data(reserved=123, payload=b'    Though this be madness,')18:30:29 [   INFO] Es\/N0 carriers: -2.827dB, -0.081dB, 2.605dB, 2.760dB, 2.682dB, 0.442dB, -0.332dB, 0.382dB, 0.743dB, 0.779dB, 0.949dB, 0.517dB, 1.295dB, 3.547dB, 3.751dB, 4.138dBdB18:30:29 [   INFO] Es\/N0: 1.674dB18:30:29 [   INFO] SNR: -4.347dB18:30:29 [   INFO] BER: 3.69%18:30:29 [   INFO] Packet: Data(reserved=123, payload=b\" yet there is method in't. \")18:30:29 [   INFO] Es\/N0 carriers: -0.259dB, 2.071dB, 5.400dB, 5.646dB, 5.550dB, 3.653dB, 3.127dB, 3.720dB, 3.628dB, 3.335dB, 3.336dB, 2.969dB, 3.806dB, 6.304dB, 6.589dB, 6.845dBdB18:30:29 [   INFO] Es\/N0: 4.459dB18:30:29 [   INFO] SNR: -1.561dB18:30:29 [   INFO] BER: 5.42%18:30:29 [WARNING] Demod failed: head18:30:29 [   INFO] Packet: Data(reserved=123, payload=b'    Though this be madness,')18:30:29 [   INFO] Es\/N0 carriers: -2.237dB, 0.281dB, 3.202dB, 3.427dB, 3.371dB, 1.420dB, 0.742dB, 1.286dB, 1.563dB, 1.589dB, 1.777dB, 1.441dB, 2.110dB, 4.120dB, 4.299dB, 4.589dBdB18:30:29 [   INFO] Es\/N0: 2.367dB18:30:29 [   INFO] SNR: -3.653dB18:30:29 [   INFO] BER: 5.07%18:30:29 [   INFO] Packet: Data(reserved=123, payload=b\" yet there is method in't. \")18:30:29 [   INFO] Es\/N0 carriers: -1.564dB, 2.677dB, 6.098dB, 6.236dB, 6.185dB, 3.370dB, 2.325dB, 3.490dB, 3.658dB, 3.410dB, 3.323dB, 2.048dB, 3.123dB, 6.820dB, 7.059dB, 7.412dBdB18:30:29 [   INFO] Es\/N0: 4.662dB18:30:29 [   INFO] SNR: -1.358dB18:30:29 [   INFO] BER: 6.00%<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0435\u043a\u043e\u0434\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0432\u043b\u0435\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0430\u043a\u0435\u0442\u044b \u0441 QPSK-\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0435\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b, \u0437\u0430\u043f\u0438\u0441\u0438 <code>\"Demod failed: head\"<\/code> \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u044e\u0442 \u043e \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u0445 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430. \u041d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 BER \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0445 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0444\u0438\u0440\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c OFDM \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 SNR. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e OFDM \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043f\u0440\u0438\u0437\u0435\u043d \u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u041a\u0412 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0439\u043d\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 OFDM-\u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 SSB \u2014 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0447\u0430\u0441\u0442\u043e\u0442. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439 IQ-\u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043b\u0435\u0433\u043b\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b, \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 LTE \u0438 Wi-Fi. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0445\u043e\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044f \u0438 \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044e, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430, \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044f \u0442\u0435\u043c\u044b \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u044f\u0437\u0435\u0439, \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>\u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u0440\u043e\u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430: Though this be madness, yet there is method in&#8217;t.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1070804\/\">https:\/\/habr.com\/ru\/articles\/1070804\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 OFDM (Orthogonal Frequency-Division Multiplexing). \u0412 \u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u0432 \u044d\u0444\u0438\u0440\u0435.\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439, \u043e\u043d\u0430 \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0442\u0435\u043c, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0446\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439, \u043a\u0430\u043a\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0432 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f\u0427\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, 28.07.2025\u0433. \u043d\u0430 \u0445\u0430\u0431\u0440 \u0431\u044b\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 VarAC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e &#171;\u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435&#187;, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 SSB-\u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0432 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0433\u0440\u0430\u0442\u044c P2P \u0432 \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u044b\u0435 \u0438\u0433\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0440\u0435\u0432\u0435\u0440\u0441\u0438 \u0438\u043b\u0438 \u0448\u0430\u0448\u043a\u0438 \u0441 \u0448\u0430\u0445\u043c\u0430\u0442\u0430\u043c\u0438), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c \u043a \u043f\u043e\u043c\u0435\u0445\u0430\u043c. \u041f\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, VarAC \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 OFDM \u2014 \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445, \u043c\u0435\u0442\u043e\u0434\u0435, \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u0438, Wi-Fi \u0438 LTE\/5G \u0441\u0435\u0442\u044f\u0445, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0437\u0432\u0430\u0432 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0440\u0430\u0434\u0438\u043e\u0441\u0432\u044f\u0437\u0438.\u0422\u0430\u043a \u043a\u0430\u043a VarAC \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u0432\u0441\u044f \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u0443\u0432\u043e\u0435\u043d\u043d\u0430\u044f, \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 OFDM \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.TL;DR\u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0434\u0435\u0442 \u043b\u043e\u043d\u0433\u0440\u0438\u0434 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0443\u043b \u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 Python. \u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u044b &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435&#187; \u0438 &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u044d\u0444\u0438\u0440\u0435&#187;.\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:Hidden text\u0412: \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f OFDM \u0441 PSK \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0435\u0439, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u0432\u0443\u043a\u043e\u043c.\u0412: \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b?\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 SSB-\u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440.\u0412: \u043a\u0430\u043a\u0438\u0435 PSK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f?\u041e: BPSK \u0438 QPSK (QAM \u0432 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435).\u0412: \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043b\u0438 \u043a \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u0438?\u041e: \u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 25% \u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u0430.\u0412: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u0432 \u044d\u0444\u0438\u0440\u0435?\u041e: \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0444\u0438\u0440\u0435.\u0412: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0434 \u0448\u0443\u043c\u0430\u043c\u0438?\u041e: \u0434\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0448\u0443\u043c\u0430\u043c\u0438, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 -9 \u0434\u0411, \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b -7 \u0434\u0411.\u0412: \u043a\u0430\u043a\u0430\u044f \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445?\u041e: \u043e\u0442 353.9823 \u0434\u043e 707.9646 \u0431\u0438\u0442\/\u0441\u0435\u043a.\u0412: \u043a\u0430\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445?\u041e: BPSK \u043e\u0442 117 \u0434\u043e 265 \u0431\u0438\u0442\/\u0441\u0435\u043a; QPSK \u043e\u0442 235 \u0434\u043e 530 \u0431\u0438\u0442\/\u0441\u0435\u043a.\u0412: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0438 \u043f\u0438\u043b\u043e\u0442\u043e\u0432 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0435?\u041e: \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c 23 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 7 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b.\u0412: \u043a\u0430\u043a\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043e\u0442 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438?\u041e: 93.75 \u0413\u0446\u0412: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043b\u043e\u0442\u043d\u0435\u0435?\u041e: \u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u044c \u0448\u0430\u0433\u043e\u043c 46.87 \u0413\u0446, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.\u0412: \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a \u0441\u0434\u0432\u0438\u0433\u0443 \u0447\u0430\u0441\u0442\u043e\u0442\u044b?\u041e: \u0434\u0430, \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 300\u0413\u0446.\u0412: \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a?\u041e: \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u2153.\u0412: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435?\u041e: \u0434\u0430, \u043e\u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u00bd, \u2154 \u0438 \u00be.\u0412: \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434?\u041e: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u0438\u0442\u0435\u0440\u0431\u0438 \u043d\u0430 \u043c\u044f\u0433\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u0431\u0438\u0442.\u0412: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438?\u041e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0417\u0430\u0434\u043e\u0432\u0430-\u0427\u0443).\u0412: \u043a\u0430\u043a\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f?\u041e: \u043f\u043e\u043b\u043e\u0441\u0430 \u043e\u0442 300 \u0434\u043e 2700 \u0413\u0446.\u0412: \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u0445 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430?\u041e: \u0442\u0435\u0441\u0442 \u0431\u044b\u043b \u043d\u0430 \u0423\u041a\u0412 2 \u043c (144 \u041c\u0413\u0446), \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.\u0412: \u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043b\u0443\u0447\u0448\u0435 \u0447\u0435\u043c FT8 \u0438\u043b\u0438 VarAC?\u041e: \u043d\u0438\u0447\u0435\u043c, FT8 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c; VarAC \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043e\u0434.\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438\u041d\u0430 \u0442\u0435\u043c\u0443 OFDM \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043c, \u043f\u0440\u043e\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u0432\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c OFDM \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 OFDMOrthogonal Frequency Division Multiplexing \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0434\u0438\u043d \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0439 \u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445.\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0435\u0441\u0443\u0449\u0438\u0445 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e.\u041e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u0438 \u0444\u0430\u0437\u044b \u0447\u0430\u0441\u0442\u043e\u0442, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u041e\u0411\u041f\u0424 (IFFT), \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 IQ-\u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 IFFT.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442.\u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u0438 \u0444\u0430\u0437\u044b, \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043c\u0430\u043f\u043f\u0438\u043d\u0433) \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0444\u0430\u0437\u043e\u0432\u043e\u0439 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0435\u0439, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a BPSK, QPSK \u0438 QAM \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u043d\u0435\u0441\u0443\u0449\u0435\u0439 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e  \u0431\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438; \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0439, \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043e\u043d\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u044e \u043f\u043e\u043c\u0435\u0445 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\/\u0448\u0443\u043c (SNR).\u041d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u0447\u0435\u0440\u0435\u0437 [\u043f\u0440\u044f\u043c\u043e\u0435] \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u0440\u044c\u0435 (FFT) \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434 \u0438 \u0444\u0430\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0435\u0441\u0443\u0449\u0438\u0445.\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f OFDM \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0435\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043d\u0435\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 OFDM-\u0441\u0438\u0441\u0442\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044e (ISI \u2014 Inter Symbol Interferenct). \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c OFDM \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0433\u0434\u0435 \u0440\u0430\u0434\u0438\u043e\u0432\u043e\u043b\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u044d\u0445\u0430 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u0440\u0438\u0441\u0443\u043d\u043e\u043a 3). \u0422\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u0442 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0430\u043f\u043e\u043b\u0437\u0430\u043b\u0438 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435, \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438 (ICI \u2014 Inter Carrier Interference).\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u043d \u043d\u0430\u0437\u0432\u0430\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u0435\u0439 \u0445\u0432\u043e\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u0444\u0430\u0437\u0443 \u0438 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0438\u0445.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\u0420\u0430\u0437\u043c\u0435\u0440 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u044d\u0444\u0438\u0440\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.\u041f\u043e\u043c\u0438\u043c\u043e \u0431\u043e\u0440\u044c\u0431\u044b \u0441 ISI\/ICI \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0434\u0440\u0435\u0439\u0444 (CFO \u2014 Carrier Frequency Offset), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0432\u0443\u044e \u0441\u0432\u0435\u0440\u0442\u043a\u0443 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6. \u041c\u0435\u0436\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f \u0432 \u0437\u043e\u043d\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430.\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0433\u043e\u043b\u0443\u0447\u0435\u0432\u043e\u0441\u0442\u044c\u044e, \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u043d\u044b\u0439 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u043e, \u0434\u043b\u044f \u0435\u0433\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0447\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.\u041f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044bOFDM-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0434\u0438\u043e\u0441\u0438\u0433\u043d\u0430\u043b \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e-\u0441\u0435\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0438\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439, \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u044f (\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c) \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u044c \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432 OFDM \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0438\u043b\u043e\u0442\u0430\u043c\u0438. \u0418\u0445 \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0447\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u044e\u0442 \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043e\u0439 \u0438 \u0444\u0430\u0437\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0438\u043b\u043e\u0442\u044b, \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e) \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 OFDM-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044f \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0439, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c.\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u043a\u0432\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0438\u043b\u043e\u0442-\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 CFO \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 OFDM-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0438\u043b\u043e\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0435\u0442\u043a\u0435. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0438, \u043f\u0438\u043b\u043e\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u0418\u0437 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e VarAC \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442, \u043f\u043e\u0432\u0435\u0440\u0445 SSB, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0439\u0442\u0438 \u0442\u0435\u043c \u0436\u0435 \u043f\u0443\u0442\u0435\u043c.\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0440\u0430: \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u0434\u0435\u043b\u043e\u0432 \u2014 BPSK, FFT\/IFFT \u0438 \u0441\u0440\u0435\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0438 \u043a\u0432\u0430\u0437\u0438-\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0433\u043e\u0442\u043e\u0432. \u0422\u0430\u043a-\u0442\u043e \u043e\u043d\u043e \u0442\u0430\u043a, \u0434\u0430 \u043d\u0435 \u0442\u0430\u043a, \u044d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u043e\u0437\u0436\u0435 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0432\u044b\u0448\u0435.VarAC \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438 \u0432 \u0430\u043a\u0443\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442 \u043e\u0442 300 \u0413\u0446 \u0434\u043e 2700 \u0413\u0446, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u043d\u0435\u0441\u0443\u0449\u0438\u0435 \u0441 \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 50 \u0413\u0446.\u0422\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0430\u0434\u0438\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 SSB \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0433\u043e\u043b\u043e\u0441\u0430 (\u0442.\u043d. \u0442\u0435\u043b\u0435\u0444\u043e\u043d) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0447\u0430\u0441\u0442\u043e\u0442 2.7-3 \u041a\u0413\u0446, \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 12 \u041a\u0413\u0446, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u0447\u0430\u0441\u0442\u043e\u0442 \u0434\u043e 6 \u041a\u0413\u0446.DEFAULT_SAMPLE_RATE = 12000sample_rate=DEFAULT_SAMPLE_RATE,\u0428\u0430\u0433 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u0443\u0449\u0438\u043c\u0438 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 VarAC, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0433\u0435\u0440\u0446&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-491042","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/491042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=491042"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/491042\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=491042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=491042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=491042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}