{"id":498533,"date":"2026-10-14T00:10:44","date_gmt":"2026-10-13T21:10:44","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=498533"},"modified":"2026-10-14T00:10:44","modified_gmt":"2026-10-13T21:10:44","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=498533","title":{"rendered":"\u041c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f CPFSK \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0443\u0440\u0430\u0445 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 STM32"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p> \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u0433\u0438!<\/p>\n<p> \u042f \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0438 \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f,  \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0432\u044f\u0437\u0438. \u0412 \u043d\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0445\u043e\u0434\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0432\u044f\u0437\u0438, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443. \u042d\u0442\u043e \u043c\u0438\u0440 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 CMW-270, FSL-6, FSQ-8, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u0433\u0438\u0433\u0430\u0433\u0435\u0440\u0446\u043e\u0432\u044b\u043c\u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430\u043c\u0438 Agilent. \u0410 \u0434\u043e\u043c\u0430 \u0443 \u043c\u0435\u043d\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0438\u0440\u043e\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435. \u0418 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u0440\u043e\u0449\u0435. \u041d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0442\u043e\u0442 \u0436\u0435. \u0412\u043e\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0435-\u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0444\u0435\u0440\u044b.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u043e-\u043c\u043e\u0434\u0435\u043c. \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u044d\u0442\u043e \u0441\u0442\u0430\u0440\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b AX.25, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u043d\u0438\u0436\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044e CPFSK. \u0421\u043a\u0430\u0437\u0430\u043d\u043e-\u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u041c\u043e\u0434\u0435\u043c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u044f\u0434\u0440\u0435 Cortex M3 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443. <\/p>\n<p>\u0418\u0442\u0430\u043a. \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0435\u0439 Continuous-Phase Frequency-Shift Keying (CPFSK). \u042d\u0442\u0430 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 \u0444\u0430\u0437\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 Assembler Corex M3, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u0430\u0434\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0444\u0430\u0437\u043e\u0439 \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0443\u0440\u0430\u0445.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/bc\/a3\/89\/bca3891a183672464f29d752bd201c64.jpg\" width=\"640\" height=\"480\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/bc\/a3\/89\/bca3891a183672464f29d752bd201c64.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/bc\/a3\/89\/bca3891a183672464f29d752bd201c64.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p> \u0414\u0430\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 sin(x)\/cos(x) \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 rSinFixed, rCosFixed \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u0422\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430, \u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0434\u043a\u043e \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c. \u0422.\u0435. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b. \u041a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e?<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u0421\u043c\u044b\u0441\u043b \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b sin(x) \u0438 cos(x) \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0441\u044c X, \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 I, \u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0441\u044c Y \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Q. \u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 I \u2013 j*Q. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f I \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e cos(alpha), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Q \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 sin(alpha). \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e Inew = I*cos(alpha) \u2013 Q*sin(alpha), Qnew=Q*cos(alpha) + I*sin(alpha). \u041f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u044d\u0442\u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0443\u0433\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432.  <\/p>\n<p> \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u0435\u0442\u043e\u0434 \u0442\u0430\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0434\u043b\u0438\u043d\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u043b\u0435\u0431\u0430\u0442\u044c\u0441\u044f. \u0410 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0430 alpha, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0437\u0435 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f. \u041a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441? \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 rSinFixed(apha) \u0438 rCosFixed(alpha). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043d, \u043d\u0430 \u0442\u0435\u0440\u044f\u044f \u0444\u0430\u0437\u044b \u0438 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f.  <\/p>\n<p> \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<pre><code>struct FskModem_ModulateStruct {uint32_t amplitude \/\/ Amplitudeuint32_t phaseIncrement \/\/ Phase incrementuint32_t rotCos; \/\/ cos(phi), i.e. rotation ( I )uint32_t rotSin; \/\/ sin(phi), i.e. rotation ( Q )}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>amplitude &#8212; \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0430\u0445\u0430 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f\u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0434\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f\u0431\u0443\u0434\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>phaseIncrement\u2014 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0444\u0430\u0437\u044b, \u0438\u043b\u0438\u0443\u0433\u043e\u043b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0432\u0435\u043a\u0442\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>rotCos\u2013 \u044d\u0442\u043e\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>rotSin\u2013 \u044d\u0442\u043e\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0445\u0438\u0442\u0440\u043e \u0438\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0434\u0430\u0435\u0442\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430\u0432\u0435\u043a\u0442\u043e\u0440\u0430 sqrt( rotCos^2 +rotSin^2 ), \u043c\u0435\u043d\u044c\u0448\u0435\u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e \u0438\u0437\u0430\u0442\u0443\u0445\u0430\u0442\u044c. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/35\/95\/95\/3595954f5bbd2d20d32deb88704bddeb.jpg\" alt=\"\u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c.\" title=\"\u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c.\" width=\"320\" height=\"240\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/35\/95\/95\/3595954f5bbd2d20d32deb88704bddeb.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/35\/95\/95\/3595954f5bbd2d20d32deb88704bddeb.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043d\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0432\u043f\u0440\u043e\u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c inline \u0432 Header-\u0444\u0430\u0439\u043b\u0435, \u043d\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435.<\/p>\n<pre><code class=\"assembly\">.section .text.type FskModemModulateFreqInit, %function.align 4FskModemModulateFreqInit:\/\/ R0 &lt;= struct pointer\/\/ R1 &lt;= Phase increment per sample\/\/ R2 &lt;= Amplitude\/\/ R3 &lt;= Exp factorpush {r4,lr}\/\/ R4 &lt;= struct pointermov r4, r0\/\/ Store amplitudestr r2, [r4, #0x00]\/\/ Store phase increment per samplestr r1, [r4, #0x04]\/\/ R0 &lt;= PhaseIncrementmov r0, r1\/\/ R2 &lt;= PhaseIncrementmov r2, r0\/\/ R1 &lt;= Radius, I mean scaled rotation radiusmov r1, r3cmp r1, #0itt eqmovweq r1, #0xFFFEmovteq r1, #0x7FFF\/\/ Make rotation I componentbl rCosFixed\/\/ Store rotCosstr r0, [r4, #0x08]\/\/ R0 &lt;= phaseIncrementmov r0, r2\/\/ Make rotation Q componentbl rSinFixed\/\/ Store rotSinstr r0, [r4, #0x0C]pop {r4,lr}bx lr<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p> \u0418\u0442\u0430\u043a. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0435\u0433\u043e \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e.  <\/p>\n<pre><code class=\"assembly\">.section .text.type FskModemModulateAdd, %function.align 4FskModemModulateAdd:push {r4-r11, lr}push {r12}\/\/ R0 &lt;= pointer to FskModem_ModulateStruct\/\/ R1 &lt;= Phase\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R12 &lt;= struct pointermov r12, r0\/\/ R5 &lt;= Phase Incremnetldr r5, [r12, #4]\/\/ R0 &lt;= Phase + PhaseIncrement * SampleCountmla r0, r5, r3, r1\/\/ Update current phase on stackpush {r0}\/\/ Calculate current vector value\/\/ R5 &lt;= Q\/*************************************\/\/****** Calculate vector value *******\/\/*************************************\/\/\/ Save current phase rempory\/\/ R5 &lt;= R1 ( Phase )mov r5, r1\/\/ R0 &lt;= Phasemov r0, r1\/\/ R1 &lt;= Amplitude\/\/ ldr r1, [r12, #0]bl cosFixed\/\/ R4 &lt;= cos(Phase)mov r4, r0\/\/ R0 &lt;= Phasemov r0, r5bl sinFixed\/\/ R5 &lt;= sin(Phase)mov r5, r0\/************************************\/\/**** Get rotation coefficients ****\/\/************************************\/\/\/ R9 &lt;= cos(phi)ldr r9, [r12, #0x08]\/\/ R10 &lt;= sin(phi)ldr r10, [r12, #0x0C]\/\/ R11 &lt;= -sin(phi)negs r11, r10\/\/ R1 &lt;= Amplitudeldr r1, [r12, #0]\/\/ R1 &lt;= Amplitude\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R4 &lt;= I\/\/ R5 &lt;= Q\/\/ R9 &lt;= cos(phi)\/\/ R10 &lt;= sin(phi)\/\/ R11 &lt;= -sin(phi)FskModemModulateAddLoop:\/\/ Possible to use R0, R6, R7, R8 as temp\/\/ R7 is scaled to Q2.30 value of orig\/* Calculate and store I *\/smull r6, r7, r4, r1\/\/ Make from scaled cos, cos value + DC-offset, Q0.16\/Q1.15asr r8, r7, #15\/* Calculate and store Q *\/smull r6, r7, r5, r1\/\/ Make from scaled sin, sin value + DC-offset, Q0.16\/Q1.15asr r6, r7, #15\/* DSP appand block *\/\/\/ Load current sample value of ( cos(x)\/sin(x) )ldr r0, [r2]\/\/ Unpack valuesbfx r7, r0, #16, #16sbfx r0, r0, #0, #16\/\/ Append valueadd r6, r6, r7add r8, r8, r0\/\/ Pack againbfi r6, r8, #16, #16\/\/ Store valuestr r6, [r2], #4\/\/ So, it is possible to use, but Cortex M3\/\/ qadd16, i.e.\/\/ ldr r0, [r2]\/\/ bfi r6, r8, #16, #16\/\/ qadd16 r6, r0, r6\/\/ str r6, [r2], #4\/\/ Update phase use\/\/ R4, R5 - I\/Q, R9,R10 - angles\/\/ R6, R7 - Tempsmull r6, r7, r4, r9smlal r6, r7, r5, r11\/\/ R7 &lt;= I (Q1.31)lsl r7, r7, #1orr r7, r7, r6, lsr #31smull r6, r8, r4, r10smlal r6, r8, r5, r9\/\/ R5 &lt;= Q (Q1.31)lsl r5, r8, #1orr r5, r5, r6, lsr #31\/\/ R4 &lt;= I (update, Q1.31)mov r4, r7subs r3, #1bne FskModemModulateAddLooppop {r0}pop {r12}pop {r4-r11, lr}bx lr<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p> \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u044e\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f 16-\u0431\u0438\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u044b, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 32-\u0431\u0438\u0442\u043d\u0430\u044f. \u0422.\u0435. \u0412\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 32-\u0431\u0438\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0443. \u041d\u043e \u0438 \u0437\u0434\u0435\u0441\u044c, \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u044e\u043a. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b. \u041e\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u043d\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u043c\u0438 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438 \u0434\u043b\u0438\u043d\u0435 \u0431\u043b\u043e\u043a\u0430 128 \u0431\u0430\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 24 \u0431\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044f \u043f\u043e\u0438\u0441\u043a \u0442\u0440\u0430\u043d\u0437\u0438\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438 \u0438\u0445 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a, \u0438\u043b\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u044f \u0438\u0445.<\/p>\n<p> \u0414\u0440\u0443\u0433\u043e\u0439 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u043e\u0434\u0435, \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432. \u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d \u043d\u0443\u0436\u0435\u043d? \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e N-CPFSK, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 OFDM \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0418 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u043a\u043e\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u043a \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0443\u0444\u0435\u0440\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u044b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e-\u0437\u0430\u0442\u0443\u0445\u0430\u044e\u0449\u0438\u0435.<\/p>\n<p> \u0410 \u043f\u043e\u0442\u043e\u043c, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b. \u0415\u0441\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0430\u0447\u043a\u0443 \u0432\u043d\u0430\u0447\u0430\u043b\u0435&#8230; \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434.<\/p>\n<pre><code class=\"assembly\">.section .text.type FskModemModulateRev, %function.align 4FskModemModulateRev:push {r4-r11, lr}push {r12}\/\/ R0 &lt;= pointer to FskModem_ModulateStruct\/\/ R1 &lt;= Phase\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R12 &lt;= struct pointermov r12, r0\/\/ R5 &lt;= Phase Incremnetldr r5, [r12, #4]\/\/ R0 &lt;= Phase + PhaseIncrement * SampleCountmla r0, r5, r3, r1\/\/ Update current phase on stackpush {r0}\/\/ Calculate current vector value\/\/ R5 &lt;= Q\/*************************************\/\/****** Calculate vector value *******\/\/*************************************\/\/\/ Save current phase tempory\/\/ R0 is Updated Phase\/\/ R5 &lt;= R0 ( Phase )mov r5, r0\/\/ R1 &lt;= Amplitude\/\/ ldr r1, [r12, #0]bl cosFixed\/\/ R4 &lt;= cos(Phase)mov r4, r0\/\/ R0 &lt;= Phasemov r0, r5bl sinFixed\/\/ R5 &lt;= sin(Phase)mov r5, r0\/************************************\/\/**** Get rotation coefficients ****\/\/************************************\/\/\/ R9 &lt;= cos(phi)ldr r9, [r12, #0x08]\/\/ R10 &lt;= sin(phi)ldr r10, [r12, #0x0C]\/\/ R11 &lt;= -sin(phi)negs r11, r10\/\/ R1 &lt;= Amplitudeldr r1, [r12, #0]\/\/ R0 &lt;= DacDcOffsetldr r0, =_gStm32DacDcOffsetldr r0, [r0]\/\/ R3 &lt;= R3*4add r2, r2, r3, lsl #2\/\/ R2 &lt;= end of buffer pointer\/\/ R1 &lt;= Amplitude\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R4 &lt;= I\/\/ R5 &lt;= Q\/\/ R9 &lt;= cos(phi)\/\/ R10 &lt;= sin(phi)\/\/ R11 &lt;= -sin(phi)\/\/ R0 &lt;= DCoffsetFskModemModulateRevLoop:\/\/ Possible to use R6, R7, R8 as temp\/\/ R7 is scaled to Q2.30 value of orig\/* Calculate and store I *\/smull r6, r7, r4, r1\/\/ Make from scaled cos, cos value + DC-offset, Q0.16\/Q1.15add r8, r0, r7, asr #15\/* Calculate and store Q *\/smull r6, r7, r5, r1\/\/ Make from scaled sin, sin value + DC-offset, Q0.16\/Q1.15add r6, r0, r7, asr #15\/\/ Store both cos(x)\/sin(x)bfi r6, r8, #16, #16stmdb r2!, {r6}\/\/sub r2, r2, #4\/\/str r6, [r2]\/\/ Update phase use\/\/ R4, R5 - I\/Q, R9,R10 - angles\/\/ R6, R7 - Tempsmull r6, r7, r4, r9smlal r6, r7, r5, r10\/\/ R7 &lt;= I (Q1.31)lsl r7, r7, #1orr r7, r7, r6, lsr #31smull r6, r8, r4, r11smlal r6, r8, r5, r9\/\/ R5 &lt;= Q (Q1.31)lsl r5, r8, #1orr r5, r5, r6, lsr #31\/\/ R4 &lt;= I (update, Q1.31)mov r4, r7subs r3, #1bne FskModemModulateRevLooppop {r0}pop {r12}pop {r4-r11, lr}bx lr<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p> \u041a\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0444\u043e\u0440\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0430 \u043e\u0431\u043b\u043e\u0436\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a (\u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434).<\/p>\n<pre><code class=\"cpp\">static constexpr const uint32_t SampleCount = 320;static constexpr const int32_t amplitude = 1200; \/\/1850;static constexpr const uint32_t sampleRate = 128;static constexpr const uint32_t frequency = 10;static constexpr const uint32_t frequency1 = 2;static constexpr const uint32_t samplesPerPeriod = sampleRate \/ frequency;static constexpr const uint32_t samples1PerPeriod = sampleRate \/ frequency1;static constexpr const uint32_t phaseIncrementPerSample = 0xFFFFFFFF \/ samplesPerPeriod;static constexpr const uint32_t phase1IncrementPerSample = 0xFFFFFFFF \/ samples1PerPeriod;static constexpr const uint32_t expScale = 0x7FF00000;static constexpr const uint32_t expScaleSide = 0x70000000;sampleCount = SampleCount \/ 8;FskModemModulateFreqInit( modulator, phaseIncrementPerSample, (amplitude &lt;&lt; 16), expScaleSide );phase = FskModemModulateRevAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;sampleCount = SampleCount \/ 4;FskModemModulateFreqInit( modulator, phaseIncrementPerSample, (amplitude &lt;&lt; 16), 0 );phase = FskModemModulateAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;sampleCount = SampleCount \/ 16;FskModemModulateFreqInit( modulator, ( static_cast&lt;uint32_t&gt;( (static_cast&lt;uint64_t&gt;(3) * phaseIncrementPerSample) + phase1IncrementPerSample) \/ 4 ), (amplitude &lt;&lt; 16), expScale );phase = FskModemModulateAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;sampleCount = SampleCount \/ 16;FskModemModulateFreqInit( modulator, ( static_cast&lt;uint32_t&gt;( (static_cast&lt;uint64_t&gt;(3) * phase1IncrementPerSample) + phaseIncrementPerSample) \/ 4 ), (amplitude &lt;&lt; 16), expScale );phase = FskModemModulateRevAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;sampleCount = SampleCount \/ 4;FskModemModulateFreqInit( modulator, phase1IncrementPerSample, (amplitude &lt;&lt; 16), 0 );phase = FskModemModulateAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;sampleCount = SampleCount \/ 8;FskModemModulateFreqInit( modulator, phase1IncrementPerSample, (amplitude &lt;&lt; 16), expScaleSide );phase = FskModemModulateAdd( modulator, phase, &amp;samples[ sampleOffset ], sampleCount );sampleOffset += sampleCount;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0447\u0435\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430? \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0444\u0430\u0437\u043e\u0439 \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.  \u0413\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434?<\/p>\n<ol>\n<li>\n<p>FSK \/ CPFSK \u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>OFDM &#8212; \u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440\u044b. \u041a\u043e\u0434 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u0430\u0440\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c OFDM. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u0435\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u043e\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440\u044b \u0447\u0430\u0441\u0442\u043e\u0442 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0433\u043e\u043b\u043e\u0441\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043a\u043e\u0434\u0435\u043a\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 Codec2 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0438 \u0435\u0435 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0442\u043e\u0440\u0430 \u0430\u0443\u0434\u0438\u043e-\u043a\u043e\u0434\u0435\u043a\u0430. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445.<\/p>\n<\/li>\n<\/ol>\n<p> \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/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\/1094068\/\">https:\/\/habr.com\/ru\/articles\/1094068\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p> \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u0433\u0438! \u042f \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0438 \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0431\u044b\u043b\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f,  \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0432\u044f\u0437\u0438. \u0412 \u043d\u0430\u0448\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0445\u043e\u0434\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044c\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0432\u044f\u0437\u0438, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443. \u042d\u0442\u043e \u043c\u0438\u0440 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u0430. \u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 CMW-270, FSL-6, FSQ-8, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u0433\u0438\u0433\u0430\u0433\u0435\u0440\u0446\u043e\u0432\u044b\u043c\u0438 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430\u043c\u0438 Agilent. \u0410 \u0434\u043e\u043c\u0430 \u0443 \u043c\u0435\u043d\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043c\u0438\u0440\u043e\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435. \u0418 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043f\u0440\u043e\u0449\u0435. \u041d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0442\u043e\u0442 \u0436\u0435. \u0412\u043e\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0435-\u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0444\u0435\u0440\u044b. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0434\u0438\u043e-\u043c\u043e\u0434\u0435\u043c. \u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u044d\u0442\u043e \u0441\u0442\u0430\u0440\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b AX.25, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u043d\u0438\u0436\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044e CPFSK. \u0421\u043a\u0430\u0437\u0430\u043d\u043e-\u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u041c\u043e\u0434\u0435\u043c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c \u044f\u0434\u0440\u0435 Cortex M3 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443. \u0418\u0442\u0430\u043a. \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0435\u0439 Continuous-Phase Frequency-Shift Keying (CPFSK). \u042d\u0442\u0430 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 \u0444\u0430\u0437\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32.\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 Assembler Corex M3, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u0430\u0434\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0444\u0430\u0437\u043e\u0439 \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0443\u0440\u0430\u0445. \u0414\u0430\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 sin(x)\/cos(x) \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 rSinFixed, rCosFixed \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u0422\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0437\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430, \u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0434\u043a\u043e \u0441\u043a\u043b\u0435\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c. \u0422.\u0435. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b. \u041a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e?\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u0421\u043c\u044b\u0441\u043b \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b sin(x) \u0438 cos(x) \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0441\u044c X, \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 I, \u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0441\u044c Y \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Q. \u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 I \u2013 j*Q. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f I \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e cos(alpha), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Q \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 sin(alpha). \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0433\u043e\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e Inew = I*cos(alpha) \u2013 Q*sin(alpha), Qnew=Q*cos(alpha) + I*sin(alpha). \u041f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u044d\u0442\u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0443\u0433\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432.   \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u0435\u0442\u043e\u0434 \u0442\u0430\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0434\u043b\u0438\u043d\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u043b\u0435\u0431\u0430\u0442\u044c\u0441\u044f. \u0410 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0430 alpha, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0437\u0435 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f. \u041a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441? \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 rSinFixed(apha) \u0438 rCosFixed(alpha). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043d, \u043d\u0430 \u0442\u0435\u0440\u044f\u044f \u0444\u0430\u0437\u044b \u0438 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f.   \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.struct FskModem_ModulateStruct {uint32_t amplitude \/\/ Amplitudeuint32_t phaseIncrement \/\/ Phase incrementuint32_t rotCos; \/\/ cos(phi), i.e. rotation ( I )uint32_t rotSin; \/\/ sin(phi), i.e. rotation ( Q )}amplitude &#8212; \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0430\u0445\u0430 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u044f\u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0434\u043b\u0438\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f\u0431\u0443\u0434\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.phaseIncrement\u2014 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0444\u0430\u0437\u044b, \u0438\u043b\u0438\u0443\u0433\u043e\u043b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0432\u0435\u043a\u0442\u043e\u0440rotCos\u2013 \u044d\u0442\u043e\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430rotSin\u2013 \u044d\u0442\u043e\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\u041d\u0430\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0445\u0438\u0442\u0440\u043e \u0438\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0434\u0430\u0435\u0442\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430\u0432\u0435\u043a\u0442\u043e\u0440\u0430 sqrt( rotCos^2 +rotSin^2 ), \u043c\u0435\u043d\u044c\u0448\u0435\u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e \u0438\u0437\u0430\u0442\u0443\u0445\u0430\u0442\u044c. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b.\u0421\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043b\u0430\u0432\u043d\u044b\u043c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c.\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043d\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0432\u043f\u0440\u043e\u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c inline \u0432 Header-\u0444\u0430\u0439\u043b\u0435, \u043d\u043e \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435..section .text.type FskModemModulateFreqInit, %function.align 4FskModemModulateFreqInit:\/\/ R0 &lt;= struct pointer\/\/ R1 &lt;= Phase increment per sample\/\/ R2 &lt;= Amplitude\/\/ R3 &lt;= Exp factorpush {r4,lr}\/\/ R4 &lt;= struct pointermov r4, r0\/\/ Store amplitudestr r2, [r4, #0x00]\/\/ Store phase increment per samplestr r1, [r4, #0x04]\/\/ R0 &lt;= PhaseIncrementmov r0, r1\/\/ R2 &lt;= PhaseIncrementmov r2, r0\/\/ R1 &lt;= Radius, I mean scaled rotation radiusmov r1, r3cmp r1, #0itt eqmovweq r1, #0xFFFEmovteq r1, #0x7FFF\/\/ Make rotation I componentbl rCosFixed\/\/ Store rotCosstr r0, [r4, #0x08]\/\/ R0 &lt;= phaseIncrementmov r0, r2\/\/ Make rotation Q componentbl rSinFixed\/\/ Store rotSinstr r0, [r4, #0x0C]pop {r4,lr}bx lr \u0418\u0442\u0430\u043a. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0435\u0433\u043e \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044e.  .section .text.type FskModemModulateAdd, %function.align 4FskModemModulateAdd:push {r4-r11, lr}push {r12}\/\/ R0 &lt;= pointer to FskModem_ModulateStruct\/\/ R1 &lt;= Phase\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R12 &lt;= struct pointermov r12, r0\/\/ R5 &lt;= Phase Incremnetldr r5, [r12, #4]\/\/ R0 &lt;= Phase + PhaseIncrement * SampleCountmla r0, r5, r3, r1\/\/ Update current phase on stackpush {r0}\/\/ Calculate current vector value\/\/ R5 &lt;= Q\/*************************************\/\/****** Calculate vector value *******\/\/*************************************\/\/\/ Save current phase rempory\/\/ R5 &lt;= R1 ( Phase )mov r5, r1\/\/ R0 &lt;= Phasemov r0, r1\/\/ R1 &lt;= Amplitude\/\/ ldr r1, [r12, #0]bl cosFixed\/\/ R4 &lt;= cos(Phase)mov r4, r0\/\/ R0 &lt;= Phasemov r0, r5bl sinFixed\/\/ R5 &lt;= sin(Phase)mov r5, r0\/************************************\/\/**** Get rotation coefficients ****\/\/************************************\/\/\/ R9 &lt;= cos(phi)ldr r9, [r12, #0x08]\/\/ R10 &lt;= sin(phi)ldr r10, [r12, #0x0C]\/\/ R11 &lt;= -sin(phi)negs r11, r10\/\/ R1 &lt;= Amplitudeldr r1, [r12, #0]\/\/ R1 &lt;= Amplitude\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R4 &lt;= I\/\/ R5 &lt;= Q\/\/ R9 &lt;= cos(phi)\/\/ R10 &lt;= sin(phi)\/\/ R11 &lt;= -sin(phi)FskModemModulateAddLoop:\/\/ Possible to use R0, R6, R7, R8 as temp\/\/ R7 is scaled to Q2.30 value of orig\/* Calculate and store I *\/smull r6, r7, r4, r1\/\/ Make from scaled cos, cos value + DC-offset, Q0.16\/Q1.15asr r8, r7, #15\/* Calculate and store Q *\/smull r6, r7, r5, r1\/\/ Make from scaled sin, sin value + DC-offset, Q0.16\/Q1.15asr r6, r7, #15\/* DSP appand block *\/\/\/ Load current sample value of ( cos(x)\/sin(x) )ldr r0, [r2]\/\/ Unpack valuesbfx r7, r0, #16, #16sbfx r0, r0, #0, #16\/\/ Append valueadd r6, r6, r7add r8, r8, r0\/\/ Pack againbfi r6, r8, #16, #16\/\/ Store valuestr r6, [r2], #4\/\/ So, it is possible to use, but Cortex M3\/\/ qadd16, i.e.\/\/ ldr r0, [r2]\/\/ bfi r6, r8, #16, #16\/\/ qadd16 r6, r0, r6\/\/ str r6, [r2], #4\/\/ Update phase use\/\/ R4, R5 &#8212; I\/Q, R9,R10 &#8212; angles\/\/ R6, R7 &#8212; Tempsmull r6, r7, r4, r9smlal r6, r7, r5, r11\/\/ R7 &lt;= I (Q1.31)lsl r7, r7, #1orr r7, r7, r6, lsr #31smull r6, r8, r4, r10smlal r6, r8, r5, r9\/\/ R5 &lt;= Q (Q1.31)lsl r5, r8, #1orr r5, r5, r6, lsr #31\/\/ R4 &lt;= I (update, Q1.31)mov r4, r7subs r3, #1bne FskModemModulateAddLooppop {r0}pop {r12}pop {r4-r11, lr}bx lr \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u044e\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f 16-\u0431\u0438\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u044b, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 32-\u0431\u0438\u0442\u043d\u0430\u044f. \u0422.\u0435. \u0412\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 32-\u0431\u0438\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0443. \u041d\u043e \u0438 \u0437\u0434\u0435\u0441\u044c, \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u044e\u043a. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b. \u041e\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c. \u041a\u0441\u0442\u0430\u0442\u0438, \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u043d\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u043c\u0438 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438 \u0434\u043b\u0438\u043d\u0435 \u0431\u043b\u043e\u043a\u0430 128 \u0431\u0430\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 24 \u0431\u0438\u0442, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044f \u043f\u043e\u0438\u0441\u043a \u0442\u0440\u0430\u043d\u0437\u0438\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 \u0438 \u0438\u0445 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a, \u0438\u043b\u0438 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u044f \u0438\u0445. \u0414\u0440\u0443\u0433\u043e\u0439 \u0442\u0440\u044e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u043e\u0434\u0435, \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432. \u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d \u043d\u0443\u0436\u0435\u043d? \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e N-CPFSK, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 OFDM \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0418 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u043a\u043e\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u043a \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u0431\u0443\u0444\u0435\u0440\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u044b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e-\u0437\u0430\u0442\u0443\u0445\u0430\u044e\u0449\u0438\u0435. \u0410 \u043f\u043e\u0442\u043e\u043c, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b. \u0415\u0441\u043b\u0438 \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0430\u0447\u043a\u0443 \u0432\u043d\u0430\u0447\u0430\u043b\u0435&#8230; \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434..section .text.type FskModemModulateRev, %function.align 4FskModemModulateRev:push {r4-r11, lr}push {r12}\/\/ R0 &lt;= pointer to FskModem_ModulateStruct\/\/ R1 &lt;= Phase\/\/ R2 &lt;= Buffer\/\/ R3 &lt;= Sample count\/\/ R12 &lt;= struct pointermov r12, r0\/\/ R5 &lt;= Phase Incremnetldr r5, [r12, #4]\/\/ R0 &lt;= Phase + PhaseIncrement * SampleCountmla r0, r5, r3, r1\/\/ Update current phase on stackpush {r0}\/\/ Calculate current vector value\/\/ R5 &lt;= Q\/*************************************\/\/****** Calculate vector value *******\/\/*************************************\/\/\/ Save current phase tempory\/\/ R0 is Updated Phase\/\/ R5 &lt;= R0 (&#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-498533","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498533","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=498533"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498533\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=498533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=498533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=498533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}