{"id":357037,"date":"2024-05-20T23:42:10","date_gmt":"2024-05-20T23:42:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=357037"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T23:42:10","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=357037","title":{"rendered":"<span>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u0432 \u043f\u043b\u0430\u0442\u0435 FPGA MCY316<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d42\/251\/ff7\/d42251ff71b102b69d573b81502d47d7.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\" title=\"\u0421\u0445\u0435\u043c\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\" width=\"590\" height=\"301\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d42\/251\/ff7\/d42251ff71b102b69d573b81502d47d7.png\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/763670\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <\/a>\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043b\u0430\u0442\u043e\u0439 FPGA MCY316. \u0412 \u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0410\u0426\u041f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0423\u0436\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0432 \u043e\u043a\u043d\u0435.<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0445\u043e\u0447\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 FPGA \u0435\u0449\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443 \u043c\u043e\u0435\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440 \u044d\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u0442\u043e \u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0438 \u0441\u043b\u0435\u0434\u0430. \u0410 \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u043e\u0442 \u043a\u0430\u043a\u0438\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"F_{t}=\\sum_{k=0}^{N-1} Y_{t-k}\\cdot S_{t}\" alt=\"F_{t}=\\sum_{k=0}^{N-1} Y_{t-k}\\cdot S_{t}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a8f\/65b\/edd\/a8f65beddef8ed8b72c3bd8d54fb5e70.svg\" width=\"146\" height=\"60\"\/><\/p>\n<p>\u0417\u0434\u0435\u0441\u044c S<sub>t<\/sub> \u044d\u0442\u043e \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0430 Y<sub>t-k<\/sub> \u044d\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0412\u0441\u0435\u0433\u043e \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 N.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/731\/05c\/ffe\/73105cffed84facb7d1cdeb7c83c5fbc.png\" alt=\"\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" title=\"\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" width=\"640\" height=\"314\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/731\/05c\/ffe\/73105cffed84facb7d1cdeb7c83c5fbc.png\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0438 S \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0421 \u043a\u0430\u0436\u0434\u044b\u043c \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043d\u0435\u043c \u043e\u0442\u0441\u0447\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 F \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0445\u0440\u0430\u043d\u044f\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 1\/F.<\/p>\n<p>\u041a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u044d\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 Y.<\/p>\n<p>\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0434\u043b\u0438\u043d\u044b \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 Y. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440? \u0415\u0441\u043b\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0441\u0438\u0433\u043d\u0430\u043b. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b Y \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u044d\u0442\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f Mathlab, GNU Octave, Python.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 (bandpass) \u0441 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435\u043c \u043e\u0442 600\u0413\u0446 \u0434\u043e 2200\u0413\u0446. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">import numpy as np from scipy import signal import matplotlib.pyplot as plt  num_taps = 501 # it helps to use an odd number of taps cut_off = [600.0, 2200.0] # Hz sample_rate = 46875 # Hz  #T = signal.firwin(num_taps, cut_off, window = \"hamming\", fs=sample_rate ) T = signal.firwin(num_taps, cutoff = cut_off, window = \"hamming\", fs=sample_rate, pass_zero = False) Ta = np.array(T) Ta_abs_max = np.amax(np.abs(Ta)) Ta_scaled = Ta*(32766\/Ta_abs_max) Ta_scaled_int = Ta_scaled.astype(int) print( Ta ) print( Ta_scaled_int ) np.savetxt('fir-coeffs.txt', Ta_scaled_int, fmt='%d' )   print(\"========= Altera Memory Initialization File ===================\") print(\"WIDTH = 16;\") print(\"DEPTH = 512;\") print(\"ADDRESS_RADIX = HEX;\") print(\"DATA_RADIX = HEX;\") print(\"CONTENT BEGIN\") i=0 while i &lt; len(Ta_scaled_int) : print( f\"{i:04x}\",\":\", f\"{Ta_scaled_int[i]&amp;0xffff:04x}\",\";\") i=i+1 print(\"END\") print(\"================================================================\")  w, h = signal.freqz(T,fs=sample_rate,include_nyquist=False)  fig, ax1 = plt.subplots() ax1.set_title('Digital filter frequency response') ax1.plot(w, 20 * np.log10(abs(h)), 'b') ax1.set_ylabel('Amplitude [dB]', color='b') ax1.set_xlabel('Frequency [rad\/sample]') ax2 = ax1.twinx() angles = np.unwrap(np.angle(h)) ax2.plot(w, angles, 'g') ax2.set_ylabel('Angle (radians)', color='g') ax2.grid(True) ax2.axis('tight') plt.show() <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0443\u044e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5e4\/015\/538\/5e4015538daeb739a04083efa7405ed7.png\" alt=\"\u0410\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043d\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0430\u044f \u0438 \u0444\u0430\u0437\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" title=\"\u0410\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043d\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0430\u044f \u0438 \u0444\u0430\u0437\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" width=\"803\" height=\"688\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e4\/015\/538\/5e4015538daeb739a04083efa7405ed7.png\"\/><\/p>\n<div><figcaption>\u0410\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043d\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0430\u044f \u0438 \u0444\u0430\u0437\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0435\u0449\u0435 \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u043b\u0435\u0435 500 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430:<\/p>\n<pre><code>[-1.98161865e-04 -1.88693513e-04 -1.70507493e-04 -1.44797941e-04  -1.13348819e-04 -7.83990087e-05 -4.24696335e-05 -8.16611985e-06   2.20303956e-05  4.59664915e-05  6.19988370e-05  6.91407007e-05   6.71599779e-05  5.66193512e-05  3.88532870e-05  1.58812526e-05  -9.73848540e-06 -3.51052202e-05 -5.72086133e-05 -7.31806289e-05  -8.05468297e-05 -7.74562747e-05 -6.28698992e-05 -3.66895801e-05   1.85968102e-07  4.58869791e-05  9.76822284e-05  1.52167589e-04   2.05521707e-04  2.53810532e-04  2.93317172e-04  3.20869991e-04   3.34140421e-04  3.31882943e-04  3.14093089e-04  2.82065134e-04   2.38338818e-04  1.86533662e-04  1.31079230e-04  7.68594287e-05   2.87976107e-05 -8.58395309e-06 -3.15924150e-05 -3.77416223e-05  -2.60417625e-05  2.82941136e-06  4.64957021e-05  1.01002501e-04   1.61085330e-04  2.20570999e-04  2.72882654e-04  3.11609038e-04   3.31090312e-04  3.26968676e-04  2.96652381e-04  2.39646763e-04   1.57715444e-04  5.48482047e-05 -6.29717152e-05 -1.88190415e-04  -3.12268004e-04 -4.26380806e-04 -5.22183857e-04 -5.92568032e-04  -6.32343297e-04 -6.38782772e-04 -6.11971626e-04 -5.54919647e-04  -4.73415723e-04 -3.75624708e-04 -2.71450537e-04 -1.71711753e-04  -8.71948709e-05 -2.76652008e-05 -9.22474985e-07 -1.19887444e-05  -6.25082253e-05 -1.50423395e-04 -2.69969696e-04 -4.12004401e-04  -5.64655741e-04 -7.14248804e-04 -8.46437746e-04 -9.47452001e-04  -1.00534965e-03 -1.01116567e-03 -9.59847193e-04 -8.50882173e-04  -6.88551514e-04 -4.81765292e-04 -2.43479579e-04  1.02721050e-05   2.61662531e-04  4.92568115e-04  6.86154767e-04  8.28413800e-04   9.09508078e-04  9.24799747e-04  8.75454053e-04  7.68547449e-04   6.16649687e-04  4.36895576e-04  2.49608530e-04  7.65808001e-05  -6.08496040e-05 -1.43761365e-04 -1.57477525e-04 -9.30892382e-05   5.14731461e-05  2.70935874e-04  5.52812515e-04  8.78183614e-04   1.22308179e-03  1.56038302e-03  1.86205560e-03  2.10158077e-03   2.25633609e-03  2.30972824e-03  2.25287556e-03  2.08567371e-03   1.81712579e-03  1.46487975e-03  1.05398419e-03  6.14943586e-04   1.81219535e-04 -2.13620600e-04 -5.38867392e-04 -7.69486161e-04  -8.88531054e-04 -8.88926887e-04 -7.74436926e-04 -5.59700440e-04  -2.69302192e-04  6.40793507e-05  4.02314761e-04  7.05052077e-04   9.33266078e-04  1.05282547e-03  1.03776235e-03  8.72943226e-04   5.55882890e-04  9.75089362e-05 -4.78229308e-04 -1.13591537e-03  -1.83128900e-03 -2.51474575e-03 -3.13543575e-03 -3.64562187e-03  -4.00492239e-03 -4.18405998e-03 -4.16776900e-03 -3.95657476e-03  -3.56724787e-03 -3.03184641e-03 -2.39538016e-03 -1.71225352e-03  -1.04175727e-03 -4.42972267e-04  3.04868860e-05  3.35430765e-04   4.43309317e-04  3.43283242e-04  4.38408466e-05 -4.27234784e-04  -1.02460552e-03 -1.68873435e-03 -2.35062225e-03 -2.93756072e-03  -3.37943246e-03 -3.61502785e-03 -3.59782419e-03 -3.30070166e-03  -2.71914354e-03 -1.87258441e-03 -8.03719544e-04  4.24240422e-04   1.73220653e-03  3.03140643e-03  4.23065541e-03  5.24411002e-03   5.99884697e-03  6.44160060e-03  6.54404046e-03  6.30607423e-03   5.75681306e-03  4.95302562e-03  3.97511819e-03  2.92089363e-03   1.89754428e-03  1.01250393e-03  3.63906941e-04  3.14657810e-05   6.85739925e-05  4.96368127e-04  1.30034283e-03  2.42991777e-03   3.80111778e-03  5.30226763e-03  6.80234030e-03  8.16135667e-03   9.24203385e-03  9.92173992e-03  1.01037470e-02  9.72679111e-03   8.77204880e-03  7.26682036e-03  5.28445650e-03  2.94036135e-03   3.84227125e-04 -2.21102237e-03 -4.66280516e-03 -6.79395348e-03  -8.44809614e-03 -9.50408227e-03 -9.88819881e-03 -9.58305782e-03  -8.63225034e-03 -7.14016640e-03 -5.26674513e-03 -3.21731695e-03  -1.22810184e-03  4.51699508e-04  1.57997057e-03  1.94242115e-03   1.37240771e-03 -2.31767523e-04 -2.89355342e-03 -6.55007415e-03  -1.10501644e-02 -1.61589715e-02 -2.15691018e-02 -2.69177966e-02  -3.18091506e-02 -3.58399760e-02 -3.86275921e-02 -3.98376219e-02  -3.92098062e-02 -3.65799301e-02 -3.18961728e-02 -2.52285447e-02  -1.67705300e-02 -6.83258217e-03  4.17231352e-03  1.57502346e-02   2.73537830e-02  3.84136884e-02  4.83725176e-02  5.67182725e-02   6.30156468e-02  6.69328436e-02  6.82621456e-02  6.69328436e-02   6.30156468e-02  5.67182725e-02  4.83725176e-02  3.84136884e-02   2.73537830e-02  1.57502346e-02  4.17231352e-03 -6.83258217e-03  -1.67705300e-02 -2.52285447e-02 -3.18961728e-02 -3.65799301e-02  -3.92098062e-02 -3.98376219e-02 -3.86275921e-02 -3.58399760e-02  -3.18091506e-02 -2.69177966e-02 -2.15691018e-02 -1.61589715e-02  -1.10501644e-02 -6.55007415e-03 -2.89355342e-03 -2.31767523e-04   1.37240771e-03  1.94242115e-03  1.57997057e-03  4.51699508e-04  -1.22810184e-03 -3.21731695e-03 -5.26674513e-03 -7.14016640e-03  -8.63225034e-03 -9.58305782e-03 -9.88819881e-03 -9.50408227e-03  -8.44809614e-03 -6.79395348e-03 -4.66280516e-03 -2.21102237e-03   3.84227125e-04  2.94036135e-03  5.28445650e-03  7.26682036e-03   8.77204880e-03  9.72679111e-03  1.01037470e-02  9.92173992e-03   9.24203385e-03  8.16135667e-03  6.80234030e-03  5.30226763e-03   3.80111778e-03  2.42991777e-03  1.30034283e-03  4.96368127e-04   6.85739925e-05  3.14657810e-05  3.63906941e-04  1.01250393e-03   1.89754428e-03  2.92089363e-03  3.97511819e-03  4.95302562e-03   5.75681306e-03  6.30607423e-03  6.54404046e-03  6.44160060e-03   5.99884697e-03  5.24411002e-03  4.23065541e-03  3.03140643e-03   1.73220653e-03  4.24240422e-04 -8.03719544e-04 -1.87258441e-03  -2.71914354e-03 -3.30070166e-03 -3.59782419e-03 -3.61502785e-03  -3.37943246e-03 -2.93756072e-03 -2.35062225e-03 -1.68873435e-03  -1.02460552e-03 -4.27234784e-04  4.38408466e-05  3.43283242e-04   4.43309317e-04  3.35430765e-04  3.04868860e-05 -4.42972267e-04  -1.04175727e-03 -1.71225352e-03 -2.39538016e-03 -3.03184641e-03  -3.56724787e-03 -3.95657476e-03 -4.16776900e-03 -4.18405998e-03  -4.00492239e-03 -3.64562187e-03 -3.13543575e-03 -2.51474575e-03  -1.83128900e-03 -1.13591537e-03 -4.78229308e-04  9.75089362e-05   5.55882890e-04  8.72943226e-04  1.03776235e-03  1.05282547e-03   9.33266078e-04  7.05052077e-04  4.02314761e-04  6.40793507e-05  -2.69302192e-04 -5.59700440e-04 -7.74436926e-04 -8.88926887e-04  -8.88531054e-04 -7.69486161e-04 -5.38867392e-04 -2.13620600e-04   1.81219535e-04  6.14943586e-04  1.05398419e-03  1.46487975e-03   1.81712579e-03  2.08567371e-03  2.25287556e-03  2.30972824e-03   2.25633609e-03  2.10158077e-03  1.86205560e-03  1.56038302e-03   1.22308179e-03  8.78183614e-04  5.52812515e-04  2.70935874e-04   5.14731461e-05 -9.30892382e-05 -1.57477525e-04 -1.43761365e-04  -6.08496040e-05  7.65808001e-05  2.49608530e-04  4.36895576e-04   6.16649687e-04  7.68547449e-04  8.75454053e-04  9.24799747e-04   9.09508078e-04  8.28413800e-04  6.86154767e-04  4.92568115e-04   2.61662531e-04  1.02721050e-05 -2.43479579e-04 -4.81765292e-04  -6.88551514e-04 -8.50882173e-04 -9.59847193e-04 -1.01116567e-03  -1.00534965e-03 -9.47452001e-04 -8.46437746e-04 -7.14248804e-04  -5.64655741e-04 -4.12004401e-04 -2.69969696e-04 -1.50423395e-04  -6.25082253e-05 -1.19887444e-05 -9.22474985e-07 -2.76652008e-05  -8.71948709e-05 -1.71711753e-04 -2.71450537e-04 -3.75624708e-04  -4.73415723e-04 -5.54919647e-04 -6.11971626e-04 -6.38782772e-04  -6.32343297e-04 -5.92568032e-04 -5.22183857e-04 -4.26380806e-04  -3.12268004e-04 -1.88190415e-04 -6.29717152e-05  5.48482047e-05   1.57715444e-04  2.39646763e-04  2.96652381e-04  3.26968676e-04   3.31090312e-04  3.11609038e-04  2.72882654e-04  2.20570999e-04   1.61085330e-04  1.01002501e-04  4.64957021e-05  2.82941136e-06  -2.60417625e-05 -3.77416223e-05 -3.15924150e-05 -8.58395309e-06   2.87976107e-05  7.68594287e-05  1.31079230e-04  1.86533662e-04   2.38338818e-04  2.82065134e-04  3.14093089e-04  3.31882943e-04   3.34140421e-04  3.20869991e-04  2.93317172e-04  2.53810532e-04   2.05521707e-04  1.52167589e-04  9.76822284e-05  4.58869791e-05   1.85968102e-07 -3.66895801e-05 -6.28698992e-05 -7.74562747e-05  -8.05468297e-05 -7.31806289e-05 -5.72086133e-05 -3.51052202e-05  -9.73848540e-06  1.58812526e-05  3.88532870e-05  5.66193512e-05   6.71599779e-05  6.91407007e-05  6.19988370e-05  4.59664915e-05   2.20303956e-05 -8.16611985e-06 -4.24696335e-05 -7.83990087e-05  -1.13348819e-04 -1.44797941e-04 -1.70507493e-04 -1.88693513e-04  -1.98161865e-04]<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u041f\u041b\u0418\u0421, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0445\u043e\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u043a \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u043c\u0443 16\u0442\u0438 \u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u044f\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u043f\u0430\u043c\u044f\u0442\u0438, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439. \u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u0437\u0430\u043d\u044f\u0442\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0412\u043e\u0442 \u0443 \u043c\u0435\u043d\u044f \u0432 \u044d\u0442\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 501 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0417\u043d\u0430\u0447\u0438\u0442 \u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0412 FPGA \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3d4\/aa7\/99d\/3d4aa799de0445338110aa73f47ee9a1.png\" width=\"561\" height=\"154\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3d4\/aa7\/99d\/3d4aa799de0445338110aa73f47ee9a1.png\"\/><\/figure>\n<p>\u0423\u043c\u043d\u043e\u0436\u0430\u044e 501 \u043d\u0430 16 \u0431\u0438\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 8016 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432\/\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u043e \u0432 \u041f\u041b\u0418\u0421. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0430\u043a-\u0442\u043e. \u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b? \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0432 \u041f\u041b\u0418\u0421 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/793\/877\/7f8\/7938777f856763ec66d2f50d04de4419.png\" width=\"569\" height=\"358\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/793\/877\/7f8\/7938777f856763ec66d2f50d04de4419.png\"\/><\/figure>\n<p>\u0412\u044b\u0434\u0435\u043b\u044f\u044e \u0432 FPGA \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 512 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432: \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0411\u043b\u043e\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435, \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 MIF \u0444\u0430\u0439\u043b\u0430, \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0410\u043b\u044c\u0442\u0435\u0440\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432 FPGA.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043d\u043e\u0432\u044b\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0442\u043e\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041d\u043e! \u041f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0448\u0451\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0442\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0435\u0442 24\u041c\u0413\u0446, \u0442\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 24000000\/512=46875\u0413\u0446. \u0412\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0437\u0432\u0443\u043a\u0430 \u0438 \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043f\u043e \u0442\u0435\u043e\u0440\u0435\u043c\u043c\u0435 \u041a\u043e\u0442\u0435\u043b\u044c\u043d\u0438\u043a\u043e\u0432\u0430 \u044f \u043c\u043e\u0433\u0443 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043e 23,4\u041a\u0413\u0446.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u041f\u041b\u0418\u0421 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Verilog HDL (\u043a\u0441\u0442\u0430\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u0425\u0430\u0431\u0440 \u0432\u043d\u0435\u0434\u0440\u0438\u0442 \u0432 \u0441\u0432\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Verilog HDL?).<\/p>\n<pre><code class=\"vhdl\">`timescale 1ns\/1ps  module fir_filter( input wire nreset, input wire clk,\/\/idata sampling frequency input wire [15:0]idata,\/\/samples unsigned output reg signed [47:0]out_val, output reg out_ready );  reg  [8:0]rd_addr; reg  [8:0]wr_addr;  \/\/read samples from cyclic buffer always @(posedge clk or negedge nreset) if( ~nreset ) rd_addr &lt;= 0; else rd_addr &lt;= rd_addr + 1;  \/\/\"wr\" signal -> writes new sample to cyclic buffer reg wr; always @(posedge clk or negedge nreset) if( ~nreset ) wr &lt;= 1'b0; else wr &lt;= (rd_addr==9'h1ff);  always @(posedge clk or negedge nreset) if( ~nreset ) wr_addr &lt;= 0; else if( rd_addr==9'h1ff ) wr_addr &lt;= wr_addr + 1;  wire signed [15:0]odata;  \/\/cyclic buffer for samples `ifdef ICARUS dp_mem_1clk_p #( .DATA_WIDTH(16), .ADDR_WIDTH(9), .RAM_DEPTH(1 &lt;&lt; 9) )mem_samples ( .Clk( clk ), .Reset_N( nreset ), .we( wr ), .rd( nreset ), .wr_addr( wr_addr ), .rd_addr( rd_addr ), .data_in( idata ), .data_out( odata ) ); `else fir_ramfir_ram_inst ( .clock ( clk ), .data ( idata ), .rdaddress ( rd_addr ), .wraddress ( wr_addr ), .wren ( wr ), .q ( odata ) ); `endif  \/\/fir coefficients contiguously extracted from filter embeddef memory wire [8:0]rd_addr_coeff;  assign rd_addr_coeff = 512 - rd_addr + wr_addr; wire signed [15:0]fir_coeff;  `ifdef ICARUS dp_mem_1clk_p #( .DATA_WIDTH(16), .ADDR_WIDTH(9), .RAM_DEPTH(1 &lt;&lt; 9) )mem_coeff ( .Clk( clk ), .Reset_N( nreset ), .we( 1'b0 ), .rd( nreset ), .wr_addr( 9'd0 ), .rd_addr( rd_addr_coeff ), .data_in( 16'd0 ), .data_out( fir_coeff ) ); `else fir_rom fir_rom_inst ( .address ( rd_addr_coeff ), .clock ( clk ), .q ( fir_coeff ) ); `endif  reg signed [47:0]filter_val_acc; always @(posedge clk or negedge nreset) if( ~nreset ) begin out_val &lt;= 0; filter_val_acc &lt;=0; end else if( wr ) begin out_val &lt;= filter_val_acc; filter_val_acc &lt;= fir_coeff * odata; end else begin filter_val_acc &lt;= filter_val_acc + fir_coeff * odata; end  always @( posedge clk or negedge nreset ) if( ~nreset ) out_ready &lt;= 0; else out_ready &lt;= wr;  endmodule <\/code><\/pre>\n<p>\u0410 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447 Verilog:<\/p>\n<pre><code class=\"vhdl\">`timescale 1ns \/ 1ps  module tb();  reg reset;  \/\/assume basic clock is 10Mhz reg clk; initial clk=0; always #50 clk = ~clk;  \/\/fir clk is sampling freq * 512 \/\/sampling freq is 46875 reg fir_clk; initial fir_clk=0; always #20.833 fir_clk = ~fir_clk;  \/\/function calculating sinus  function real sin; input x; real x; real x1,y,y2,y3,y5,y7,sum,sign; begin sign = 1.0; x1 = x; if (x1&lt;0) begin x1 = -x1; sign = -1.0; end while (x1 > 3.14159265\/2.0) begin x1 = x1 - 3.14159265; sign = -1.0*sign; end   y = x1*2\/3.14159265; y2 = y*y; y3 = y*y2; y5 = y3*y2; y7 = y5*y2; sum = 1.570794*y - 0.645962*y3 + 0.079692*y5 - 0.004681712*y7; sin = sign*sum; end endfunction  \/\/generate requested \"freq\" digital integer freq; reg [31:0]cnt; reg cnt_edge; always @(posedge clk or posedge reset) begin if(reset) begin cnt &lt;=0; cnt_edge &lt;= 1'b0; end else if( cnt>=(10000000\/(freq*64)-1) ) begin cnt&lt;=0; cnt_edge &lt;= 1'b1; end else begin cnt&lt;=cnt+1; cnt_edge &lt;= 1'b0; end end  real my_time; real sin_real; reg signed [15:0]sin_val;  \/\/generate requested \"freq\" sinus always @(posedge cnt_edge) begin sin_real &lt;= sin(my_time); sin_val  &lt;= sin_real*32767; \/\/fit 16bit signed short word my_time  &lt;= my_time+3.14159265*2\/64; end  wire signed [47:0]out; wire out_rdy; fir_filter fir_( .nreset( ~reset ), .clk( fir_clk ), .idata( sin_val ), .out_val( out ), .out_ready( out_rdy ) );  wire signed [15:0]out_val_; assign out_val_ = out[35:20];  initial begin $dumpfile(\"out.vcd\");  $dumpvars(1, tb.freq, tb.sin_val, tb.out_val_ );  reset = 1; #1000; reset = 0;  read_bp_coeff();  my_time=0;  for ( freq=300; freq&lt;4000; freq=freq+100 ) begin #20000000; if( freq>1000 &amp;&amp; freq&lt;2000 ) freq=freq+200; end  $finish;  end  integer file_filter; integer i; integer scan_result; reg signed [15:0]coeff;  task read_bp_coeff; begin file_filter = $fopen(\"python\/fir-coeffs.txt\", \"r\"); if (file_filter == 0) begin $display(\"file bp filter handle was NULL\"); $finish; end for( i=0; i&lt;512; i=i+1 ) begin scan_result = $fscanf(file_filter, \"%d\\n\", coeff);  if ( scan_result!=1 )  coeff = 0; \/\/$display(\"coeff %d = %d\",i,coeff); fir_.mem_coeff.mem[i] = coeff; end $fclose(file_filter); end endtask  endmodule <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u044f \u0431\u0443\u0434\u0443 \u0432 Icarus Verilog, \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435, \u0430 \u043e\u043d \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0410\u043b\u0442\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0438\u0445 &#171;\u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442&#187; \u0442\u0438\u043f\u0430 dp_mem_1clk_p.v. \u0422\u0435\u0441\u0442\u0431\u0435\u043d\u0447 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b python\/fir-coeffs.txt&#187; \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c fir_.mem_coeff.mem. \u041d\u0443 \u0438 \u043f\u043e\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447 \u043d\u0430\u0447\u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041e\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u043e\u0442 300\u0413\u0446 \u0434\u043e 4000\u0413\u0446 \u0438 \u043f\u043e\u0434\u0430\u0435\u0442 \u043d\u0430 \u0444\u0438\u043b\u044c\u0442\u0440. \u0412\u043e\u043e\u0431\u0449\u0435 \u0443 \u043c\u0435\u043d\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0443 ICARUS. \u0415\u0441\u043b\u0438 \u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 dp_mem. \u0410 \u0435\u0441\u043b\u0438 \u043c\u0430\u043a\u0440\u043e\u0441 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043b\u043e\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043e\u0432\u0441\u043a\u043e\u043c MegaWizard. \u0412 \u044d\u0442\u043e\u043c \u0432\u0438\u0437\u0430\u0440\u0434\u0435 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0438\u043f\u0430 ALT_DP_ROM \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c Memory Initialization FIle (MIF), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043d\u0430 Python.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c icarus verilog \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434 (\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f, \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435):<\/p>\n<pre><code class=\"bash\">>iverilog -DICARUS=1 -o tb.bin tb.v fir_filter.v dp_mem_1clk_p.v >vvp tb.bin >gtkwave out.vcd<\/code><\/pre>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 vvp \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 out.vcd. \u0415\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 GtkWave. \u0422\u0443\u0442 \u044f \u0441\u043c\u043e\u0433\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u0444\u0438\u043b\u044c\u0442\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25a\/791\/a27\/25a791a27a17fb6ccea7528f3ebdadd8.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 300\u0413\u0446 \u0434\u043e 900\u0413\u0446\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 300\u0413\u0446 \u0434\u043e 900\u0413\u0446\" width=\"1234\" height=\"256\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/25a\/791\/a27\/25a791a27a17fb6ccea7528f3ebdadd8.png\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 300\u0413\u0446 \u0434\u043e 900\u0413\u0446<\/figcaption><\/div>\n<\/figure>\n<p>\u0418 \u0432\u043e\u0442 \u0435\u0449\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e3f\/e56\/daf\/e3fe56dafd4442a644b7e5dfa17a5db7.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 1700\u0413\u0446 \u0434\u043e 2500\u0413\u0446\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 1700\u0413\u0446 \u0434\u043e 2500\u0413\u0446\" width=\"1233\" height=\"241\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e3f\/e56\/daf\/e3fe56dafd4442a644b7e5dfa17a5db7.png\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442 1700\u0413\u0446 \u0434\u043e 2500\u0413\u0446<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0443 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e. \u041d\u0443\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u0444\u0438\u043b\u044c\u0442\u0440, \u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c. \u0412 \u0442\u0435\u0441\u0442\u0431\u0435\u043d\u0447\u0435 \u0441\u0438\u0433\u043d\u0430\u043b sin_val \u044d\u0442\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0438\u043b\u044c\u0442\u0440, \u0430 out_val_ \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u0444\u0438\u043b\u044c\u0442\u0440\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u043b\u0430\u0442\u0443 FPGA MCY316 \u0441 USB-JTAG \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c MBFTDI. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u0442\u043e\u0438\u0442 \u041f\u041b\u0418\u0421 Altera Cyclone III \u0441 \u043f\u043e\u0447\u0442\u0438 16\u044e \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0443 \u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0435 \u0410\u0426\u041f PCM1801 \u0438 \u0430\u0443\u0434\u0438\u043e \u0440\u0430\u0437\u044a\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u041f\u043b\u0430\u0442\u0430 MCY316 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/267\/6e8\/d81\/2676e8d81c47be9e567f30e50da15ef0.jpg\" width=\"800\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/267\/6e8\/d81\/2676e8d81c47be9e567f30e50da15ef0.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/marsohod.org\/438-mcy316\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u042f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0439 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0430\u0443\u0434\u0438\u043e \u043a\u0430\u0431\u0435\u043b\u0435\u043c \u043a \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u0435. \u041d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0410\u043d\u0434\u0440\u043e\u0438\u0434 \u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0440\u0430\u0437\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u043b\u0430\u0442\u0443. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u043b\u0430\u043b \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 <a href=\"https:\/\/habr.com\/ru\/articles\/763670\/\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c<\/a>. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d,  \u0432 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435. \u041f\u0440\u043e\u0435\u043a\u0442, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 FPGA, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u0410\u0426\u041f, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0444\u0438\u043b\u044c\u0442\u0440. \u0414\u0430\u043b\u0435\u0435 \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0435\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043a\u0430\u043a \u0447\u0438\u0441\u0442\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0430 \u043f\u0440\u0430\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043a\u0430\u043a \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0410 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u043e\u0442\u0440\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u043e\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6524c86aff7a727696e8017c\" data-style=\"\" id=\"6524c86aff7a727696e8017c\" width=\"\"><\/div>\n<p>\u0412 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443 \u043c\u0435\u043d\u044f\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0432\u0438\u0436\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0432 \u043e\u043a\u043d\u0435 \u043f\u043b\u043e\u0442\u0430, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0438 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442! \u0427\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043e 600\u0413\u0446 \u0438 \u0432\u044b\u0448\u0435 2200\u0413\u0446 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0444\u0438\u043b\u044c\u0442\u0440, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442!<\/p>\n<p>\u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 <a href=\"https:\/\/github.com\/marsohod4you\/MCY316\/tree\/main\/SoundCaptureFIR\" rel=\"noopener noreferrer nofollow\">\u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431<\/a>.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441 FPGA \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u043c. \u0414\u043e\u0431\u0430\u0432\u043b\u044e, \u0447\u0442\u043e \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \/ \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0448\u0435\u0432\u043e\u0439 <a href=\"https:\/\/marsohod.org\/howtostart\/mcy112\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u0435 MCY112<\/a>.<\/p>\n<p>\u0418 \u0435\u0449\u0451, \u0435\u0441\u043b\u0438 \u0432 FPGA \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0442\u0430\u043a\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u043e\u043c\u0443\u0437\u044b\u043a\u0443. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0435\u043a\u0442\u043d\u043e \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, <a href=\"https:\/\/marsohod.org\/projects\/proekty-dlya-platy-marsokhod3\/377-tsvetomuzyka\" rel=\"noopener noreferrer nofollow\">\u044f \u0442\u0430\u043a\u043e\u0435 \u0443\u0436\u0435 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0434\u0435\u043b\u0430\u043b<\/a> \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/766342\/\"> https:\/\/habr.com\/ru\/articles\/766342\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/763670\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <\/a>\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043b\u0430\u0442\u043e\u0439 FPGA MCY316. \u0412 \u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0410\u0426\u041f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0423\u0436\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0432 \u043e\u043a\u043d\u0435.<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0445\u043e\u0447\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 FPGA \u0435\u0449\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0445\u0435\u043c\u0443 \u043c\u043e\u0435\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440 \u044d\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u0442\u043e \u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0438 \u0441\u043b\u0435\u0434\u0430. \u0410 \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u043e\u0442 \u043a\u0430\u043a\u0438\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c S<sub>t<\/sub> \u044d\u0442\u043e \u043e\u0442\u0441\u0447\u0451\u0442\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0430 Y<sub>t-k<\/sub> \u044d\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430. \u0412\u0441\u0435\u0433\u043e \u043e\u0442\u0441\u0447\u0451\u0442\u043e\u0432 N.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0438 S \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0421 \u043a\u0430\u0436\u0434\u044b\u043c \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043d\u0435\u043c \u043e\u0442\u0441\u0447\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043e\u0446\u0438\u0444\u0440\u043e\u0432\u043a\u0438 F \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0445\u0440\u0430\u043d\u044f\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 1\/F.<\/p>\n<p>\u041a\u0440\u0443\u0436\u043e\u0447\u043a\u0438 \u044d\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 Y.<\/p>\n<p>\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u041a\u0418\u0425 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u0434\u043b\u0438\u043d\u044b \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 Y. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440? \u0415\u0441\u043b\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0441\u0438\u0433\u043d\u0430\u043b. \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b Y \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u044d\u0442\u043e \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e\u0434\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f Mathlab, GNU Octave, Python.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 (bandpass) \u0441 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435\u043c \u043e\u0442 600\u0413\u0446 \u0434\u043e 2200\u0413\u0446. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">import numpy as np from scipy import signal import matplotlib.pyplot as plt  num_taps = 501 # it helps to use an odd number of taps cut_off = [600.0, 2200.0] # Hz sample_rate = 46875 # Hz  #T = signal.firwin(num_taps, cut_off, window = \"hamming\", fs=sample_rate ) T = signal.firwin(num_taps, cutoff = cut_off, window = \"hamming\", fs=sample_rate, pass_zero = False) Ta = np.array(T) Ta_abs_max = np.amax(np.abs(Ta)) Ta_scaled = Ta*(32766\/Ta_abs_max) Ta_scaled_int = Ta_scaled.astype(int) print( Ta ) print( Ta_scaled_int ) np.savetxt('fir-coeffs.txt', Ta_scaled_int, fmt='%d' )   print(\"========= Altera Memory Initialization File ===================\") print(\"WIDTH = 16;\") print(\"DEPTH = 512;\") print(\"ADDRESS_RADIX = HEX;\") print(\"DATA_RADIX = HEX;\") print(\"CONTENT BEGIN\") i=0 while i &lt; len(Ta_scaled_int) : print( f\"{i:04x}\",\":\", f\"{Ta_scaled_int[i]&amp;0xffff:04x}\",\";\") i=i+1 print(\"END\") print(\"================================================================\")  w, h = signal.freqz(T,fs=sample_rate,include_nyquist=False)  fig, ax1 = plt.subplots() ax1.set_title('Digital filter frequency response') ax1.plot(w, 20 * np.log10(abs(h)), 'b') ax1.set_ylabel('Amplitude [dB]', color='b') ax1.set_xlabel('Frequency [rad\/sample]') ax2 = ax1.twinx() angles = np.unwrap(np.angle(h)) ax2.plot(w, angles, 'g') ax2.set_ylabel('Angle (radians)', color='g') ax2.grid(True) ax2.axis('tight') plt.show() <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0443\u044e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0443:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0410\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u043d\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0430\u044f \u0438 \u0444\u0430\u0437\u043e-\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0435\u0449\u0435 \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u043b\u0435\u0435 500 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430:<\/p>\n<pre><code>[-1.98161865e-04 -1.88693513e-04 -1.70507493e-04 -1.44797941e-04  -1.13348819e-04 -7.83990087e-05 -4.24696335e-05 -8.16611985e-06   2.20303956e-05  4.59664915e-05  6.19988370e-05  6.91407007e-05   6.71599779e-05  5.66193512e-05  3.88532870e-05  1.58812526e-05  -9.73848540e-06 -3.51052202e-05 -5.72086133e-05 -7.31806289e-05  -8.05468297e-05 -7.74562747e-05 -6.28698992e-05 -3.66895801e-05   1.85968102e-07  4.58869791e-05  9.76822284e-05  1.52167589e-04   2.05521707e-04  2.53810532e-04  2.93317172e-04  3.20869991e-04   3.34140421e-04  3.31882943e-04  3.14093089e-04  2.82065134e-04   2.38338818e-04  1.86533662e-04  1.31079230e-04  7.68594287e-05   2.87976107e-05 -8.58395309e-06 -3.15924150e-05 -3.77416223e-05  -2.60417625e-05  2.82941136e-06  4.64957021e-05  1.01002501e-04   1.61085330e-04  2.20570999e-04  2.72882654e-04  3.11609038e-04   3.31090312e-04  3.26968676e-04  2.96652381e-04  2.39646763e-04   1.57715444e-04  5.48482047e-05 -6.29717152e-05 -1.88190415e-04  -3.12268004e-04 -4.26380806e-04 -5.22183857e-04 -5.92568032e-04  -6.32343297e-04 -6.38782772e-04 -6.11971626e-04 -5.54919647e-04  -4.73415723e-04 -3.75624708e-04 -2.71450537e-04 -1.71711753e-04  -8.71948709e-05 -2.76652008e-05 -9.22474985e-07 -1.19887444e-05  -6.25082253e-05 -1.50423395e-04 -2.69969696e-04 -4.12004401e-04  -5.64655741e-04 -7.14248804e-04 -8.46437746e-04 -9.47452001e-04  -1.00534965e-03 -1.01116567e-03 -9.59847193e-04 -8.50882173e-04  -6.88551514e-04 -4.81765292e-04 -2.43479579e-04  1.02721050e-05   2.61662531e-04  4.92568115e-04  6.86154767e-04  8.28413800e-04   9.09508078e-04  9.24799747e-04  8.75454053e-04  7.68547449e-04   6.16649687e-04  4.36895576e-04  2.49608530e-04  7.65808001e-05  -6.08496040e-05 -1.43761365e-04 -1.57477525e-04 -9.30892382e-05   5.14731461e-05  2.70935874e-04  5.52812515e-04  8.78183614e-04   1.22308179e-03  1.56038302e-03  1.86205560e-03  2.10158077e-03   2.25633609e-03  2.30972824e-03  2.25287556e-03  2.08567371e-03   1.81712579e-03  1.46487975e-03  1.05398419e-03  6.14943586e-04   1.81219535e-04 -2.13620600e-04 -5.38867392e-04 -7.69486161e-04  -8.88531054e-04 -8.88926887e-04 -7.74436926e-04 -5.59700440e-04  -2.69302192e-04  6.40793507e-05  4.02314761e-04  7.05052077e-04   9.33266078e-04  1.05282547e-03  1.03776235e-03  8.72943226e-04   5.55882890e-04  9.75089362e-05 -4.78229308e-04 -1.13591537e-03  -1.83128900e-03 -2.51474575e-03 -3.13543575e-03 -3.64562187e-03  -4.00492239e-03 -4.18405998e-03 -4.16776900e-03 -3.95657476e-03  -3.56724787e-03 -3.03184641e-03 -2.39538016e-03 -1.71225352e-03  -1.04175727e-03 -4.42972267e-04  3.04868860e-05  3.35430765e-04   4.43309317e-04  3.43283242e-04  4.38408466e-05 -4.27234784e-04  -1.02460552e-03 -1.68873435e-03 -2.35062225e-03 -2.93756072e-03  -3.37943246e-03 -3.61502785e-03 -3.59782419e-03 -3.30070166e-03  -2.71914354e-03 -1.87258441e-03 -8.03719544e-04  4.24240422e-04   1.73220653e-03  3.03140643e-03  4.23065541e-03  5.24411002e-03   5.99884697e-03  6.44160060e-03  6.54404046e-03  6.30607423e-03   5.75681306e-03  4.95302562e-03  3.97511819e-03  2.92089363e-03   1.89754428e-03  1.01250393e-03  3.63906941e-04  3.14657810e-05   6.85739925e-05  4.96368127e-04  1.30034283e-03  2.42991777e-03   3.80111778e-03  5.30226763e-03  6.80234030e-03  8.16135667e-03   9.24203385e-03  9.92173992e-03  1.01037470e-02  9.72679111e-03   8.77204880e-03  7.26682036e-03  5.28445650e-03  2.94036135e-03   3.84227125e-04 -2.21102237e-03 -4.66280516e-03 -6.79395348e-03  -8.44809614e-03 -9.50408227e-03 -9.88819881e-03 -9.58305782e-03  -8.63225034e-03 -7.14016640e-03 -5.26674513e-03 -3.21731695e-03  -1.22810184e-03  4.51699508e-04  1.57997057e-03  1.94242115e-03   1.37240771e-03 -2.31767523e-04 -2.89355342e-03 -6.55007415e-03  -1.10501644e-02 -1.61589715e-02 -2.15691018e-02 -2.69177966e-02  -3.18091506e-02 -3.58399760e-02 -3.86275921e-02 -3.98376219e-02  -3.92098062e-02 -3.65799301e-02 -3.18961728e-02 -2.52285447e-02  -1.67705300e-02 -6.83258217e-03  4.17231352e-03  1.57502346e-02   2.73537830e-02  3.84136884e-02  4.83725176e-02  5.67182725e-02   6.30156468e-02  6.69328436e-02  6.82621456e-02  6.69328436e-02   6.30156468e-02  5.67182725e-02  4.83725176e-02  3.84136884e-02   2.73537830e-02  1.57502346e-02  4.17231352e-03 -6.83258217e-03  -1.67705300e-02 -2.52285447e-02 -3.18961728e-02 -3.65799301e-02  -3.92098062e-02 -3.98376219e-02 -3.86275921e-02 -3.58399760e-02  -3.18091506e-02 -2.69177966e-02 -2.15691018e-02 -1.61589715e-02  -1.10501644e-02 -6.55007415e-03 -2.89355342e-03 -2.31767523e-04   1.37240771e-03  1.94242115e-03  1.57997057e-03  4.51699508e-04  -1.22810184e-03 -3.21731695e-03 -5.26674513e-03 -7.14016640e-03  -8.63225034e-03 -9.58305782e-03 -9.88819881e-03 -9.50408227e-03  -8.44809614e-03 -6.79395348e-03 -4.66280516e-03 -2.21102237e-03   3.84227125e-04  2.94036135e-03  5.28445650e-03  7.26682036e-03   8.77204880e-03  9.72679111e-03  1.01037470e-02  9.92173992e-03   9.24203385e-03  8.16135667e-03  6.80234030e-03  5.30226763e-03   3.80111778e-03  2.42991777e-03  1.30034283e-03  4.96368127e-04   6.85739925e-05  3.14657810e-05  3.63906941e-04  1.01250393e-03   1.89754428e-03  2.92089363e-03  3.97511819e-03  4.95302562e-03   5.75681306e-03  6.30607423e-03  6.54404046e-03  6.44160060e-03   5.99884697e-03  5.24411002e-03  4.23065541e-03  3.03140643e-03   1.73220653e-03  4.24240422e-04 -8.03719544e-04 -1.87258441e-03  -2.71914354e-03 -3.30070166e-03 -3.59782419e-03 -3.61502785e-03  -3.37943246e-03 -2.93756072e-03 -2.35062225e-03 -1.68873435e-03  -1.02460552e-03 -4.27234784e-04  4.38408466e-05  3.43283242e-04   4.43309317e-04  3.35430765e-04  3.04868860e-05 -4.42972267e-04  -1.04175727e-03 -1.71225352e-03 -2.39538016e-03 -3.03184641e-03  -3.56724787e-03 -3.95657476e-03 -4.16776900e-03 -4.18405998e-03  -4.00492239e-03 -3.64562187e-03 -3.13543575e-03 -2.51474575e-03  -1.83128900e-03 -1.13591537e-03 -4.78229308e-04  9.75089362e-05   5.55882890e-04  8.72943226e-04  1.03776235e-03  1.05282547e-03   9.33266078e-04  7.05052077e-04  4.02314761e-04  6.40793507e-05  -2.69302192e-04 -5.59700440e-04 -7.74436926e-04 -8.88926887e-04  -8.88531054e-04 -7.69486161e-04 -5.38867392e-04 -2.13620600e-04   1.81219535e-04  6.14943586e-04  1.05398419e-03  1.46487975e-03   1.81712579e-03  2.08567371e-03  2.25287556e-03  2.30972824e-03   2.25633609e-03  2.10158077e-03  1.86205560e-03  1.56038302e-03   1.22308179e-03  8.78183614e-04  5.52812515e-04  2.70935874e-04   5.14731461e-05 -9.30892382e-05 -1.57477525e-04 -1.43761365e-04<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-357037","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/357037","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=357037"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/357037\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=357037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=357037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=357037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}