Software Defined Radio — как это работает? Часть 8

    Привет Хабр.

    В одной из предыдущих статей про Software Defined Radio был задан вопрос, как декодировать RDS с помощью GNU Radio. Декодер RDS является не таким уж простым для создания с нуля, но к счастью для нас, в GNU Radio он уже встроен, так что несложно посмотреть как он работает, не написав ни одной строчки кода, достаточно лишь приемника RTL-SDR.



    Как это работает, продолжение под катом.

    Про GNU Radio и его установку я повторяться не буду, это уже описывалось ранее. Если совсем кратко, дистрибутив под Windows можно взять здесь. Перейдем собственно к RDS.

    Если кто вдруг не в курсе, RDS (Radio Data System) — это протокол, используемый в обычном FM-вещании для передачи дополнительной цифровой информации (время, курсы валют, погода и пр). Передача идет со скоростью 1187.5bps на частоте 57КГц (3я гармоника пилот-тона), для минимизации полосы частот используется фазовое кодирование BPSK (Binary Phase Shift Keying). Побитовый уровень RDS уже рассматривался на хабре ранее, ну а мы перейдем к GNU Radio.

    Декодер для GNU Radio был сделан примерно лет 10 назад, но ту версию смотреть уже бесполезно, названия многих блоков поменялись, и приведенные там примеры уже не работают. Обновленный форк можно взять отсюда.

    Собрать gr-rds из исходников под Windows, кстати, не получилось — в cmake выдаются ошибки на отсутствие Boost, хотя он поставлен. Непонятно кстати, почему за годы существования cmake и boost, cmake так и не научили находить пути в Windows — вроде найти папку на диске это совсем не rocket science (если кто знает решение, напишите в комментариях, хотя судя по Stack Overflow, проблема существует годами и всем пофиг). Но это нам как оказалось, и не нужно — декодер RDS уже добавлен в GNU Radio, так что из проекта на github нам нужны только примеры, которые лежат в папке apps.

    Блок-схема, прилагаемая в примерах, является довольно-таки монструозной, к тому же, при ее открытии выдаются ошибки (блоки помечены красным).



    В реале, впрочем, все проще — 2/3 схемы это стерео-плеер для FM, где из исходного сигнала извлекаются L+R и L-R каналы, обрабатываются и подаются на звуковую карту. Нам это сейчас неактуально, так что эти блоки можно удалить (тем более, что «из коробки» оно почему-то и не заработало, а разбираться было лень). Ошибки возникают из-за параметра Grid Position, который видимо, не поддерживается Windows-версией, но его можно без проблем удалить, на функциональность не влияет.

    После удаления «всего лишнего» работающая схема RDS декодера выглядит так:



    Посмотрим, что тут есть.

    Исходный сигнал поступает из RTL-SDR Source, частота задается параметром freq, имеющим тип WX GUI Slider (да, в GNU Radio можно создать свой UI, и есть базовые контролы). Чтобы избежать пика на нулевой частоте в центре, используется параметр freq_offset, блок Frequency Xlating сдвигает частоту на это значение. Блок WBFM Receive, как понятно из названия, выполняет FM-демодуляцию, затем частота сдвигается еще раз, чтобы выделить сам RDS на 57КГц. Блок Root Cosined Filter выделяет узкую частоту, ну а MPSK-декодер с параметром 2 выполняет BPSK декодирование (сам RDS передается с помощью фазовой модуляции с двумя состояниями). В RDS используется дифференциальное кодирование, поэтому вызывается соответствующий дифференциальный декодер, ну и наконец готовый бинарный поток подается на блок RDS Decoder (его исходники можно посмотреть на github). После декодера не менее важная часть это RDS-парсер — типов пакетов в RDS довольно-таки много, и парсер делает всю работу по их расшифровке.

    Собственно и все. Результаты работы декодера на КДПВ и скриншотах.







    Если кому-то необходимо использовать программу в no-UI режиме, можно использовать блок FR Tap, более подробное описание здесь, я лично его не пробовал. Если же интересен более низкий побитовый уровень RDS, я его рассматривал ранее, для общего интереса тоже может быть полезно.

    Как обычно, всем удачных экспериментов.

    Исходный GRC-файл, работающий под Windows, под спойлером (частоту радиостанции только придется поменять).

    rds_rx.grc
    <?xml version='1.0' encoding='utf-8'?>
    <?grc format='1' created='3.7.11'?>
    <flow_graph>
      <timestamp>Thu Aug 28 08:24:49 2014</timestamp>
      <block>
        <key>options</key>
        <param>
          <key>author</key>
          <value></value>
        </param>
        <param>
          <key>window_size</key>
          <value>1600, 1600</value>
        </param>
        <param>
          <key>category</key>
          <value>Custom</value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>description</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(14, 9)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>generate_options</key>
          <value>wx_gui</value>
        </param>
        <param>
          <key>hier_block_src_path</key>
          <value>.:</value>
        </param>
        <param>
          <key>id</key>
          <value>rds_rx</value>
        </param>
        <param>
          <key>max_nouts</key>
          <value>0</value>
        </param>
        <param>
          <key>qt_qss_theme</key>
          <value></value>
        </param>
        <param>
          <key>realtime_scheduling</key>
          <value></value>
        </param>
        <param>
          <key>run_command</key>
          <value>{python} -u {filename}</value>
        </param>
        <param>
          <key>run_options</key>
          <value>prompt</value>
        </param>
        <param>
          <key>run</key>
          <value>True</value>
        </param>
        <param>
          <key>thread_safe_setters</key>
          <value></value>
        </param>
        <param>
          <key>title</key>
          <value>Stereo FM receiver and RDS Decoder</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(8, 156)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>audio_decim</value>
        </param>
        <param>
          <key>value</key>
          <value>5</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(112, 156)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>audio_decim_rate</value>
        </param>
        <param>
          <key>value</key>
          <value>baseband_rate/audio_decim</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(112, 92)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>baseband_rate</value>
        </param>
        <param>
          <key>value</key>
          <value>samp_rate/bb_decim</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(240, 156)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>bb_decim</value>
        </param>
        <param>
          <key>value</key>
          <value>4</value>
        </param>
      </block>
      <block>
        <key>variable_slider</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>converver</key>
          <value>float_converter</value>
        </param>
        <param>
          <key>value</key>
          <value>100.7e6</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(448, 4)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>freq</value>
        </param>
        <param>
          <key>label</key>
          <value>Freq</value>
        </param>
        <param>
          <key>max</key>
          <value>107.9e6</value>
        </param>
        <param>
          <key>min</key>
          <value>88.1e6</value>
        </param>
        <param>
          <key>notebook</key>
          <value></value>
        </param>
        <param>
          <key>num_steps</key>
          <value>99</value>
        </param>
        <param>
          <key>style</key>
          <value>wx.SL_HORIZONTAL</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(448, 132)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>freq_offset</value>
        </param>
        <param>
          <key>value</key>
          <value>250000</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(224, 92)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>freq_tune</value>
        </param>
        <param>
          <key>value</key>
          <value>freq - freq_offset</value>
        </param>
      </block>
      <block>
        <key>variable_slider</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>converver</key>
          <value>float_converter</value>
        </param>
        <param>
          <key>value</key>
          <value>20</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(336, 4)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>gain</value>
        </param>
        <param>
          <key>label</key>
          <value>RF Gain</value>
        </param>
        <param>
          <key>max</key>
          <value>49.6</value>
        </param>
        <param>
          <key>min</key>
          <value>0</value>
        </param>
        <param>
          <key>notebook</key>
          <value></value>
        </param>
        <param>
          <key>num_steps</key>
          <value>124</value>
        </param>
        <param>
          <key>style</key>
          <value>wx.SL_HORIZONTAL</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(8, 92)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>samp_rate</value>
        </param>
        <param>
          <key>value</key>
          <value>1000000</value>
        </param>
      </block>
      <block>
        <key>variable</key>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(336, 132)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>xlate_bandwidth</value>
        </param>
        <param>
          <key>value</key>
          <value>100000</value>
        </param>
      </block>
      <block>
        <key>analog_wfm_rcv</key>
        <param>
          <key>audio_decimation</key>
          <value>bb_decim</value>
        </param>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(576, 356)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>analog_wfm_rcv_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>quad_rate</key>
          <value>samp_rate</value>
        </param>
      </block>
      <block>
        <key>blocks_complex_to_real</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(792, 632)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>blocks_complex_to_real_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>vlen</key>
          <value>1</value>
        </param>
      </block>
      <block>
        <key>blocks_keep_one_in_n</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(280, 788)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>blocks_keep_one_in_n_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>n</key>
          <value>2</value>
        </param>
        <param>
          <key>type</key>
          <value>byte</value>
        </param>
        <param>
          <key>vlen</key>
          <value>1</value>
        </param>
      </block>
      <block>
        <key>digital_binary_slicer_fb</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(112, 792)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>digital_binary_slicer_fb_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
      </block>
      <block>
        <key>digital_diff_decoder_bb</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(424, 788)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>digital_diff_decoder_bb_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>modulus</key>
          <value>2</value>
        </param>
      </block>
      <block>
        <key>digital_mpsk_receiver_cc</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(528, 488)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>gain_mu</key>
          <value>0.05</value>
        </param>
        <param>
          <key>gain_omega</key>
          <value>0.001</value>
        </param>
        <param>
          <key>id</key>
          <value>digital_mpsk_receiver_cc_0</value>
        </param>
        <param>
          <key>w</key>
          <value>1*cmath.pi/100.0</value>
        </param>
        <param>
          <key>M</key>
          <value>2</value>
        </param>
        <param>
          <key>fmax</key>
          <value>0.06</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>fmin</key>
          <value>-0.06</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>mu</key>
          <value>0.5</value>
        </param>
        <param>
          <key>omega_relative_limit</key>
          <value>0.005</value>
        </param>
        <param>
          <key>omega</key>
          <value>samp_rate/bb_decim/audio_decim/ 2375.0</value>
        </param>
        <param>
          <key>theta</key>
          <value>0</value>
        </param>
      </block>
      <block>
        <key>freq_xlating_fir_filter_xxx</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>center_freq</key>
          <value>freq_offset</value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>decim</key>
          <value>1</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(279, 296)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>freq_xlating_fir_filter_xxx_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>samp_rate</value>
        </param>
        <param>
          <key>taps</key>
          <value>firdes.low_pass(1, samp_rate, xlate_bandwidth, 100000)</value>
        </param>
        <param>
          <key>type</key>
          <value>ccc</value>
        </param>
      </block>
      <block>
        <key>freq_xlating_fir_filter_xxx</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>center_freq</key>
          <value>57e3</value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>decim</key>
          <value>audio_decim</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(72, 532)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>freq_xlating_fir_filter_xxx_1</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>baseband_rate</value>
        </param>
        <param>
          <key>taps</key>
          <value>firdes.low_pass(2500.0,baseband_rate,2.4e3,2e3,firdes.WIN_HAMMING)</value>
        </param>
        <param>
          <key>type</key>
          <value>fcc</value>
        </param>
      </block>
      <block>
        <key>gr_rds_decoder</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>debug</key>
          <value>False</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(632, 780)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>gr_rds_decoder_0</value>
        </param>
        <param>
          <key>log</key>
          <value>False</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
      </block>
      <block>
        <key>gr_rds_panel</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>freq</key>
          <value>freq</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(984, 792)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>gr_rds_panel_0</value>
        </param>
        <param>
          <key>notebook</key>
          <value></value>
        </param>
      </block>
      <block>
        <key>gr_rds_parser</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>debug</key>
          <value>False</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(800, 772)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>gr_rds_parser_0</value>
        </param>
        <param>
          <key>log</key>
          <value>True</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>pty_locale</key>
          <value>0</value>
        </param>
        <param>
          <key>reset</key>
          <value>0</value>
        </param>
      </block>
      <block>
        <key>import</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(576, 4)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>import_0</value>
        </param>
        <param>
          <key>import</key>
          <value>import math</value>
        </param>
      </block>
      <block>
        <key>notebook</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(184, 6)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>nb</value>
        </param>
        <param>
          <key>labels</key>
          <value>['BB', 'Demod', 'L+R', 'Pilot', 'DSBSC', 'RDS', 'L-R', 'RDS constellation','Waterfall']</value>
        </param>
        <param>
          <key>notebook</key>
          <value></value>
        </param>
        <param>
          <key>style</key>
          <value>wx.NB_TOP</value>
        </param>
      </block>
      <block>
        <key>root_raised_cosine_filter</key>
        <param>
          <key>alpha</key>
          <value>1</value>
        </param>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>decim</key>
          <value>1</value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>type</key>
          <value>fir_filter_ccf</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(304, 516)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>gain</key>
          <value>1</value>
        </param>
        <param>
          <key>id</key>
          <value>root_raised_cosine_filter_0</value>
        </param>
        <param>
          <key>interp</key>
          <value>1</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>ntaps</key>
          <value>100</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>samp_rate/bb_decim/audio_decim</value>
        </param>
        <param>
          <key>sym_rate</key>
          <value>2375</value>
        </param>
      </block>
      <block>
        <key>rtlsdr_source</key>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>ant0</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain0</key>
          <value>20</value>
        </param>
        <param>
          <key>bw0</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode0</key>
          <value>0</value>
        </param>
        <param>
          <key>corr0</key>
          <value>0</value>
        </param>
        <param>
          <key>freq0</key>
          <value>freq_tune</value>
        </param>
        <param>
          <key>gain_mode0</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain0</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode0</key>
          <value>0</value>
        </param>
        <param>
          <key>gain0</key>
          <value>gain</value>
        </param>
        <param>
          <key>ant10</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain10</key>
          <value>20</value>
        </param>
        <param>
          <key>bw10</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode10</key>
          <value>0</value>
        </param>
        <param>
          <key>corr10</key>
          <value>0</value>
        </param>
        <param>
          <key>freq10</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode10</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain10</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode10</key>
          <value>0</value>
        </param>
        <param>
          <key>gain10</key>
          <value>10</value>
        </param>
        <param>
          <key>ant11</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain11</key>
          <value>20</value>
        </param>
        <param>
          <key>bw11</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode11</key>
          <value>0</value>
        </param>
        <param>
          <key>corr11</key>
          <value>0</value>
        </param>
        <param>
          <key>freq11</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode11</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain11</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode11</key>
          <value>0</value>
        </param>
        <param>
          <key>gain11</key>
          <value>10</value>
        </param>
        <param>
          <key>ant12</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain12</key>
          <value>20</value>
        </param>
        <param>
          <key>bw12</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode12</key>
          <value>0</value>
        </param>
        <param>
          <key>corr12</key>
          <value>0</value>
        </param>
        <param>
          <key>freq12</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode12</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain12</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode12</key>
          <value>0</value>
        </param>
        <param>
          <key>gain12</key>
          <value>10</value>
        </param>
        <param>
          <key>ant13</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain13</key>
          <value>20</value>
        </param>
        <param>
          <key>bw13</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode13</key>
          <value>0</value>
        </param>
        <param>
          <key>corr13</key>
          <value>0</value>
        </param>
        <param>
          <key>freq13</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode13</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain13</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode13</key>
          <value>0</value>
        </param>
        <param>
          <key>gain13</key>
          <value>10</value>
        </param>
        <param>
          <key>ant14</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain14</key>
          <value>20</value>
        </param>
        <param>
          <key>bw14</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode14</key>
          <value>0</value>
        </param>
        <param>
          <key>corr14</key>
          <value>0</value>
        </param>
        <param>
          <key>freq14</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode14</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain14</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode14</key>
          <value>0</value>
        </param>
        <param>
          <key>gain14</key>
          <value>10</value>
        </param>
        <param>
          <key>ant15</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain15</key>
          <value>20</value>
        </param>
        <param>
          <key>bw15</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode15</key>
          <value>0</value>
        </param>
        <param>
          <key>corr15</key>
          <value>0</value>
        </param>
        <param>
          <key>freq15</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode15</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain15</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode15</key>
          <value>0</value>
        </param>
        <param>
          <key>gain15</key>
          <value>10</value>
        </param>
        <param>
          <key>ant16</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain16</key>
          <value>20</value>
        </param>
        <param>
          <key>bw16</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode16</key>
          <value>0</value>
        </param>
        <param>
          <key>corr16</key>
          <value>0</value>
        </param>
        <param>
          <key>freq16</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode16</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain16</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode16</key>
          <value>0</value>
        </param>
        <param>
          <key>gain16</key>
          <value>10</value>
        </param>
        <param>
          <key>ant17</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain17</key>
          <value>20</value>
        </param>
        <param>
          <key>bw17</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode17</key>
          <value>0</value>
        </param>
        <param>
          <key>corr17</key>
          <value>0</value>
        </param>
        <param>
          <key>freq17</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode17</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain17</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode17</key>
          <value>0</value>
        </param>
        <param>
          <key>gain17</key>
          <value>10</value>
        </param>
        <param>
          <key>ant18</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain18</key>
          <value>20</value>
        </param>
        <param>
          <key>bw18</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode18</key>
          <value>0</value>
        </param>
        <param>
          <key>corr18</key>
          <value>0</value>
        </param>
        <param>
          <key>freq18</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode18</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain18</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode18</key>
          <value>0</value>
        </param>
        <param>
          <key>gain18</key>
          <value>10</value>
        </param>
        <param>
          <key>ant19</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain19</key>
          <value>20</value>
        </param>
        <param>
          <key>bw19</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode19</key>
          <value>0</value>
        </param>
        <param>
          <key>corr19</key>
          <value>0</value>
        </param>
        <param>
          <key>freq19</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode19</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain19</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode19</key>
          <value>0</value>
        </param>
        <param>
          <key>gain19</key>
          <value>10</value>
        </param>
        <param>
          <key>ant1</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain1</key>
          <value>20</value>
        </param>
        <param>
          <key>bw1</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode1</key>
          <value>0</value>
        </param>
        <param>
          <key>corr1</key>
          <value>0</value>
        </param>
        <param>
          <key>freq1</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode1</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain1</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode1</key>
          <value>0</value>
        </param>
        <param>
          <key>gain1</key>
          <value>10</value>
        </param>
        <param>
          <key>ant20</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain20</key>
          <value>20</value>
        </param>
        <param>
          <key>bw20</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode20</key>
          <value>0</value>
        </param>
        <param>
          <key>corr20</key>
          <value>0</value>
        </param>
        <param>
          <key>freq20</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode20</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain20</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode20</key>
          <value>0</value>
        </param>
        <param>
          <key>gain20</key>
          <value>10</value>
        </param>
        <param>
          <key>ant21</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain21</key>
          <value>20</value>
        </param>
        <param>
          <key>bw21</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode21</key>
          <value>0</value>
        </param>
        <param>
          <key>corr21</key>
          <value>0</value>
        </param>
        <param>
          <key>freq21</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode21</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain21</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode21</key>
          <value>0</value>
        </param>
        <param>
          <key>gain21</key>
          <value>10</value>
        </param>
        <param>
          <key>ant22</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain22</key>
          <value>20</value>
        </param>
        <param>
          <key>bw22</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode22</key>
          <value>0</value>
        </param>
        <param>
          <key>corr22</key>
          <value>0</value>
        </param>
        <param>
          <key>freq22</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode22</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain22</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode22</key>
          <value>0</value>
        </param>
        <param>
          <key>gain22</key>
          <value>10</value>
        </param>
        <param>
          <key>ant23</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain23</key>
          <value>20</value>
        </param>
        <param>
          <key>bw23</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode23</key>
          <value>0</value>
        </param>
        <param>
          <key>corr23</key>
          <value>0</value>
        </param>
        <param>
          <key>freq23</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode23</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain23</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode23</key>
          <value>0</value>
        </param>
        <param>
          <key>gain23</key>
          <value>10</value>
        </param>
        <param>
          <key>ant24</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain24</key>
          <value>20</value>
        </param>
        <param>
          <key>bw24</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode24</key>
          <value>0</value>
        </param>
        <param>
          <key>corr24</key>
          <value>0</value>
        </param>
        <param>
          <key>freq24</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode24</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain24</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode24</key>
          <value>0</value>
        </param>
        <param>
          <key>gain24</key>
          <value>10</value>
        </param>
        <param>
          <key>ant25</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain25</key>
          <value>20</value>
        </param>
        <param>
          <key>bw25</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode25</key>
          <value>0</value>
        </param>
        <param>
          <key>corr25</key>
          <value>0</value>
        </param>
        <param>
          <key>freq25</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode25</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain25</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode25</key>
          <value>0</value>
        </param>
        <param>
          <key>gain25</key>
          <value>10</value>
        </param>
        <param>
          <key>ant26</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain26</key>
          <value>20</value>
        </param>
        <param>
          <key>bw26</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode26</key>
          <value>0</value>
        </param>
        <param>
          <key>corr26</key>
          <value>0</value>
        </param>
        <param>
          <key>freq26</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode26</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain26</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode26</key>
          <value>0</value>
        </param>
        <param>
          <key>gain26</key>
          <value>10</value>
        </param>
        <param>
          <key>ant27</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain27</key>
          <value>20</value>
        </param>
        <param>
          <key>bw27</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode27</key>
          <value>0</value>
        </param>
        <param>
          <key>corr27</key>
          <value>0</value>
        </param>
        <param>
          <key>freq27</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode27</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain27</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode27</key>
          <value>0</value>
        </param>
        <param>
          <key>gain27</key>
          <value>10</value>
        </param>
        <param>
          <key>ant28</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain28</key>
          <value>20</value>
        </param>
        <param>
          <key>bw28</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode28</key>
          <value>0</value>
        </param>
        <param>
          <key>corr28</key>
          <value>0</value>
        </param>
        <param>
          <key>freq28</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode28</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain28</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode28</key>
          <value>0</value>
        </param>
        <param>
          <key>gain28</key>
          <value>10</value>
        </param>
        <param>
          <key>ant29</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain29</key>
          <value>20</value>
        </param>
        <param>
          <key>bw29</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode29</key>
          <value>0</value>
        </param>
        <param>
          <key>corr29</key>
          <value>0</value>
        </param>
        <param>
          <key>freq29</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode29</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain29</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode29</key>
          <value>0</value>
        </param>
        <param>
          <key>gain29</key>
          <value>10</value>
        </param>
        <param>
          <key>ant2</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain2</key>
          <value>20</value>
        </param>
        <param>
          <key>bw2</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode2</key>
          <value>0</value>
        </param>
        <param>
          <key>corr2</key>
          <value>0</value>
        </param>
        <param>
          <key>freq2</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode2</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain2</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode2</key>
          <value>0</value>
        </param>
        <param>
          <key>gain2</key>
          <value>10</value>
        </param>
        <param>
          <key>ant30</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain30</key>
          <value>20</value>
        </param>
        <param>
          <key>bw30</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode30</key>
          <value>0</value>
        </param>
        <param>
          <key>corr30</key>
          <value>0</value>
        </param>
        <param>
          <key>freq30</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode30</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain30</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode30</key>
          <value>0</value>
        </param>
        <param>
          <key>gain30</key>
          <value>10</value>
        </param>
        <param>
          <key>ant31</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain31</key>
          <value>20</value>
        </param>
        <param>
          <key>bw31</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode31</key>
          <value>0</value>
        </param>
        <param>
          <key>corr31</key>
          <value>0</value>
        </param>
        <param>
          <key>freq31</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode31</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain31</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode31</key>
          <value>0</value>
        </param>
        <param>
          <key>gain31</key>
          <value>10</value>
        </param>
        <param>
          <key>ant3</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain3</key>
          <value>20</value>
        </param>
        <param>
          <key>bw3</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode3</key>
          <value>0</value>
        </param>
        <param>
          <key>corr3</key>
          <value>0</value>
        </param>
        <param>
          <key>freq3</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode3</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain3</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode3</key>
          <value>0</value>
        </param>
        <param>
          <key>gain3</key>
          <value>10</value>
        </param>
        <param>
          <key>ant4</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain4</key>
          <value>20</value>
        </param>
        <param>
          <key>bw4</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode4</key>
          <value>0</value>
        </param>
        <param>
          <key>corr4</key>
          <value>0</value>
        </param>
        <param>
          <key>freq4</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode4</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain4</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode4</key>
          <value>0</value>
        </param>
        <param>
          <key>gain4</key>
          <value>10</value>
        </param>
        <param>
          <key>ant5</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain5</key>
          <value>20</value>
        </param>
        <param>
          <key>bw5</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode5</key>
          <value>0</value>
        </param>
        <param>
          <key>corr5</key>
          <value>0</value>
        </param>
        <param>
          <key>freq5</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode5</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain5</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode5</key>
          <value>0</value>
        </param>
        <param>
          <key>gain5</key>
          <value>10</value>
        </param>
        <param>
          <key>ant6</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain6</key>
          <value>20</value>
        </param>
        <param>
          <key>bw6</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode6</key>
          <value>0</value>
        </param>
        <param>
          <key>corr6</key>
          <value>0</value>
        </param>
        <param>
          <key>freq6</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode6</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain6</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode6</key>
          <value>0</value>
        </param>
        <param>
          <key>gain6</key>
          <value>10</value>
        </param>
        <param>
          <key>ant7</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain7</key>
          <value>20</value>
        </param>
        <param>
          <key>bw7</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode7</key>
          <value>0</value>
        </param>
        <param>
          <key>corr7</key>
          <value>0</value>
        </param>
        <param>
          <key>freq7</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode7</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain7</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode7</key>
          <value>0</value>
        </param>
        <param>
          <key>gain7</key>
          <value>10</value>
        </param>
        <param>
          <key>ant8</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain8</key>
          <value>20</value>
        </param>
        <param>
          <key>bw8</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode8</key>
          <value>0</value>
        </param>
        <param>
          <key>corr8</key>
          <value>0</value>
        </param>
        <param>
          <key>freq8</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode8</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain8</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode8</key>
          <value>0</value>
        </param>
        <param>
          <key>gain8</key>
          <value>10</value>
        </param>
        <param>
          <key>ant9</key>
          <value></value>
        </param>
        <param>
          <key>bb_gain9</key>
          <value>20</value>
        </param>
        <param>
          <key>bw9</key>
          <value>0</value>
        </param>
        <param>
          <key>dc_offset_mode9</key>
          <value>0</value>
        </param>
        <param>
          <key>corr9</key>
          <value>0</value>
        </param>
        <param>
          <key>freq9</key>
          <value>100e6</value>
        </param>
        <param>
          <key>gain_mode9</key>
          <value>False</value>
        </param>
        <param>
          <key>if_gain9</key>
          <value>20</value>
        </param>
        <param>
          <key>iq_balance_mode9</key>
          <value>0</value>
        </param>
        <param>
          <key>gain9</key>
          <value>10</value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>args</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>1</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(24, 272)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>id</key>
          <value>rtlsdr_source_0</value>
        </param>
        <param>
          <key>maxoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>clock_source0</key>
          <value></value>
        </param>
        <param>
          <key>time_source0</key>
          <value></value>
        </param>
        <param>
          <key>clock_source1</key>
          <value></value>
        </param>
        <param>
          <key>time_source1</key>
          <value></value>
        </param>
        <param>
          <key>clock_source2</key>
          <value></value>
        </param>
        <param>
          <key>time_source2</key>
          <value></value>
        </param>
        <param>
          <key>clock_source3</key>
          <value></value>
        </param>
        <param>
          <key>time_source3</key>
          <value></value>
        </param>
        <param>
          <key>clock_source4</key>
          <value></value>
        </param>
        <param>
          <key>time_source4</key>
          <value></value>
        </param>
        <param>
          <key>clock_source5</key>
          <value></value>
        </param>
        <param>
          <key>time_source5</key>
          <value></value>
        </param>
        <param>
          <key>clock_source6</key>
          <value></value>
        </param>
        <param>
          <key>time_source6</key>
          <value></value>
        </param>
        <param>
          <key>clock_source7</key>
          <value></value>
        </param>
        <param>
          <key>time_source7</key>
          <value></value>
        </param>
        <param>
          <key>minoutbuf</key>
          <value>0</value>
        </param>
        <param>
          <key>nchan</key>
          <value>1</value>
        </param>
        <param>
          <key>num_mboards</key>
          <value>1</value>
        </param>
        <param>
          <key>type</key>
          <value>fc32</value>
        </param>
        <param>
          <key>sample_rate</key>
          <value>samp_rate</value>
        </param>
        <param>
          <key>sync</key>
          <value></value>
        </param>
      </block>
      <block>
        <key>wxgui_fftsink2</key>
        <param>
          <key>avg_alpha</key>
          <value>0.8</value>
        </param>
        <param>
          <key>average</key>
          <value>True</value>
        </param>
        <param>
          <key>baseband_freq</key>
          <value>0</value>
        </param>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>fft_size</key>
          <value>1024</value>
        </param>
        <param>
          <key>freqvar</key>
          <value>None</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(1056, 56)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>wxgui_fftsink2_0</value>
        </param>
        <param>
          <key>notebook</key>
          <value>nb, 0</value>
        </param>
        <param>
          <key>peak_hold</key>
          <value>False</value>
        </param>
        <param>
          <key>ref_level</key>
          <value>-30</value>
        </param>
        <param>
          <key>ref_scale</key>
          <value>2.0</value>
        </param>
        <param>
          <key>fft_rate</key>
          <value>15</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>samp_rate</value>
        </param>
        <param>
          <key>title</key>
          <value>Baseband</value>
        </param>
        <param>
          <key>type</key>
          <value>complex</value>
        </param>
        <param>
          <key>win_size</key>
          <value></value>
        </param>
        <param>
          <key>win</key>
          <value>None</value>
        </param>
        <param>
          <key>y_divs</key>
          <value>10</value>
        </param>
        <param>
          <key>y_per_div</key>
          <value>10</value>
        </param>
      </block>
      <block>
        <key>wxgui_fftsink2</key>
        <param>
          <key>avg_alpha</key>
          <value>0.8</value>
        </param>
        <param>
          <key>average</key>
          <value>True</value>
        </param>
        <param>
          <key>baseband_freq</key>
          <value>0</value>
        </param>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>fft_size</key>
          <value>1024</value>
        </param>
        <param>
          <key>freqvar</key>
          <value>None</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(1056, 280)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>wxgui_fftsink2_0_0</value>
        </param>
        <param>
          <key>notebook</key>
          <value>nb, 1</value>
        </param>
        <param>
          <key>peak_hold</key>
          <value>False</value>
        </param>
        <param>
          <key>ref_level</key>
          <value>0</value>
        </param>
        <param>
          <key>ref_scale</key>
          <value>2.0</value>
        </param>
        <param>
          <key>fft_rate</key>
          <value>15</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>baseband_rate</value>
        </param>
        <param>
          <key>title</key>
          <value>FM Demod</value>
        </param>
        <param>
          <key>type</key>
          <value>float</value>
        </param>
        <param>
          <key>win_size</key>
          <value></value>
        </param>
        <param>
          <key>win</key>
          <value>None</value>
        </param>
        <param>
          <key>y_divs</key>
          <value>10</value>
        </param>
        <param>
          <key>y_per_div</key>
          <value>10</value>
        </param>
      </block>
      <block>
        <key>wxgui_scopesink2</key>
        <param>
          <key>ac_couple</key>
          <value>False</value>
        </param>
        <param>
          <key>alias</key>
          <value></value>
        </param>
        <param>
          <key>comment</key>
          <value></value>
        </param>
        <param>
          <key>affinity</key>
          <value></value>
        </param>
        <param>
          <key>_enabled</key>
          <value>True</value>
        </param>
        <param>
          <key>_coordinate</key>
          <value>(1056, 500)</value>
        </param>
        <param>
          <key>_rotation</key>
          <value>0</value>
        </param>
        <param>
          <key>grid_pos</key>
          <value></value>
        </param>
        <param>
          <key>id</key>
          <value>wxgui_scopesink2_1</value>
        </param>
        <param>
          <key>notebook</key>
          <value>nb,7</value>
        </param>
        <param>
          <key>num_inputs</key>
          <value>1</value>
        </param>
        <param>
          <key>samp_rate</key>
          <value>2375</value>
        </param>
        <param>
          <key>t_scale</key>
          <value>0</value>
        </param>
        <param>
          <key>title</key>
          <value>Scope Plot</value>
        </param>
        <param>
          <key>trig_mode</key>
          <value>wxgui.TRIG_MODE_AUTO</value>
        </param>
        <param>
          <key>type</key>
          <value>complex</value>
        </param>
        <param>
          <key>v_offset</key>
          <value>0</value>
        </param>
        <param>
          <key>v_scale</key>
          <value>0.4</value>
        </param>
        <param>
          <key>win_size</key>
          <value></value>
        </param>
        <param>
          <key>xy_mode</key>
          <value>True</value>
        </param>
        <param>
          <key>y_axis_label</key>
          <value>Counts</value>
        </param>
      </block>
      <connection>
        <source_block_id>analog_wfm_rcv_0</source_block_id>
        <sink_block_id>freq_xlating_fir_filter_xxx_1</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>analog_wfm_rcv_0</source_block_id>
        <sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>blocks_complex_to_real_0</source_block_id>
        <sink_block_id>digital_binary_slicer_fb_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>blocks_keep_one_in_n_0</source_block_id>
        <sink_block_id>digital_diff_decoder_bb_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>digital_binary_slicer_fb_0</source_block_id>
        <sink_block_id>blocks_keep_one_in_n_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>digital_diff_decoder_bb_0</source_block_id>
        <sink_block_id>gr_rds_decoder_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>digital_mpsk_receiver_cc_0</source_block_id>
        <sink_block_id>blocks_complex_to_real_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>digital_mpsk_receiver_cc_0</source_block_id>
        <sink_block_id>wxgui_scopesink2_1</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
        <sink_block_id>analog_wfm_rcv_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>freq_xlating_fir_filter_xxx_0</source_block_id>
        <sink_block_id>wxgui_fftsink2_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>freq_xlating_fir_filter_xxx_1</source_block_id>
        <sink_block_id>root_raised_cosine_filter_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>gr_rds_decoder_0</source_block_id>
        <sink_block_id>gr_rds_parser_0</sink_block_id>
        <source_key>out</source_key>
        <sink_key>in</sink_key>
      </connection>
      <connection>
        <source_block_id>gr_rds_parser_0</source_block_id>
        <sink_block_id>gr_rds_panel_0</sink_block_id>
        <source_key>out</source_key>
        <sink_key>in</sink_key>
      </connection>
      <connection>
        <source_block_id>root_raised_cosine_filter_0</source_block_id>
        <sink_block_id>digital_mpsk_receiver_cc_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
      <connection>
        <source_block_id>rtlsdr_source_0</source_block_id>
        <sink_block_id>freq_xlating_fir_filter_xxx_0</sink_block_id>
        <source_key>0</source_key>
        <sink_key>0</sink_key>
      </connection>
    </flow_graph>
    

    Поделиться публикацией

    Похожие публикации

    Комментарии 12

      0
      Позвольте крепко пожать вашу виртуальную руку за настойчивое рассмотрение данной несомненно интересной темы.
      Один из предыдущих китайских приёмников на кухне хорошо ловил переговоры пилотов, что отмечалось в одной из предыдущих статей. Нынешний только перегревается на солнце и весьма плавает частотой, что есть печально.
      Задача: SDR usb свисток плюс простейший китайский приёмник (сейчас почти везде есть usb). Востребована прошивка для свистка (или приёмника), могущая обеспечить взаимную функциональность — sdr принимает, другое китайское чудо воспроизводит.
      Рекомендации?
        +1
        Спасибо. Пока тема кому-то интересна и количество просмотров не упало до нуля, почему бы не продолжить.

        Насчет авиадиапазона, можно запустить SDR-свисток на Raspberry Pi и вывести звук через USB-карту на другой приемник, но имхо будет слишком громоздко, проще новый приемник купить. Я в китайских приемниках совсем не разбираюсь, так что ничего посоветовать не могу. Отзывы поищите например на radioscanner.
        На самом свистке прошивку поменять невозможно, там в чипе все жестко закодировано.
          0
          Имелась в виду прошивка для свистка, которая заставит его принимать заданный диапазон, необязательно авиа, типа плейлиста для медиаплеера, и отдавать в виде файла для приёмника через usb/SD.
          Разнообразные поделки на тему интернет-радио пока не радуют обоснованностью цены, проще старый системник поставить для приёма плейлиста.
          Существуют (теоретически) SD wi-fi карты, возможно, они способны отдать заданный поток приёмнику (в большинстве сейчас присутствуют usb/SD). Если есть владельцы, отзовитесь, пожалуйста.
          Как вариант, fm-трансмиттер.
          Но кастомная прошивка SDR свистка или приёмника могла бы помочь горюшку без пложения сущностей.

          По существу: в Австралии в RDS вещают дифпоправку для gps. Мелочь, но полезно…
            +1
            Имелась в виду прошивка для свистка, которая заставит его принимать заданный диапазон
            В сам свисток прошивку залить нельзя, только если прикрутить к нему мини-компьютер типа Raspberry Pi.
              0
              rtl-sdr принимают в диапазоне от 24МГц до ~1.5ГГц. Насколько я помню, авиадиапазон — это 108-136МГц, так что чего-то дополнительного из железа, кроме rtlsdr-свистка подходящей антенны не потребуется и весь приём будет программным.
              Можно извратиться примерно так:
              1) сделать приём на RPi(или другой комп)+rtlsdr звука
              2) транслировать звук в сеть при помощи vlc и какой-то матери
              3) принимать транслированное тем же vlc или любым другим плеером, умеющим нужный формат/битрейт.

              Дальнейшие извращения — использование RPi как fm-передатчика для потока, но это уже отдельная тема, которую на хабре, помнится, обсуждали несколько лет назад.
          +2
          Лучше конечно всё это крутить под линукс (дебиан или убунту), там все нормально собирается. С виндами все топорно! А так gnu-radio хорош, еще много тем не раскрыто. Есть интересные фичи с LimeSDR & HackRF
            0
            Спасибо за статью! Приятно, что мое предложение о теме статьи оказалось неплохим)) Если что, насчет boost, у них там для нового релиза 3.8 столько всего, в том числе и boost 1.7x. Может тогда все заработает…
            Но вообще-то, скорее всего вы взяли не тот форк. Нужно было вот этот. Она от разраба gnu radio.
            github.com/bastibl/gr-rds
            Он уже поддерживает Gnu radio 3.8 (да-да, она еще не вышла даже))
              0
              Да, бета Gnu Radio 3.8 уже существует, хотя не знаю, выкладывали они её или нет.

              Но проблема с компиляцией под Windows в том, что функция find_package из cmake не находит Boost.

              Соответственно, компиляция останавливается на этом шаге:
              find_package(Boost "1.35" COMPONENTS system)
              if(NOT Boost_FOUND)
                  message(FATAL_ERROR "Boost required to compile gr-rds")
              endif()
              

              GNU Radio тут не при чем.
                0
                github.com/gnuradio/gnuradio/releases/tag/3.8tech-preview

                Скорее всего, собирать под windows предполагается под linux (кросс-компиляция).

                И все же форк не тот… Нужно от bastibl.
                  0
                  Да, кросскомпиляция это возможный вариант.
                  Но поскольку декодер RDS уже встроен в GNU Radio, этот вопрос имеет чисто теоретический интерес (хотя все равно было бы полезно разобраться).

                  По сути, от gr-rds нам нужны только примеры из папки apps, без них было бы не разобраться. Там кстати еще и пример RDS-передачи есть, тоже интересно попробовать.
                    0
                    А вы точно все проверили с stackoverflow? cmake.org/cmake/help/v3.0/module/FindBoost.html
                    set (Boost_DETAILED_FAILURE_MSG ON)
                    set (Boost_THREADAPI win32)
                    set (BOOST_ROOT "/boost_1_40_0")
                    set (Boost_LIBRARY_DIR /boost_1_40_0/lib")
                    set (Boost_COMPILER "-vc")
                    set (Boost_USE_STATIC_RUNTIME ON)
                    set (BOOST_DEBUG ON) #< — Real life saver

                    cmake --help-module FindBoost

                    И вообще собирать для windows под windows что-то с boost это не очень… Все linux используют))
                      0
                      Спасибо, я пробовал указывать BOOST_ROOT и Boost_LIBRARY_DIR, дальше после нескольких попыток забил. Если будет не лень, попробую потом еще раз.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое