{"id":302115,"date":"2020-04-18T15:00:29","date_gmt":"2020-04-18T15:00:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=302115"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=302115","title":{"rendered":"\u0414\u0435\u043b\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043c: \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OFDM \u0438 GNU Radio"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/497638\/\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438 &quot;<a href=\"https:\/\/habr.com\/ru\/post\/486542\/\">\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0437\u0432\u0443\u043a Dial-up \u043c\u043e\u0434\u0435\u043c\u0430<\/a>&quot;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043c\u0430\u043c\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043e\u0434\u0435\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OFDM \u0438 GNU Radio.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443, \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u2014 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0418\u0442\u0430\u043a, \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043c\u043e\u0434\u0435\u043c, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 \u0410 \u0432 \u0442\u043e\u0447\u043a\u0443 \u0411. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Orthogonal_frequency-division_multiplexing\" rel=\"nofollow\">OFDM<\/a> \u2014 \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u0432\u044f\u0437\u0438. \u0412 OFDM \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0424\u0443\u0440\u044c\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. OFDM \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0433\u0434\u0435, \u043e\u0442 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0432\u0438\u0434\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0434\u0438\u043e, \u0434\u043e LTE. \u041d\u0430\u0448 \u0430\u0443\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0436\u0435 \u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0443\u0442\u044c, \u0432 \u043e\u0431\u0449\u0435\u043c, \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, OFDM <i>\u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d<\/i> \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443, \u0445\u043e\u0442\u044f \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. <\/p>\n<h2>OFDM \u0432 GNU Radio<\/h2>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0438\u0436\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vv\/na\/vi\/vvnavizcn1dx64ma4gptg2pxags.png\"><\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f GNU Radio 3.8:   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ofdm1.grc<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"dos\">options:   parameters:     author: ''     category: '[GRC Hier Blocks]'     cmake_opt: ''     comment: ''     copyright: ''     description: ''     gen_cmake: 'On'     gen_linking: dynamic     generate_options: qt_gui     hier_block_src_path: '.:'     id: ofdm_test_1     max_nouts: '0'     output_language: python     placement: (0,0)     qt_qss_theme: ''     realtime_scheduling: ''     run: 'True'     run_command: '{python} -u {filename}'     run_options: prompt     sizing_mode: fixed     thread_safe_setters: ''     title: OFDM Test 1     window_size: ''   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [8, 8]     rotation: 0     state: enabled  blocks: - name: fft_len   id: variable   parameters:     comment: ''     value: '64'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [448, 12.0]     rotation: 0     state: enabled - name: packet_len   id: variable   parameters:     comment: ''     value: '12'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [336, 12.0]     rotation: 0     state: enabled - name: samp_rate   id: variable   parameters:     comment: ''     value: '2400'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [216, 12.0]     rotation: 0     state: enabled - name: blocks_file_source_0   id: blocks_file_source   parameters:     affinity: ''     alias: ''     begin_tag: pmt.PMT_NIL     comment: ''     file: D:\\Temp\\1\\data2.txt     length: '0'     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     repeat: 'True'     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [32, 128.0]     rotation: 0     state: enabled - name: blocks_stream_to_tagged_stream_0   id: blocks_stream_to_tagged_stream   parameters:     affinity: ''     alias: ''     comment: ''     len_tag_key: '&quot;key&quot;'     maxoutbuf: '0'     minoutbuf: '0'     packet_len: packet_len     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [488, 156.0]     rotation: 0     state: enabled - name: blocks_throttle_0   id: blocks_throttle   parameters:     affinity: ''     alias: ''     comment: ''     ignoretag: 'True'     maxoutbuf: '0'     minoutbuf: '0'     samples_per_second: samp_rate     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [272, 168.0]     rotation: 0     state: enabled - name: blocks_udp_sink_0   id: blocks_udp_sink   parameters:     affinity: ''     alias: ''     comment: ''     eof: 'True'     ipaddr: 127.0.0.1     port: '40868'     psize: '128'     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [424, 476.0]     rotation: 180     state: enabled - name: channels_channel_model_0   id: channels_channel_model   parameters:     affinity: ''     alias: ''     block_tags: 'True'     comment: ''     epsilon: '1.0'     freq_offset: 0 * 1.0\/fft_len     maxoutbuf: '0'     minoutbuf: '0'     noise_voltage: '0.1'     seed: '0'     taps: 1.0 + 1.0j   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1112.0, 280]     rotation: 270     state: enabled - name: digital_ofdm_rx_0   id: digital_ofdm_rx   parameters:     affinity: ''     alias: ''     comment: ''     cp_len: fft_len\/\/4     fft_len: fft_len     header_mod: '&quot;BPSK&quot;'     log: 'False'     maxoutbuf: '0'     minoutbuf: '0'     occupied_carriers: ((-4,-3,-2,-1,1,2,3,4),)     packet_len_key: '&quot;key&quot;'     payload_mod: '&quot;QPSK&quot;'     pilot_carriers: ((-6,-5,5,6),)     pilot_symbols: ((-1,1,-1,1),)     scramble_bits: 'False'     sync_word1: None     sync_word2: None   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [776, 428.0]     rotation: 180     state: enabled - name: digital_ofdm_tx_0   id: digital_ofdm_tx   parameters:     affinity: ''     alias: ''     comment: ''     cp_len: fft_len\/\/4     fft_len: fft_len     header_mod: '&quot;BPSK&quot;'     log: 'False'     maxoutbuf: '0'     minoutbuf: '0'     occupied_carriers: ((-4,-3,-2,-1,1,2,3,4),)     packet_len_key: '&quot;key&quot;'     payload_mod: '&quot;QPSK&quot;'     pilot_carriers: ((-6,-5,5,6),)     pilot_symbols: ((-1,1,-1,1),)     rolloff: '0'     scramble_bits: 'False'     sync_word1: None     sync_word2: None   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [776, 80.0]     rotation: 0     state: enabled - name: qtgui_freq_sink_x_0   id: qtgui_freq_sink_x   parameters:     affinity: ''     alias: ''     alpha1: '1.0'     alpha10: '1.0'     alpha2: '1.0'     alpha3: '1.0'     alpha4: '1.0'     alpha5: '1.0'     alpha6: '1.0'     alpha7: '1.0'     alpha8: '1.0'     alpha9: '1.0'     autoscale: 'False'     average: '1.0'     axislabels: 'True'     bw: samp_rate     color1: '&quot;blue&quot;'     color10: '&quot;dark blue&quot;'     color2: '&quot;red&quot;'     color3: '&quot;green&quot;'     color4: '&quot;black&quot;'     color5: '&quot;cyan&quot;'     color6: '&quot;magenta&quot;'     color7: '&quot;yellow&quot;'     color8: '&quot;dark red&quot;'     color9: '&quot;dark green&quot;'     comment: ''     ctrlpanel: 'False'     fc: '0'     fftsize: '1024'     freqhalf: 'True'     grid: 'False'     gui_hint: ''     label: Relative Gain     label1: Rx Spectrum     label10: ''     label2: ''     label3: ''     label4: ''     label5: ''     label6: ''     label7: ''     label8: ''     label9: ''     legend: 'True'     maxoutbuf: '0'     minoutbuf: '0'     name: Rx Spectrum     nconnections: '1'     showports: 'True'     tr_chan: '0'     tr_level: '0.0'     tr_mode: qtgui.TRIG_MODE_FREE     tr_tag: '&quot;&quot;'     type: complex     units: dB     update_time: '0.10'     width1: '1'     width10: '1'     width2: '1'     width3: '1'     width4: '1'     width5: '1'     width6: '1'     width7: '1'     width8: '1'     width9: '1'     wintype: firdes.WIN_BLACKMAN_hARRIS     ymax: '10'     ymin: '-140'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1232, 92.0]     rotation: 0     state: enabled  connections: - [blocks_file_source_0, '0', blocks_throttle_0, '0'] - [blocks_stream_to_tagged_stream_0, '0', digital_ofdm_tx_0, '0'] - [blocks_throttle_0, '0', blocks_stream_to_tagged_stream_0, '0'] - [channels_channel_model_0, '0', digital_ofdm_rx_0, '0'] - [digital_ofdm_rx_0, '0', blocks_udp_sink_0, '0'] - [digital_ofdm_tx_0, '0', channels_channel_model_0, '0'] - [digital_ofdm_tx_0, '0', qtgui_freq_sink_x_0, '0']  metadata:   file_format: 1 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u00abHello Habr!!\u00bb), \u0437\u0430\u0442\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u043b\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 <b>OFDM Transmitter<\/b>. OFDM \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u0438\u0434 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 OFDM-\u043a\u043e\u0434\u0435\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/u4\/dy\/cy\/u4dycyowkvjev7wyacdvyj1nzpu.png\"><\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/wiki.gnuradio.org\/index.php\/Basic_OFDM_Tutorial\" rel=\"nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u043b\u043e\u043a\u0430 <b>OFDM Receiver<\/b> \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. <\/p>\n<p>  \u0411\u043b\u043e\u043a <b>Channel Model<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0441\u0432\u044f\u0437\u0438, \u0431\u043b\u043e\u043a <b>QT GUI Frequency Sink<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u043a\u0442\u0440\u0430. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (sample rate = 2400), \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0441\u043f\u0435\u043a\u0442\u0440\u0430, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0443\u044e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0430\u0443\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b\u0443.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 GNU Radio \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UDP. \u0411\u043b\u043e\u043a <b>UDP Sink<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u0438\u0445 \u043f\u0440\u0438\u0435\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python:<\/p>\n<pre><code class=\"python\">import socket  UDP_IP = &quot;127.0.0.1&quot; UDP_PORT = 40868  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((UDP_IP, UDP_PORT)) sock.settimeout(0.5)  while True:     try:         data, addr = sock.recvfrom(128)          print(&quot;Msg:&quot;, data, 'Hex:', ' '.join('{:02x}'.format(x) for x in data))     except socket.timeout:         pass <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 GNU Radio, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442, \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c GNU Radio \u0438 \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wk\/iy\/7e\/wkiy7emkkl_k-lmkr760xaorpjs.png\"><\/p>\n<p>  \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0442\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c? \u041d\u0435\u0442, \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u0412\u044b\u0445\u043e\u0434\u0438\u043c \u0432 \u044d\u0444\u0438\u0440<\/h2>\n<p>  \u0412 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u00ab\u043d\u043e\u00bb \u2014 GNU Radio \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u00ab\u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c\u00bb, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u043e\u0431\u043e\u0439 \u043f\u0430\u0440\u044b \u0447\u0438\u0441\u0435\u043b, \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043f\u043e \u0444\u0430\u0437\u0435 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u044d\u0444\u0438\u0440 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>  \u0418 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0412\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b SDR-\u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0442\u0442\u0435\u0440\u043e\u0432 (HackRF, LimeSDR, USRP \u0438 \u043f\u0440) \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u043b\u044f GNU Radio, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u00ab\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c\u00bb. \u041d\u043e \u0442.\u043a. \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e \u0426\u041e\u0421:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gn\/ns\/6d\/gnns6dsvmcfbtzmjek_2lv2se8e.png\"> <\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c OFDM \u044d\u0442\u043e \u043d\u0430\u0448 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a, Fc \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0439, \u043c\u044b \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0451 \u0440\u0430\u0432\u043d\u043e\u0439 4\u041a\u0413\u0446, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u043e\u043f\u0430\u0434\u0430\u043b \u0432 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430. \u0411\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u0430 \u0433\u0440\u0430\u0444\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vq\/lz\/xk\/vqlzxk4avzkjyef_tvwhz6dellw.png\"><\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <b>WAV File Sink<\/b>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u0441\u043f\u0435\u043a\u0442\u0440, \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0432\u043d\u0430 4\u041a\u0413\u0446: <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vq\/kw\/u0\/vqkwu0yhiu6ovufplifckwbcozc.png\"><\/p>\n<h2>\u041f\u0440\u0438\u0435\u043c<\/h2>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043b\u043e\u043a-\u0441\u0445\u0435\u043c\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. \u0422\u0443\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/v3\/l8\/iy\/v3l8iyx1anm1shsn-trioccrwf4.png\"><\/p>\n<p>  \u041c\u044b \u0434\u043e\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043d\u0430 \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043f\u043e \u0444\u0430\u0437\u0435 \u043e\u043f\u043e\u0440\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u0437\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LPF \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  \u0413\u0440\u0430\u0444 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0432 GNU Radio \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/od\/u6\/_v\/odu6_vjheviwfkqctwv-3cusjiq.png\"><\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a <b>Audio Source<\/b> \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0431\u043b\u043e\u043a <b>QT GUI Frequency Sink<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043b WAV-\u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d, \u043f\u0440\u0438 \u043f\u043e\u0434\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u043a \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442: <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0s\/nu\/xm\/0snuxm4hgkhef8obwqwnzdohvik.png\"><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u043f\u0440\u0438\u0435\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GNU Radio \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0438 \u043d\u0430\u0433\u043b\u044f\u0434\u0435\u043d. OFDM \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u044d\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0430 FFT, \u0447\u0438\u0441\u043b\u043e\u043c \u043d\u0435\u0441\u0443\u0449\u0438\u0445, \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438 \u043f\u0440. <\/p>\n<p>  \u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0438 \u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432. <\/p>\n<p>  \u0414\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">odfm2.grc<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"dos\">options:   parameters:     author: ''     category: Custom     cmake_opt: ''     comment: ''     copyright: ''     description: Transmit a pre-defined signal (a complex sine) as OFDM packets.     gen_cmake: 'On'     gen_linking: dynamic     generate_options: qt_gui     hier_block_src_path: '.:'     id: ofdm_test_2     max_nouts: '0'     output_language: python     placement: (0,0)     qt_qss_theme: ''     realtime_scheduling: ''     run: 'True'     run_command: '{python} -u {filename}'     run_options: prompt     sizing_mode: fixed     thread_safe_setters: ''     title: OFDM Test 2     window_size: 1280, 1024   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [8, 12.0]     rotation: 0     state: enabled  blocks: - name: audio_samp_rate   id: variable   parameters:     comment: ''     value: '24000'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [648, 20.0]     rotation: 0     state: true - name: carrier_freq   id: variable   parameters:     comment: ''     value: '4000'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [792, 20.0]     rotation: 0     state: true - name: fft_len   id: variable   parameters:     comment: ''     value: '64'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [448, 20.0]     rotation: 0     state: enabled - name: len_tag_key   id: variable   parameters:     comment: ''     value: '&quot;packet_len&quot;'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [320, 20.0]     rotation: 0     state: enabled - name: packet_len   id: variable   parameters:     comment: ''     value: '12'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [216, 20.0]     rotation: 0     state: enabled - name: samp_rate   id: variable   parameters:     comment: ''     value: '2400'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [536, 20.0]     rotation: 0     state: enabled - name: analog_sig_source_x_0   id: analog_sig_source_x   parameters:     affinity: ''     alias: ''     amp: '1'     comment: ''     freq: carrier_freq     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     phase: '0'     samp_rate: audio_samp_rate     type: float     waveform: analog.GR_COS_WAVE   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1080, 88.0]     rotation: 0     state: true - name: analog_sig_source_x_0_0   id: analog_sig_source_x   parameters:     affinity: ''     alias: ''     amp: '1'     comment: ''     freq: carrier_freq     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     phase: '0'     samp_rate: audio_samp_rate     type: float     waveform: analog.GR_SIN_WAVE   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1080, 344.0]     rotation: 0     state: true - name: analog_sig_source_x_0_0_0   id: analog_sig_source_x   parameters:     affinity: ''     alias: ''     amp: '1'     comment: ''     freq: carrier_freq     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     phase: '0'     samp_rate: audio_samp_rate     type: float     waveform: analog.GR_SIN_WAVE   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1376, 824.0]     rotation: 180     state: true - name: analog_sig_source_x_0_1   id: analog_sig_source_x   parameters:     affinity: ''     alias: ''     amp: '1'     comment: ''     freq: carrier_freq     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     phase: '0'     samp_rate: audio_samp_rate     type: float     waveform: analog.GR_COS_WAVE   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1376, 672.0]     rotation: 180     state: true - name: audio_sink_0   id: audio_sink   parameters:     affinity: ''     alias: ''     comment: ''     device_name: ''     num_inputs: '1'     ok_to_block: 'True'     samp_rate: audio_samp_rate   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1608, 224.0]     rotation: 0     state: disabled - name: audio_source_0   id: audio_source   parameters:     affinity: ''     alias: ''     comment: ''     device_name: ''     maxoutbuf: '0'     minoutbuf: '0'     num_outputs: '1'     ok_to_block: 'True'     samp_rate: audio_samp_rate   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1376, 584.0]     rotation: 180     state: enabled - name: blocks_add_xx_0   id: blocks_add_xx   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     num_inputs: '2'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1480, 264.0]     rotation: 0     state: true - name: blocks_complex_to_float_0   id: blocks_complex_to_float   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1128, 256.0]     rotation: 0     state: true - name: blocks_file_source_0   id: blocks_file_source   parameters:     affinity: ''     alias: ''     begin_tag: pmt.PMT_NIL     comment: ''     file: D:\\Temp\\1\\data2.txt     length: '0'     maxoutbuf: '0'     minoutbuf: '0'     offset: '0'     repeat: 'True'     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [32, 224.0]     rotation: 0     state: enabled - name: blocks_float_to_complex_0   id: blocks_float_to_complex   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [744, 768.0]     rotation: 180     state: true - name: blocks_multiply_xx_0   id: blocks_multiply_xx   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     num_inputs: '2'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1336, 176.0]     rotation: 0     state: true - name: blocks_multiply_xx_0_0   id: blocks_multiply_xx   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     num_inputs: '2'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1336, 344.0]     rotation: 0     state: enabled - name: blocks_multiply_xx_0_1   id: blocks_multiply_xx   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     num_inputs: '2'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1168, 696.0]     rotation: 180     state: true - name: blocks_multiply_xx_0_1_0   id: blocks_multiply_xx   parameters:     affinity: ''     alias: ''     comment: ''     maxoutbuf: '0'     minoutbuf: '0'     num_inputs: '2'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1176, 864.0]     rotation: 180     state: true - name: blocks_null_sink_0   id: blocks_null_sink   parameters:     affinity: ''     alias: ''     bus_structure_sink: '[[0,],]'     comment: ''     num_inputs: '1'     type: float     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1608, 168.0]     rotation: 0     state: true - name: blocks_stream_to_tagged_stream_0   id: blocks_stream_to_tagged_stream   parameters:     affinity: ''     alias: ''     comment: ''     len_tag_key: '&quot;key&quot;'     maxoutbuf: '0'     minoutbuf: '0'     packet_len: packet_len     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [424, 252.0]     rotation: 0     state: enabled - name: blocks_throttle_0   id: blocks_throttle   parameters:     affinity: ''     alias: ''     comment: ''     ignoretag: 'True'     maxoutbuf: '0'     minoutbuf: '0'     samples_per_second: samp_rate     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [248, 264.0]     rotation: 0     state: enabled - name: blocks_udp_sink_0   id: blocks_udp_sink   parameters:     affinity: ''     alias: ''     comment: ''     eof: 'True'     ipaddr: 127.0.0.1     port: '40868'     psize: '128'     type: byte     vlen: '1'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [104, 748.0]     rotation: 180     state: enabled - name: blocks_wavfile_sink_0   id: blocks_wavfile_sink   parameters:     affinity: ''     alias: ''     bits_per_sample: '16'     comment: ''     file: D:\\Temp\\1\\ofdm.wav     nchan: '1'     samp_rate: audio_samp_rate   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [1608, 308.0]     rotation: 0     state: disabled - name: digital_ofdm_rx_0   id: digital_ofdm_rx   parameters:     affinity: ''     alias: ''     comment: ''     cp_len: fft_len\/\/4     fft_len: fft_len     header_mod: '&quot;BPSK&quot;'     log: 'False'     maxoutbuf: '0'     minoutbuf: '0'     occupied_carriers: ((-4,-3,-2,-1,1,2,3,4),)     packet_len_key: '&quot;key&quot;'     payload_mod: '&quot;QPSK&quot;'     pilot_carriers: ((-6,-5,5,6),)     pilot_symbols: ((-1,1,-1,1),)     scramble_bits: 'False'     sync_word1: None     sync_word2: None   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [440, 700.0]     rotation: 180     state: enabled - name: digital_ofdm_tx_0   id: digital_ofdm_tx   parameters:     affinity: ''     alias: ''     comment: ''     cp_len: fft_len\/\/4     fft_len: fft_len     header_mod: '&quot;BPSK&quot;'     log: 'False'     maxoutbuf: '0'     minoutbuf: '0'     occupied_carriers: ((-4,-3,-2,-1,1,2,3,4),)     packet_len_key: '&quot;key&quot;'     payload_mod: '&quot;QPSK&quot;'     pilot_carriers: ((-6,-5,5,6),)     pilot_symbols: ((-1,1,-1,1),)     rolloff: '0'     scramble_bits: 'False'     sync_word1: None     sync_word2: None   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [664, 176.0]     rotation: 0     state: enabled - name: low_pass_filter_0   id: low_pass_filter   parameters:     affinity: ''     alias: ''     beta: '6.76'     comment: ''     cutoff_freq: carrier_freq     decim: audio_samp_rate\/\/samp_rate     gain: '1'     interp: '1'     maxoutbuf: '0'     minoutbuf: '0'     samp_rate: audio_samp_rate     type: fir_filter_fff     width: '1000'     win: firdes.WIN_HAMMING   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [960, 648.0]     rotation: 180     state: true - name: low_pass_filter_0_0   id: low_pass_filter   parameters:     affinity: ''     alias: ''     beta: '6.76'     comment: ''     cutoff_freq: carrier_freq     decim: audio_samp_rate\/\/samp_rate     gain: '1'     interp: '1'     maxoutbuf: '0'     minoutbuf: '0'     samp_rate: audio_samp_rate     type: fir_filter_fff     width: '1000'     win: firdes.WIN_HAMMING   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [960, 816.0]     rotation: 180     state: true - name: qtgui_freq_sink_x_0   id: qtgui_freq_sink_x   parameters:     affinity: ''     alias: ''     alpha1: '1.0'     alpha10: '1.0'     alpha2: '1.0'     alpha3: '1.0'     alpha4: '1.0'     alpha5: '1.0'     alpha6: '1.0'     alpha7: '1.0'     alpha8: '1.0'     alpha9: '1.0'     autoscale: 'False'     average: '1.0'     axislabels: 'True'     bw: samp_rate     color1: '&quot;blue&quot;'     color10: '&quot;dark blue&quot;'     color2: '&quot;red&quot;'     color3: '&quot;green&quot;'     color4: '&quot;black&quot;'     color5: '&quot;cyan&quot;'     color6: '&quot;magenta&quot;'     color7: '&quot;yellow&quot;'     color8: '&quot;dark red&quot;'     color9: '&quot;dark green&quot;'     comment: ''     ctrlpanel: 'False'     fc: '0'     fftsize: '1024'     freqhalf: 'True'     grid: 'False'     gui_hint: ''     label: Relative Gain     label1: Rx Spectrum     label10: ''     label2: ''     label3: ''     label4: ''     label5: ''     label6: ''     label7: ''     label8: ''     label9: ''     legend: 'True'     maxoutbuf: '0'     minoutbuf: '0'     name: Rx Spectrum     nconnections: '1'     showports: 'True'     tr_chan: '0'     tr_level: '0.0'     tr_mode: qtgui.TRIG_MODE_FREE     tr_tag: '&quot;&quot;'     type: complex     units: dB     update_time: '0.10'     width1: '1'     width10: '1'     width2: '1'     width3: '1'     width4: '1'     width5: '1'     width6: '1'     width7: '1'     width8: '1'     width9: '1'     wintype: firdes.WIN_BLACKMAN_hARRIS     ymax: '10'     ymin: '-140'   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [728, 612.0]     rotation: 0     state: enabled - name: rational_resampler_xxx_0   id: rational_resampler_xxx   parameters:     affinity: ''     alias: ''     comment: ''     decim: '1'     fbw: '0'     interp: audio_samp_rate\/\/samp_rate     maxoutbuf: '0'     minoutbuf: '0'     taps: ''     type: ccf   states:     bus_sink: false     bus_source: false     bus_structure: null     coordinate: [912, 236.0]     rotation: 0     state: true  connections: - [analog_sig_source_x_0, '0', blocks_multiply_xx_0, '0'] - [analog_sig_source_x_0_0, '0', blocks_multiply_xx_0_0, '1'] - [analog_sig_source_x_0_0_0, '0', blocks_multiply_xx_0_1_0, '1'] - [analog_sig_source_x_0_1, '0', blocks_multiply_xx_0_1, '1'] - [audio_source_0, '0', blocks_multiply_xx_0_1, '0'] - [audio_source_0, '0', blocks_multiply_xx_0_1_0, '0'] - [blocks_add_xx_0, '0', audio_sink_0, '0'] - [blocks_add_xx_0, '0', blocks_null_sink_0, '0'] - [blocks_add_xx_0, '0', blocks_wavfile_sink_0, '0'] - [blocks_complex_to_float_0, '0', blocks_multiply_xx_0, '1'] - [blocks_complex_to_float_0, '1', blocks_multiply_xx_0_0, '0'] - [blocks_file_source_0, '0', blocks_throttle_0, '0'] - [blocks_float_to_complex_0, '0', digital_ofdm_rx_0, '0'] - [blocks_float_to_complex_0, '0', qtgui_freq_sink_x_0, '0'] - [blocks_multiply_xx_0, '0', blocks_add_xx_0, '0'] - [blocks_multiply_xx_0_0, '0', blocks_add_xx_0, '1'] - [blocks_multiply_xx_0_1, '0', low_pass_filter_0, '0'] - [blocks_multiply_xx_0_1_0, '0', low_pass_filter_0_0, '0'] - [blocks_stream_to_tagged_stream_0, '0', digital_ofdm_tx_0, '0'] - [blocks_throttle_0, '0', blocks_stream_to_tagged_stream_0, '0'] - [digital_ofdm_rx_0, '0', blocks_udp_sink_0, '0'] - [digital_ofdm_tx_0, '0', rational_resampler_xxx_0, '0'] - [low_pass_filter_0, '0', blocks_float_to_complex_0, '0'] - [low_pass_filter_0_0, '0', blocks_float_to_complex_0, '1'] - [rational_resampler_xxx_0, '0', blocks_complex_to_float_0, '0']  metadata:   file_format: 1 <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/497638\/\"> https:\/\/habr.com\/ru\/post\/497638\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/497638\/\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438 &quot;<a href=\"https:\/\/habr.com\/ru\/post\/486542\/\">\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0437\u0432\u0443\u043a Dial-up \u043c\u043e\u0434\u0435\u043c\u0430<\/a>&quot;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043c\u0430\u043c\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043e\u0434\u0435\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OFDM \u0438 GNU Radio.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0443, \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u2014 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c.  <\/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-302115","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302115","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=302115"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302115\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=302115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=302115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=302115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}