{"id":264616,"date":"2015-08-31T12:07:02","date_gmt":"2015-08-31T08:07:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264616"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264616","title":{"rendered":"\u0424\u0443\u0440\u044c\u0435-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439"},"content":{"rendered":"<br \/>\n<h2>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p>  \u0426\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043b, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u043d\u0441\u043e\u0440\u0430\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u0417\u043d\u0430\u044f \u0447\u0442\u043e \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u043e\u043d\u043a\u0430\u044f \u043b\u0438\u043d\u0437\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044f\u0445, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.<\/p>\n<p>  \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0442\u0430\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<ol>\n<li>Z=FFT(X) \u2013 \u043f\u0440\u044f\u043c\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>Z\u2032=T(Z) \u2013 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u0430\u0440\u0430\u043d\u0442\u0430 \u043a \u0424\u0443\u0440\u044c\u0435-\u043e\u0431\u0440\u0430\u0437\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>Y=BFT(Z\u2032) \u2013 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0424\u0443\u0440\u044c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. \u0425\u043e\u0442\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u0438\u043d\u0437 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u043d\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0434\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u043d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043a \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u0438\u0441\u043a\u0440\u0435\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<h2>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c FFTTools. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0430\u0434\u0440\u0435\u0441: <a href=\"https:\/\/github.com\/dprotopopov\/FFTTools\">github.com\/dprotopopov\/FFTTools<\/a><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0412 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u0438\u0430\u0444\u0440\u0430\u0433\u043c\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u0430\u044f \u0432 \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435 \u0432 \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0430\u0444\u0440\u0430\u0433\u043c\u0443, \u0432\u043e\u043b\u043d\u044b \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 (\u0441 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043d) \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435, \u0430 \u0432\u043e\u043b\u043d\u044b \u043d\u0438\u0437\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 (\u0441 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043d) \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435 \u0432 \u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u0432 \u044d\u043a\u0440\u0430\u043d\u0435, \u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0437 \u0447\u0430\u0441\u0442\u043e\u0442 \u0432\u043e\u043b\u043d \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u043b\u0438\u043d.<\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c:  <\/p>\n<ol>\n<li>\u041f\u0443\u0441\u0442\u044c X(N1,N2) \u2013 \u043c\u0430\u0441\u0441\u0438\u0432 \u044f\u0440\u043a\u043e\u0441\u0442\u0435\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Px = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 X<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z=FT(X) \u2013 \u043f\u0440\u044f\u043c\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z\u2032=T(Z), \u0433\u0434\u0435 T \u2013 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043c\u0430\u0442\u0440\u0438\u0446\u044b-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u043c 5. \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0424\u0443\u0440\u044c\u0435-\u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c)<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y=RFT(Z\u2032) \u2013 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Py = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Y<\/li>\n<li>\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y(N1,N2) \u043f\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u044f\u0440\u043a\u043e\u0441\u0442\u0438 Px\/Py<\/li>\n<\/ol>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0412 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0434\u0438\u0430\u0444\u0440\u0430\u0433\u043c\u0430, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u0430\u044f \u0432 \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435 \u0432 \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0430\u0444\u0440\u0430\u0433\u043c\u0443, \u0432\u043e\u043b\u043d\u044b \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 (\u0441 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043d) \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435, \u0430 \u0432\u043e\u043b\u043d\u044b \u043d\u0438\u0437\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 (\u0441 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u0438\u043d\u0430\u043c\u0438 \u0432\u043e\u043b\u043d) \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c:  <\/p>\n<ol>\n<li>\u041f\u0443\u0441\u0442\u044c X(N1,N2) \u2013 \u043c\u0430\u0441\u0441\u0438\u0432 \u044f\u0440\u043a\u043e\u0441\u0442\u0435\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Px = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 X<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z=FT(X) \u2013 \u043f\u0440\u044f\u043c\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 L=Z(0,0) \u2013 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z\u2032=T(Z), \u0433\u0434\u0435 T \u2013 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043c\u0430\u0442\u0440\u0438\u0446\u044b-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043d\u0438\u0437\u043a\u0438\u043c 6. \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0424\u0443\u0440\u044c\u0435-\u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043d\u0438\u0437\u043a\u0438\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c)<\/li>\n<li>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Z\u2019(0,0)=L \u2013 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y=RFT(Z\u2032) \u2013 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Py = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Y<\/li>\n<li>\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y(N1,N2) \u043f\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u044f\u0440\u043a\u043e\u0441\u0442\u0438 Px\/Py<\/li>\n<\/ol>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0412 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0424\u0443\u0440\u044c\u0435-\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u0430 \u0438 \u043e\u043a\u0443\u043b\u044f\u0440\u0430.<\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c:  <\/p>\n<ol>\n<li>\u041f\u0443\u0441\u0442\u044c X(N1,N2) \u2013 \u043c\u0430\u0441\u0441\u0438\u0432 \u044f\u0440\u043a\u043e\u0441\u0442\u0435\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Px = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 X<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z=FT(X) \u2013 \u043f\u0440\u044f\u043c\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Z\u2032=T(Z), \u0433\u0434\u0435 T \u2013 \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c, \u043b\u0438\u0431\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y=RFT(Z\u2032) \u2013 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c Py = \u0441\u0440\u0435\u0434\u043d\u044f\u044f (\u0441\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430\u044f) \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Y<\/li>\n<li>\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 Y(M1,M2) \u043f\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u044f\u0440\u043a\u043e\u0441\u0442\u0438 Px\/Py<\/li>\n<\/ol>\n<p>  <b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435<\/b>  <\/p>\n<ul>\n<li>Microsoft Visual Studio 2013 C# \u2014 \u0441\u0440\u0435\u0434\u0430 \u0438 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<li>EmguCV\/OpenCV \u2013 C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/li>\n<li>FFTWSharp\/FFTW \u2013 C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0430\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">        \/\/\/ &lt;summary&gt;         \/\/\/     Clear internal region of array         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;param name=&quot;data&quot;&gt;Array of values&lt;\/param&gt;         \/\/\/ &lt;param name=&quot;size&quot;&gt;Internal blind region size&lt;\/param&gt;         private static void Blind(Complex[,,] data, Size size)         {             int n0 = data.GetLength(0);             int n1 = data.GetLength(1);             int n2 = data.GetLength(2);             int s0 = Math.Max(0, (n0 - size.Height)\/2);             int s1 = Math.Max(0, (n1 - size.Width)\/2);             int e0 = Math.Min((n0 + size.Height)\/2, n0);             int e1 = Math.Min((n1 + size.Width)\/2, n1);             for (int i = s0; i &lt; e0; i++)             {                 Array.Clear(data, i*n1*n2, n1*n2);             }             for (int i = 0; i &lt; s0; i++)             {                 Array.Clear(data, i*n1*n2 + s1*n2, (e1 - s1)*n2);             }             for (int i = e0; i &lt; n0; i++)             {                 Array.Clear(data, i*n1*n2 + s1*n2, (e1 - s1)*n2);             }         }         \/\/\/ &lt;summary&gt;         \/\/\/     Blur bitmap with the Fastest Fourier Transform         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;returns&gt;Blured bitmap&lt;\/returns&gt;         public Bitmap Blur(Bitmap bitmap)         {             using (var image = new Image&lt;Bgr, double&gt;(bitmap))             {                 int length = image.Data.Length;                 int n0 = image.Data.GetLength(0);                 int n1 = image.Data.GetLength(1);                 int n2 = image.Data.GetLength(2);                  var doubles = new double[length];                 Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));                 double power = Math.Sqrt(doubles.Average(x =&gt; x*x));                  var input = new fftw_complexarray(doubles.Select(x =&gt; new Complex(x, 0)).ToArray());                 var output = new fftw_complexarray(length);                 fftw_plan.dft_3d(n0, n1, n2, input, output,                     fftw_direction.Forward,                     fftw_flags.Estimate).Execute();                 Complex[] complex = output.GetData_Complex();                  var data = new Complex[n0, n1, n2];                 var buffer = new double[length*2];                  GCHandle complexHandle = GCHandle.Alloc(complex, GCHandleType.Pinned);                 GCHandle dataHandle = GCHandle.Alloc(data, GCHandleType.Pinned);                 IntPtr complexPtr = complexHandle.AddrOfPinnedObject();                 IntPtr dataPtr = dataHandle.AddrOfPinnedObject();                  Marshal.Copy(complexPtr, buffer, 0, buffer.Length);                 Marshal.Copy(buffer, 0, dataPtr, buffer.Length);                 Blind(data, _blinderSize);                 Marshal.Copy(dataPtr, buffer, 0, buffer.Length);                 Marshal.Copy(buffer, 0, complexPtr, buffer.Length);                  complexHandle.Free();                 dataHandle.Free();                  input.SetData(complex);                  fftw_plan.dft_3d(n0, n1, n2, input, output,                     fftw_direction.Backward,                     fftw_flags.Estimate).Execute();                 double[] array2 = output.GetData_Complex().Select(x =&gt; x.Magnitude).ToArray();                 double power2 = Math.Sqrt(array2.Average(x =&gt; x*x));                 doubles = array2.Select(x =&gt; x*power\/power2).ToArray();                 Buffer.BlockCopy(doubles, 0, image.Data, 0, length*sizeof (double));                 return image.Bitmap;             }         } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">        \/\/\/ &lt;summary&gt;         \/\/\/     Clear external region of array         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;param name=&quot;data&quot;&gt;Array of values&lt;\/param&gt;         \/\/\/ &lt;param name=&quot;size&quot;&gt;External blind region size&lt;\/param&gt;         private static void Blind(Complex[,,] data, Size size)         {             int n0 = data.GetLength(0);             int n1 = data.GetLength(1);             int n2 = data.GetLength(2);             int s0 = Math.Max(0, (n0 - size.Height)\/2);             int s1 = Math.Max(0, (n1 - size.Width)\/2);             int e0 = Math.Min((n0 + size.Height)\/2, n0);             int e1 = Math.Min((n1 + size.Width)\/2, n1);             for (int i = 0; i &lt; s0; i++)             {                 Array.Clear(data, i*n1*n2, s1*n2);                 Array.Clear(data, i*n1*n2 + e1*n2, (n1 - e1)*n2);             }             for (int i = e0; i &lt; n0; i++)             {                 Array.Clear(data, i*n1*n2, s1*n2);                 Array.Clear(data, i*n1*n2 + e1*n2, (n1 - e1)*n2);             }         }         \/\/\/ &lt;summary&gt;         \/\/\/     Sharp bitmap with the Fastest Fourier Transform         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;returns&gt;Sharped bitmap&lt;\/returns&gt;         public Bitmap Sharp(Bitmap bitmap)         {             using (var image = new Image&lt;Bgr, double&gt;(bitmap))             {                 int length = image.Data.Length;                 int n0 = image.Data.GetLength(0);                 int n1 = image.Data.GetLength(1);                 int n2 = image.Data.GetLength(2);                  var doubles = new double[length];                 Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));                 double power = Math.Sqrt(doubles.Average(x =&gt; x*x));                  var input = new fftw_complexarray(doubles.Select(x =&gt; new Complex(x, 0)).ToArray());                 var output = new fftw_complexarray(length);                 fftw_plan.dft_3d(n0, n1, n2, input, output,                     fftw_direction.Forward,                     fftw_flags.Estimate).Execute();                 Complex[] complex = output.GetData_Complex();                  Complex level = complex[0];                  var data = new Complex[n0, n1, n2];                 var buffer = new double[length*2];                  GCHandle complexHandle = GCHandle.Alloc(complex, GCHandleType.Pinned);                 GCHandle dataHandle = GCHandle.Alloc(data, GCHandleType.Pinned);                 IntPtr complexPtr = complexHandle.AddrOfPinnedObject();                 IntPtr dataPtr = dataHandle.AddrOfPinnedObject();                  Marshal.Copy(complexPtr, buffer, 0, buffer.Length);                 Marshal.Copy(buffer, 0, dataPtr, buffer.Length);                 Blind(data, _blinderSize);                 Marshal.Copy(dataPtr, buffer, 0, buffer.Length);                 Marshal.Copy(buffer, 0, complexPtr, buffer.Length);                  complexHandle.Free();                 dataHandle.Free();                  complex[0] = level;                  input.SetData(complex);                  fftw_plan.dft_3d(n0, n1, n2, input, output,                     fftw_direction.Backward,                     fftw_flags.Estimate).Execute();                 double[] array2 = output.GetData_Complex().Select(x =&gt; x.Magnitude).ToArray();                 double power2 = Math.Sqrt(array2.Average(x =&gt; x*x));                 doubles = array2.Select(x =&gt; x*power\/power2).ToArray();                 Buffer.BlockCopy(doubles, 0, image.Data, 0, length*sizeof (double));                 return image.Bitmap;             }         } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">         \/\/\/ &lt;summary&gt;         \/\/\/     Copy arrays         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;param name=&quot;input&quot;&gt;Input array&lt;\/param&gt;         \/\/\/ &lt;param name=&quot;output&quot;&gt;Output array&lt;\/param&gt;         private static void Copy(Complex[,,] input, Complex[,,] output)         {             int n0 = input.GetLength(0);             int n1 = input.GetLength(1);             int n2 = input.GetLength(2);             int m0 = output.GetLength(0);             int m1 = output.GetLength(1);             int m2 = output.GetLength(2);             int ex0 = Math.Min(n0, m0)\/2;             int ex1 = Math.Min(n1, m1)\/2;             int ex2 = Math.Min(n2, m2);             Debug.Assert(n2 == m2);             for (int k = 0; k &lt; ex2; k++)             {                 for (int i = 0; i &lt;= ex0; i++)                 {                     for (int j = 0; j &lt;= ex1; j++)                     {                         int ni = n0 - i - 1;                         int nj = n1 - j - 1;                         int mi = m0 - i - 1;                         int mj = m1 - j - 1;                         output[i, j, k] = input[i, j, k];                         output[mi, j, k] = input[ni, j, k];                         output[i, mj, k] = input[i, nj, k];                         output[mi, mj, k] = input[ni, nj, k];                     }                 }             }         }         \/\/\/ &lt;summary&gt;         \/\/\/     Resize bitmap with the Fastest Fourier Transform         \/\/\/ &lt;\/summary&gt;         \/\/\/ &lt;returns&gt;Resized bitmap&lt;\/returns&gt;         public Bitmap Stretch(Bitmap bitmap)         {             using (var image = new Image&lt;Bgr, double&gt;(bitmap))             {                 int length = image.Data.Length;                 int n0 = image.Data.GetLength(0);                 int n1 = image.Data.GetLength(1);                 int n2 = image.Data.GetLength(2);                 var doubles = new double[length];                 Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));                 double power = Math.Sqrt(doubles.Average(x =&gt; x*x));                  var input = new fftw_complexarray(doubles.Select(x =&gt; new Complex(x, 0)).ToArray());                 var output = new fftw_complexarray(length);                 fftw_plan.dft_3d(n0, n1, n2, input, output,                     fftw_direction.Forward,                     fftw_flags.Estimate).Execute();                 Complex[] complex = output.GetData_Complex();                  using (var image2 = new Image&lt;Bgr, double&gt;(_newSize))                 {                     int length2 = image2.Data.Length;                     int m0 = image2.Data.GetLength(0);                     int m1 = image2.Data.GetLength(1);                     int m2 = image2.Data.GetLength(2);                     var complex2 = new Complex[length2];                      var data = new Complex[n0, n1, n2];                     var data2 = new Complex[m0, m1, m2];                      var buffer = new double[length*2];                     GCHandle complexHandle = GCHandle.Alloc(complex, GCHandleType.Pinned);                     GCHandle dataHandle = GCHandle.Alloc(data, GCHandleType.Pinned);                     IntPtr complexPtr = complexHandle.AddrOfPinnedObject();                     IntPtr dataPtr = dataHandle.AddrOfPinnedObject();                      Marshal.Copy(complexPtr, buffer, 0, buffer.Length);                     Marshal.Copy(buffer, 0, dataPtr, buffer.Length);                      complexHandle.Free();                     dataHandle.Free();                      Copy(data, data2);                      buffer = new double[length2*2];                     complexHandle = GCHandle.Alloc(complex2, GCHandleType.Pinned);                     dataHandle = GCHandle.Alloc(data2, GCHandleType.Pinned);                     complexPtr = complexHandle.AddrOfPinnedObject();                     dataPtr = dataHandle.AddrOfPinnedObject();                      Marshal.Copy(dataPtr, buffer, 0, buffer.Length);                     Marshal.Copy(buffer, 0, complexPtr, buffer.Length);                      complexHandle.Free();                     dataHandle.Free();                      var input2 = new fftw_complexarray(complex2);                     var output2 = new fftw_complexarray(length2);                     fftw_plan.dft_3d(m0, m1, m2, input2, output2,                         fftw_direction.Backward,                         fftw_flags.Estimate).Execute();                     double[] array2 = output2.GetData_Complex().Select(x =&gt; x.Magnitude).ToArray();                     double power2 = Math.Sqrt(array2.Average(x =&gt; x*x));                     double[] doubles2 = array2.Select(x =&gt; x*power\/power2).ToArray();                     Buffer.BlockCopy(doubles2, 0, image2.Data, 0, length2*sizeof (double));                     return image2.Bitmap;                 }             }         } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <b>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/b>  <\/p>\n<ol>\n<li>\u0410.\u041b. \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u0432. \u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0423\u0447\u0435\u0431\u043d\u043e\u0435 \u043f\u043e\u0441\u043e\u0431\u0438\u0435. \u0421\u041f\u0431. \u0421\u041f\u044e\u0413\u0423\u0418\u0422\u041c\u041e 2005. 46 \u0441. <\/li>\n<li>\u0410.\u0410.\u0410\u043a\u0430\u0435\u0432, \u0421.\u0410.\u041c\u0430\u0439\u043e\u0440\u043e\u0432 \u00ab\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438\u00bb \u041c.:1988 <\/li>\n<li>\u0414\u0436.\u0413\u0443\u0434\u043c\u0435\u043d \u00ab\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0424\u0443\u0440\u044c\u0435-\u043e\u043f\u0442\u0438\u043a\u0443\u00bb \u041c.: \u041c\u0438\u0440 1970<\/li>\n<\/ol>\n<div class=\"clear\"><\/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=\"http:\/\/habrahabr.ru\/post\/265781\/\"> http:\/\/habrahabr.ru\/post\/265781\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<h2>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p>  \u0426\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043b, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u043d\u0441\u043e\u0440\u0430\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u0417\u043d\u0430\u044f \u0447\u0442\u043e \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u043e\u043d\u043a\u0430\u044f \u043b\u0438\u043d\u0437\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044f\u0445, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.<\/p>\n<p>  \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0442\u0430\u043a\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<ol>\n<li>Z=FFT(X) \u2013 \u043f\u0440\u044f\u043c\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<li>Z\u2032=T(Z) \u2013 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u0430\u0440\u0430\u043d\u0442\u0430 \u043a \u0424\u0443\u0440\u044c\u0435-\u043e\u0431\u0440\u0430\u0437\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>Y=BFT(Z\u2032) \u2013 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0424\u0443\u0440\u044c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435. \u0425\u043e\u0442\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u0438\u043d\u0437 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435 \u043d\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0434\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u043d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043a \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0434\u0438\u0441\u043a\u0440\u0435\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<h2>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c FFTTools. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0430\u0434\u0440\u0435\u0441: <a href=\"https:\/\/github.com\/dprotopopov\/FFTTools\">github.com\/dprotopopov\/FFTTools<\/a>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264616","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264616","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=264616"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264616\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}