Привет, Хабр.
В предыдущей части было рассмотрено декодирование сигналов RDS для FM-радиостанций, и идея следующей статьи возникла сама собой — нужно сделать свой собственный FM-трансмиттер.
Вариантов будет два — простой, и более сложный, с RDS.
Как и в предыдущих случаях, сделаем мы все это в GNU Radio, не написав ни одной строчки кода. Для тех кому интересно, продолжение под катом.
Итак, приступим. Разумеется, для тестов нам понадобится SDR с возможностью передачи (HackRF, USRP, LimeSDR).
Схема простого трансмиттера делается практически в два клика, и надеюсь, никаких сложностей в понимании не представляет. В качестве источника я использую WAV-file, хотя при желании можно использовать и другой источник, например вход звуковой карты.
Собственно, ключевых блоков в этой схеме два — WBFM-трансмиттер и Resampler, преобразующий частоту дискретизации потока. Все значения частоты дискретизации должны соответствовать друг другу, иначе будет пропуск семплов, что на слух будет слышно как щелчки. Блок Multiply Const используется для регулировки входного уровня. Также важно не перепутать, в GNU Radio есть два разных блока для FM — WBFM и NBFM. Нам нужен именно первый, Wide Band FM. Модуляция NFM используется для портативных радиостанций.
В общем, все просто, запускаем, работает. Никаких UI-блоков в схеме нет, так что использовать ее можно и из командной строки (подробнее в 4й части).
Кстати, если посмотреть спектр, то можно убедиться, что передается простой моно сигнал, без каких-либо каналов, пилот-тонов и прочего.
Пора перейти к более сложному варианту.
Схема передатчика с RDS будет разумеется, посложнее. Ее оригинал был взят из примеров gr-rds с небольшими изменениями (оригинальная версия под Windows не заработала, «правильная» версия внизу статьи), рассмотрим, из каких компонентов она состоит.
(оригинал в полном разрешении)
Верхяя треть схемы — это передача RDS. На входе имеется RDS-энкодер, который исходя из имеющихся данных (имя станции, код страны и пр) формирует RDS-пакеты. Затем битовый поток подвергается дифференциальному кодированию, идея которого — убрать повторяющиеся последовательности вида 001000001. Затем сигнал обрабатывается, и им модулируется «несущая» на 57КГц. Центральная часть — создание звука. Тут формируются каналы L+R и L-R. Снизу в качестве источника звука указан WAV-файл. И наконец, блок Add складывает все это вместе, также к сигналу добавляется пилот-тон на 19КГц и второй тон на 38КГц. Весь этот суммарный сигнал отправляется на частотный модулятор, все это с помощью SDR отправляется в эфир.
По идее, эта схема не является 100% полной, например нет блока предыскажений, фазы тонов на 19, 38 и 57КГц не синхронизированы. С другой стороны, для понимания того, как вообще звук передается в эфир, такой схемы вполне достаточно, желающие могут доработать ее самостоятельно.
При запуске открывается окно, часть параметров можно менять.
Было желание протестировать RDS с реальным приемником, но оказалось что FM-радио — это уже атавизм, и у меня дома его нет. Даже в смартфоне последней модели оно тоже отсутствует. Так что пришлось использовать RTL-SDR V3 и GQRX в качестве контрольного приемника, результат на КДПВ.
Разумеется, перед тестированием необходимо выбрать свободную частоту, чтобы на ней не было станций, ну и желательно не превышать разрешенную мощность. Для тех же, кто захочет получить максимум дальностиможно докупить усилитель, желательно сделать антенну на нужную частоту, чтобы был хотя бы диполь 1/4 длины волны.
Как можно видеть, в передаче FM-радио в принципе, нет ничего сверхсложного, все вполне реализуемо в GNU Radio (хотя без наличия примеров повторить такое было бы непросто, учитывая что система не документирована вообще никак). Ну теперь, по крайней мере, работающий пример у читателей есть.
Исходные коды блоков под спойлером.
И как обычно, всем удачных экспериментов. И не создавайте помехи другим радиостанциям.
В предыдущей части было рассмотрено декодирование сигналов RDS для FM-радиостанций, и идея следующей статьи возникла сама собой — нужно сделать свой собственный FM-трансмиттер.
Вариантов будет два — простой, и более сложный, с RDS.
Как и в предыдущих случаях, сделаем мы все это в GNU Radio, не написав ни одной строчки кода. Для тех кому интересно, продолжение под катом.
Итак, приступим. Разумеется, для тестов нам понадобится SDR с возможностью передачи (HackRF, USRP, LimeSDR).
FM трансмиттер
Схема простого трансмиттера делается практически в два клика, и надеюсь, никаких сложностей в понимании не представляет. В качестве источника я использую WAV-file, хотя при желании можно использовать и другой источник, например вход звуковой карты.
Собственно, ключевых блоков в этой схеме два — WBFM-трансмиттер и Resampler, преобразующий частоту дискретизации потока. Все значения частоты дискретизации должны соответствовать друг другу, иначе будет пропуск семплов, что на слух будет слышно как щелчки. Блок Multiply Const используется для регулировки входного уровня. Также важно не перепутать, в GNU Radio есть два разных блока для FM — WBFM и NBFM. Нам нужен именно первый, Wide Band FM. Модуляция NFM используется для портативных радиостанций.
В общем, все просто, запускаем, работает. Никаких UI-блоков в схеме нет, так что использовать ее можно и из командной строки (подробнее в 4й части).
Кстати, если посмотреть спектр, то можно убедиться, что передается простой моно сигнал, без каких-либо каналов, пилот-тонов и прочего.
Пора перейти к более сложному варианту.
Трансмиттер с RDS
Схема передатчика с RDS будет разумеется, посложнее. Ее оригинал был взят из примеров gr-rds с небольшими изменениями (оригинальная версия под Windows не заработала, «правильная» версия внизу статьи), рассмотрим, из каких компонентов она состоит.
(оригинал в полном разрешении)
Верхяя треть схемы — это передача RDS. На входе имеется RDS-энкодер, который исходя из имеющихся данных (имя станции, код страны и пр) формирует RDS-пакеты. Затем битовый поток подвергается дифференциальному кодированию, идея которого — убрать повторяющиеся последовательности вида 001000001. Затем сигнал обрабатывается, и им модулируется «несущая» на 57КГц. Центральная часть — создание звука. Тут формируются каналы L+R и L-R. Снизу в качестве источника звука указан WAV-файл. И наконец, блок Add складывает все это вместе, также к сигналу добавляется пилот-тон на 19КГц и второй тон на 38КГц. Весь этот суммарный сигнал отправляется на частотный модулятор, все это с помощью SDR отправляется в эфир.
По идее, эта схема не является 100% полной, например нет блока предыскажений, фазы тонов на 19, 38 и 57КГц не синхронизированы. С другой стороны, для понимания того, как вообще звук передается в эфир, такой схемы вполне достаточно, желающие могут доработать ее самостоятельно.
При запуске открывается окно, часть параметров можно менять.
Было желание протестировать RDS с реальным приемником, но оказалось что FM-радио — это уже атавизм, и у меня дома его нет. Даже в смартфоне последней модели оно тоже отсутствует. Так что пришлось использовать RTL-SDR V3 и GQRX в качестве контрольного приемника, результат на КДПВ.
Разумеется, перед тестированием необходимо выбрать свободную частоту, чтобы на ней не было станций, ну и желательно не превышать разрешенную мощность. Для тех же, кто захочет получить максимум дальности
Заключение
Как можно видеть, в передаче FM-радио в принципе, нет ничего сверхсложного, все вполне реализуемо в GNU Radio (хотя без наличия примеров повторить такое было бы непросто, учитывая что система не документирована вообще никак). Ну теперь, по крайней мере, работающий пример у читателей есть.
Исходные коды блоков под спойлером.
fm_tx.grc
<?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Tue Jun 18 20:27:26 2019</timestamp>
<block>
<key>options</key>
<param>
<key>author</key>
<value></value>
</param>
<param>
<key>window_size</key>
<value></value>
</param>
<param>
<key>category</key>
<value>[GRC Hier Blocks]</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>(16, 20)</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>top_block</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></value>
</param>
</block>
<block>
<key>analog_wfm_tx</key>
<param>
<key>audio_rate</key>
<value>80000</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>(592, 76)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>analog_wfm_tx_0</value>
</param>
<param>
<key>max_dev</key>
<value>75e3</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>fh</key>
<value>-1.0</value>
</param>
<param>
<key>quad_rate</key>
<value>320000</value>
</param>
<param>
<key>tau</key>
<value>75e-6</value>
</param>
</block>
<block>
<key>blocks_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>0.45</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(248, 108)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0</value>
</param>
<param>
<key>type</key>
<value>float</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_wavfile_source</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>file</key>
<value>D:\MyProjects\GNURadio\sound.wav</value>
</param>
<param>
<key>_coordinate</key>
<value>(24, 100)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_wavfile_source_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>nchan</key>
<value>1</value>
</param>
<param>
<key>repeat</key>
<value>True</value>
</param>
</block>
<block>
<key>rational_resampler_xxx</key>
<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>3</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>fbw</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(408, 84)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>rational_resampler_xxx_0</value>
</param>
<param>
<key>interp</key>
<value>5</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>taps</key>
<value></value>
</param>
<param>
<key>type</key>
<value>fff</value>
</param>
</block>
<block>
<key>uhd_usrp_sink</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>ant0</key>
<value></value>
</param>
<param>
<key>bw0</key>
<value>0</value>
</param>
<param>
<key>center_freq0</key>
<value>95.6e6</value>
</param>
<param>
<key>norm_gain0</key>
<value>False</value>
</param>
<param>
<key>gain0</key>
<value>30</value>
</param>
<param>
<key>ant10</key>
<value></value>
</param>
<param>
<key>bw10</key>
<value>0</value>
</param>
<param>
<key>center_freq10</key>
<value>0</value>
</param>
<param>
<key>norm_gain10</key>
<value>False</value>
</param>
<param>
<key>gain10</key>
<value>0</value>
</param>
<param>
<key>ant11</key>
<value></value>
</param>
<param>
<key>bw11</key>
<value>0</value>
</param>
<param>
<key>center_freq11</key>
<value>0</value>
</param>
<param>
<key>norm_gain11</key>
<value>False</value>
</param>
<param>
<key>gain11</key>
<value>0</value>
</param>
<param>
<key>ant12</key>
<value></value>
</param>
<param>
<key>bw12</key>
<value>0</value>
</param>
<param>
<key>center_freq12</key>
<value>0</value>
</param>
<param>
<key>norm_gain12</key>
<value>False</value>
</param>
<param>
<key>gain12</key>
<value>0</value>
</param>
<param>
<key>ant13</key>
<value></value>
</param>
<param>
<key>bw13</key>
<value>0</value>
</param>
<param>
<key>center_freq13</key>
<value>0</value>
</param>
<param>
<key>norm_gain13</key>
<value>False</value>
</param>
<param>
<key>gain13</key>
<value>0</value>
</param>
<param>
<key>ant14</key>
<value></value>
</param>
<param>
<key>bw14</key>
<value>0</value>
</param>
<param>
<key>center_freq14</key>
<value>0</value>
</param>
<param>
<key>norm_gain14</key>
<value>False</value>
</param>
<param>
<key>gain14</key>
<value>0</value>
</param>
<param>
<key>ant15</key>
<value></value>
</param>
<param>
<key>bw15</key>
<value>0</value>
</param>
<param>
<key>center_freq15</key>
<value>0</value>
</param>
<param>
<key>norm_gain15</key>
<value>False</value>
</param>
<param>
<key>gain15</key>
<value>0</value>
</param>
<param>
<key>ant16</key>
<value></value>
</param>
<param>
<key>bw16</key>
<value>0</value>
</param>
<param>
<key>center_freq16</key>
<value>0</value>
</param>
<param>
<key>norm_gain16</key>
<value>False</value>
</param>
<param>
<key>gain16</key>
<value>0</value>
</param>
<param>
<key>ant17</key>
<value></value>
</param>
<param>
<key>bw17</key>
<value>0</value>
</param>
<param>
<key>center_freq17</key>
<value>0</value>
</param>
<param>
<key>norm_gain17</key>
<value>False</value>
</param>
<param>
<key>gain17</key>
<value>0</value>
</param>
<param>
<key>ant18</key>
<value></value>
</param>
<param>
<key>bw18</key>
<value>0</value>
</param>
<param>
<key>center_freq18</key>
<value>0</value>
</param>
<param>
<key>norm_gain18</key>
<value>False</value>
</param>
<param>
<key>gain18</key>
<value>0</value>
</param>
<param>
<key>ant19</key>
<value></value>
</param>
<param>
<key>bw19</key>
<value>0</value>
</param>
<param>
<key>center_freq19</key>
<value>0</value>
</param>
<param>
<key>norm_gain19</key>
<value>False</value>
</param>
<param>
<key>gain19</key>
<value>0</value>
</param>
<param>
<key>ant1</key>
<value></value>
</param>
<param>
<key>bw1</key>
<value>0</value>
</param>
<param>
<key>center_freq1</key>
<value>0</value>
</param>
<param>
<key>norm_gain1</key>
<value>False</value>
</param>
<param>
<key>gain1</key>
<value>0</value>
</param>
<param>
<key>ant20</key>
<value></value>
</param>
<param>
<key>bw20</key>
<value>0</value>
</param>
<param>
<key>center_freq20</key>
<value>0</value>
</param>
<param>
<key>norm_gain20</key>
<value>False</value>
</param>
<param>
<key>gain20</key>
<value>0</value>
</param>
<param>
<key>ant21</key>
<value></value>
</param>
<param>
<key>bw21</key>
<value>0</value>
</param>
<param>
<key>center_freq21</key>
<value>0</value>
</param>
<param>
<key>norm_gain21</key>
<value>False</value>
</param>
<param>
<key>gain21</key>
<value>0</value>
</param>
<param>
<key>ant22</key>
<value></value>
</param>
<param>
<key>bw22</key>
<value>0</value>
</param>
<param>
<key>center_freq22</key>
<value>0</value>
</param>
<param>
<key>norm_gain22</key>
<value>False</value>
</param>
<param>
<key>gain22</key>
<value>0</value>
</param>
<param>
<key>ant23</key>
<value></value>
</param>
<param>
<key>bw23</key>
<value>0</value>
</param>
<param>
<key>center_freq23</key>
<value>0</value>
</param>
<param>
<key>norm_gain23</key>
<value>False</value>
</param>
<param>
<key>gain23</key>
<value>0</value>
</param>
<param>
<key>ant24</key>
<value></value>
</param>
<param>
<key>bw24</key>
<value>0</value>
</param>
<param>
<key>center_freq24</key>
<value>0</value>
</param>
<param>
<key>norm_gain24</key>
<value>False</value>
</param>
<param>
<key>gain24</key>
<value>0</value>
</param>
<param>
<key>ant25</key>
<value></value>
</param>
<param>
<key>bw25</key>
<value>0</value>
</param>
<param>
<key>center_freq25</key>
<value>0</value>
</param>
<param>
<key>norm_gain25</key>
<value>False</value>
</param>
<param>
<key>gain25</key>
<value>0</value>
</param>
<param>
<key>ant26</key>
<value></value>
</param>
<param>
<key>bw26</key>
<value>0</value>
</param>
<param>
<key>center_freq26</key>
<value>0</value>
</param>
<param>
<key>norm_gain26</key>
<value>False</value>
</param>
<param>
<key>gain26</key>
<value>0</value>
</param>
<param>
<key>ant27</key>
<value></value>
</param>
<param>
<key>bw27</key>
<value>0</value>
</param>
<param>
<key>center_freq27</key>
<value>0</value>
</param>
<param>
<key>norm_gain27</key>
<value>False</value>
</param>
<param>
<key>gain27</key>
<value>0</value>
</param>
<param>
<key>ant28</key>
<value></value>
</param>
<param>
<key>bw28</key>
<value>0</value>
</param>
<param>
<key>center_freq28</key>
<value>0</value>
</param>
<param>
<key>norm_gain28</key>
<value>False</value>
</param>
<param>
<key>gain28</key>
<value>0</value>
</param>
<param>
<key>ant29</key>
<value></value>
</param>
<param>
<key>bw29</key>
<value>0</value>
</param>
<param>
<key>center_freq29</key>
<value>0</value>
</param>
<param>
<key>norm_gain29</key>
<value>False</value>
</param>
<param>
<key>gain29</key>
<value>0</value>
</param>
<param>
<key>ant2</key>
<value></value>
</param>
<param>
<key>bw2</key>
<value>0</value>
</param>
<param>
<key>center_freq2</key>
<value>0</value>
</param>
<param>
<key>norm_gain2</key>
<value>False</value>
</param>
<param>
<key>gain2</key>
<value>0</value>
</param>
<param>
<key>ant30</key>
<value></value>
</param>
<param>
<key>bw30</key>
<value>0</value>
</param>
<param>
<key>center_freq30</key>
<value>0</value>
</param>
<param>
<key>norm_gain30</key>
<value>False</value>
</param>
<param>
<key>gain30</key>
<value>0</value>
</param>
<param>
<key>ant31</key>
<value></value>
</param>
<param>
<key>bw31</key>
<value>0</value>
</param>
<param>
<key>center_freq31</key>
<value>0</value>
</param>
<param>
<key>norm_gain31</key>
<value>False</value>
</param>
<param>
<key>gain31</key>
<value>0</value>
</param>
<param>
<key>ant3</key>
<value></value>
</param>
<param>
<key>bw3</key>
<value>0</value>
</param>
<param>
<key>center_freq3</key>
<value>0</value>
</param>
<param>
<key>norm_gain3</key>
<value>False</value>
</param>
<param>
<key>gain3</key>
<value>0</value>
</param>
<param>
<key>ant4</key>
<value></value>
</param>
<param>
<key>bw4</key>
<value>0</value>
</param>
<param>
<key>center_freq4</key>
<value>0</value>
</param>
<param>
<key>norm_gain4</key>
<value>False</value>
</param>
<param>
<key>gain4</key>
<value>0</value>
</param>
<param>
<key>ant5</key>
<value></value>
</param>
<param>
<key>bw5</key>
<value>0</value>
</param>
<param>
<key>center_freq5</key>
<value>0</value>
</param>
<param>
<key>norm_gain5</key>
<value>False</value>
</param>
<param>
<key>gain5</key>
<value>0</value>
</param>
<param>
<key>ant6</key>
<value></value>
</param>
<param>
<key>bw6</key>
<value>0</value>
</param>
<param>
<key>center_freq6</key>
<value>0</value>
</param>
<param>
<key>norm_gain6</key>
<value>False</value>
</param>
<param>
<key>gain6</key>
<value>0</value>
</param>
<param>
<key>ant7</key>
<value></value>
</param>
<param>
<key>bw7</key>
<value>0</value>
</param>
<param>
<key>center_freq7</key>
<value>0</value>
</param>
<param>
<key>norm_gain7</key>
<value>False</value>
</param>
<param>
<key>gain7</key>
<value>0</value>
</param>
<param>
<key>ant8</key>
<value></value>
</param>
<param>
<key>bw8</key>
<value>0</value>
</param>
<param>
<key>center_freq8</key>
<value>0</value>
</param>
<param>
<key>norm_gain8</key>
<value>False</value>
</param>
<param>
<key>gain8</key>
<value>0</value>
</param>
<param>
<key>ant9</key>
<value></value>
</param>
<param>
<key>bw9</key>
<value>0</value>
</param>
<param>
<key>center_freq9</key>
<value>0</value>
</param>
<param>
<key>norm_gain9</key>
<value>False</value>
</param>
<param>
<key>gain9</key>
<value>0</value>
</param>
<param>
<key>clock_rate</key>
<value>0.0</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>dev_addr</key>
<value>""</value>
</param>
<param>
<key>dev_args</key>
<value>""</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(848, 68)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>uhd_usrp_sink_0</value>
</param>
<param>
<key>type</key>
<value>fc32</value>
</param>
<param>
<key>clock_source0</key>
<value></value>
</param>
<param>
<key>sd_spec0</key>
<value></value>
</param>
<param>
<key>time_source0</key>
<value></value>
</param>
<param>
<key>clock_source1</key>
<value></value>
</param>
<param>
<key>sd_spec1</key>
<value></value>
</param>
<param>
<key>time_source1</key>
<value></value>
</param>
<param>
<key>clock_source2</key>
<value></value>
</param>
<param>
<key>sd_spec2</key>
<value></value>
</param>
<param>
<key>time_source2</key>
<value></value>
</param>
<param>
<key>clock_source3</key>
<value></value>
</param>
<param>
<key>sd_spec3</key>
<value></value>
</param>
<param>
<key>time_source3</key>
<value></value>
</param>
<param>
<key>clock_source4</key>
<value></value>
</param>
<param>
<key>sd_spec4</key>
<value></value>
</param>
<param>
<key>time_source4</key>
<value></value>
</param>
<param>
<key>clock_source5</key>
<value></value>
</param>
<param>
<key>sd_spec5</key>
<value></value>
</param>
<param>
<key>time_source5</key>
<value></value>
</param>
<param>
<key>clock_source6</key>
<value></value>
</param>
<param>
<key>sd_spec6</key>
<value></value>
</param>
<param>
<key>time_source6</key>
<value></value>
</param>
<param>
<key>clock_source7</key>
<value></value>
</param>
<param>
<key>sd_spec7</key>
<value></value>
</param>
<param>
<key>time_source7</key>
<value></value>
</param>
<param>
<key>nchan</key>
<value>1</value>
</param>
<param>
<key>num_mboards</key>
<value>1</value>
</param>
<param>
<key>samp_rate</key>
<value>320000</value>
</param>
<param>
<key>hide_cmd_port</key>
<value>False</value>
</param>
<param>
<key>hide_lo_controls</key>
<value>True</value>
</param>
<param>
<key>stream_args</key>
<value></value>
</param>
<param>
<key>stream_chans</key>
<value>[]</value>
</param>
<param>
<key>sync</key>
<value></value>
</param>
<param>
<key>len_tag_name</key>
<value></value>
</param>
<param>
<key>otw</key>
<value></value>
</param>
</block>
<connection>
<source_block_id>analog_wfm_tx_0</source_block_id>
<sink_block_id>uhd_usrp_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
<sink_block_id>rational_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_wavfile_source_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_0</source_block_id>
<sink_block_id>analog_wfm_tx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
</flow_graph>
fm_tx_rds.grc
<?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.11'?>
<flow_graph>
<timestamp>Thu Aug 28 08:28:15 2014</timestamp>
<block>
<key>options</key>
<param>
<key>author</key>
<value></value>
</param>
<param>
<key>window_size</key>
<value>1600, 2048</value>
</param>
<param>
<key>category</key>
<value>RDS</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>(104, 4)</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_tx</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></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>(352, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>data_rate</value>
</param>
<param>
<key>value</key>
<value>380000</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>(440, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>fm_max_dev</value>
</param>
<param>
<key>value</key>
<value>80e3</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>(264, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>freq</value>
</param>
<param>
<key>value</key>
<value>95.6e6</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>.75</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(544, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>input_gain</value>
</param>
<param>
<key>label</key>
<value></value>
</param>
<param>
<key>max</key>
<value>10</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_steps</key>
<value>100</value>
</param>
<param>
<key>style</key>
<value>wx.SL_HORIZONTAL</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>.09</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(928, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>pilot_gain</value>
</param>
<param>
<key>label</key>
<value></value>
</param>
<param>
<key>max</key>
<value>3</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_steps</key>
<value>100</value>
</param>
<param>
<key>style</key>
<value>wx.SL_HORIZONTAL</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>.05</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(800, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>rds_gain</value>
</param>
<param>
<key>label</key>
<value></value>
</param>
<param>
<key>max</key>
<value>3</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_steps</key>
<value>100</value>
</param>
<param>
<key>style</key>
<value>wx.SL_HORIZONTAL</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>.45</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(672, 4)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>grid_pos</key>
<value></value>
</param>
<param>
<key>id</key>
<value>stereo_gain</value>
</param>
<param>
<key>label</key>
<value></value>
</param>
<param>
<key>max</key>
<value>3</value>
</param>
<param>
<key>min</key>
<value>0</value>
</param>
<param>
<key>notebook</key>
<value></value>
</param>
<param>
<key>num_steps</key>
<value>100</value>
</param>
<param>
<key>style</key>
<value>wx.SL_HORIZONTAL</value>
</param>
</block>
<block>
<key>blocks_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>input_gain</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(392, 764)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0</value>
</param>
<param>
<key>type</key>
<value>float</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_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>rds_gain</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(948, 432)</value>
</param>
<param>
<key>_rotation</key>
<value>270</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0_0</value>
</param>
<param>
<key>type</key>
<value>float</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_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>pilot_gain</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(200, 300)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0_0_1</value>
</param>
<param>
<key>type</key>
<value>float</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_multiply_const_vxx</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>const</key>
<value>input_gain</value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
<value>(400, 812)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_multiply_const_vxx_0_1</value>
</param>
<param>
<key>type</key>
<value>float</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_repeat</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(1080, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_repeat_0</value>
</param>
<param>
<key>interp</key>
<value>160</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_socket_pdu</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(24, 148)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>host</key>
<value></value>
</param>
<param>
<key>id</key>
<value>blocks_socket_pdu_0</value>
</param>
<param>
<key>mtu</key>
<value>10000</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>port</key>
<value>52001</value>
</param>
<param>
<key>tcp_no_delay</key>
<value>False</value>
</param>
<param>
<key>type</key>
<value>"TCP_SERVER"</value>
</param>
</block>
<block>
<key>blocks_throttle</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>(232, 764)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_throttle_1</value>
</param>
<param>
<key>ignoretag</key>
<value>True</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>samples_per_second</key>
<value>48000</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_throttle</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>(240, 812)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_throttle_2</value>
</param>
<param>
<key>ignoretag</key>
<value>True</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>samples_per_second</key>
<value>48000</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_wavfile_source</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>1</value>
</param>
<param>
<key>file</key>
<value>D:\MyProjects\GNURadio\sound.wav</value>
</param>
<param>
<key>_coordinate</key>
<value>(16, 768)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>blocks_wavfile_source_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>nchan</key>
<value>2</value>
</param>
<param>
<key>repeat</key>
<value>True</value>
</param>
</block>
<block>
<key>blocks_add_xx</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>(472, 552)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_add_xx_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_add_xx</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>(840, 640)</value>
</param>
<param>
<key>_rotation</key>
<value>270</value>
</param>
<param>
<key>id</key>
<value>gr_add_xx_1</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>4</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_char_to_float</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(944, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_char_to_float_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>scale</key>
<value>1</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>digital_diff_encoder_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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(400, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_diff_encoder_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>analog_frequency_modulator_fc</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>(944, 764)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_frequency_modulator_fc_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>sensitivity</key>
<value>2*math.pi*fm_max_dev/data_rate</value>
</param>
</block>
<block>
<key>digital_map_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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(824, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_map_bb_0</value>
</param>
<param>
<key>map</key>
<value>[-1,1]</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
</block>
<block>
<key>digital_map_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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(576, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_map_bb_1</value>
</param>
<param>
<key>map</key>
<value>[1,2]</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
</block>
<block>
<key>blocks_multiply_xx</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(1432, 232)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_multiply_xx_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_multiply_xx</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>(768, 360)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_multiply_xx_1</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>gr_rds_encoder</key>
<param>
<key>af1</key>
<value>89.8e6</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(160, 96)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_rds_encoder_0</value>
</param>
<param>
<key>ms</key>
<value>True</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>pi_country_code</key>
<value>13</value>
</param>
<param>
<key>pi_coverage_area</key>
<value>0</value>
</param>
<param>
<key>pi_reference_number</key>
<value>147</value>
</param>
<param>
<key>ps</key>
<value>SDRRADIO</value>
</param>
<param>
<key>pty_locale</key>
<value>0</value>
</param>
<param>
<key>pty</key>
<value>0</value>
</param>
<param>
<key>radiotext</key>
<value>Hello HABR!</value>
</param>
<param>
<key>ta</key>
<value>False</value>
</param>
<param>
<key>tp</key>
<value>True</value>
</param>
</block>
<block>
<key>analog_sig_source_x</key>
<param>
<key>amp</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>_enabled</key>
<value>True</value>
</param>
<param>
<key>freq</key>
<value>38e3</value>
</param>
<param>
<key>_coordinate</key>
<value>(24, 372)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_sig_source_x_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>offset</key>
<value>0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>waveform</key>
<value>analog.GR_SIN_WAVE</value>
</param>
</block>
<block>
<key>analog_sig_source_x</key>
<param>
<key>amp</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>_enabled</key>
<value>1</value>
</param>
<param>
<key>freq</key>
<value>57e3</value>
</param>
<param>
<key>_coordinate</key>
<value>(1264, 100)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_sig_source_x_0_0</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>offset</key>
<value>0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>waveform</key>
<value>analog.GR_SIN_WAVE</value>
</param>
</block>
<block>
<key>analog_sig_source_x</key>
<param>
<key>amp</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>_enabled</key>
<value>True</value>
</param>
<param>
<key>freq</key>
<value>19e3</value>
</param>
<param>
<key>_coordinate</key>
<value>(24, 268)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_sig_source_x_0_1</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>offset</key>
<value>0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>waveform</key>
<value>analog.GR_SIN_WAVE</value>
</param>
</block>
<block>
<key>blocks_sub_xx</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>(448, 456)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_sub_xx_0</value>
</param>
<param>
<key>type</key>
<value>float</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>num_inputs</key>
<value>2</value>
</param>
<param>
<key>vlen</key>
<value>1</value>
</param>
</block>
<block>
<key>blocks_unpack_k_bits_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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(680, 172)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>gr_unpack_k_bits_bb_0</value>
</param>
<param>
<key>k</key>
<value>2</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</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>(8, 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>low_pass_filter</key>
<param>
<key>beta</key>
<value>6.76</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>cutoff_freq</key>
<value>2.5e3</value>
</param>
<param>
<key>decim</key>
<value>1</value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>type</key>
<value>interp_fir_filter_fff</value>
</param>
<param>
<key>_coordinate</key>
<value>(1248, 212)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>gain</key>
<value>1</value>
</param>
<param>
<key>id</key>
<value>low_pass_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>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>width</key>
<value>.5e3</value>
</param>
<param>
<key>win</key>
<value>firdes.WIN_HAMMING</value>
</param>
</block>
<block>
<key>low_pass_filter</key>
<param>
<key>beta</key>
<value>6.76</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>cutoff_freq</key>
<value>15e3</value>
</param>
<param>
<key>decim</key>
<value>1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>type</key>
<value>interp_fir_filter_fff</value>
</param>
<param>
<key>_coordinate</key>
<value>(584, 532)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>gain</key>
<value>1</value>
</param>
<param>
<key>id</key>
<value>low_pass_filter_0_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>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>width</key>
<value>2e3</value>
</param>
<param>
<key>win</key>
<value>firdes.WIN_HAMMING</value>
</param>
</block>
<block>
<key>low_pass_filter</key>
<param>
<key>beta</key>
<value>6.76</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>cutoff_freq</key>
<value>15e3</value>
</param>
<param>
<key>decim</key>
<value>1</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>type</key>
<value>interp_fir_filter_fff</value>
</param>
<param>
<key>_coordinate</key>
<value>(584, 396)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>gain</key>
<value>1</value>
</param>
<param>
<key>id</key>
<value>low_pass_filter_0_0_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>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>width</key>
<value>2e3</value>
</param>
<param>
<key>win</key>
<value>firdes.WIN_HAMMING</value>
</param>
</block>
<block>
<key>rational_resampler_xxx</key>
<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>6</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>fbw</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(168, 444)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>rational_resampler_xxx_0</value>
</param>
<param>
<key>interp</key>
<value>48</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>taps</key>
<value></value>
</param>
<param>
<key>type</key>
<value>fff</value>
</param>
</block>
<block>
<key>rational_resampler_xxx</key>
<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>6</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
<key>fbw</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(160, 540)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>rational_resampler_xxx_0_0</value>
</param>
<param>
<key>interp</key>
<value>48</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>taps</key>
<value></value>
</param>
<param>
<key>type</key>
<value>fff</value>
</param>
</block>
<block>
<key>rational_resampler_xxx</key>
<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>38</value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>fbw</key>
<value>0</value>
</param>
<param>
<key>_coordinate</key>
<value>(1104, 740)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>rational_resampler_xxx_1</value>
</param>
<param>
<key>interp</key>
<value>50</value>
</param>
<param>
<key>maxoutbuf</key>
<value>0</value>
</param>
<param>
<key>minoutbuf</key>
<value>0</value>
</param>
<param>
<key>taps</key>
<value></value>
</param>
<param>
<key>type</key>
<value>ccc</value>
</param>
</block>
<block>
<key>uhd_usrp_sink</key>
<param>
<key>alias</key>
<value></value>
</param>
<param>
<key>ant0</key>
<value>TX/RX</value>
</param>
<param>
<key>bw0</key>
<value>0</value>
</param>
<param>
<key>center_freq0</key>
<value>freq</value>
</param>
<param>
<key>norm_gain0</key>
<value>False</value>
</param>
<param>
<key>gain0</key>
<value>50</value>
</param>
<param>
<key>ant10</key>
<value></value>
</param>
<param>
<key>bw10</key>
<value>0</value>
</param>
<param>
<key>center_freq10</key>
<value>0</value>
</param>
<param>
<key>norm_gain10</key>
<value>False</value>
</param>
<param>
<key>gain10</key>
<value>0</value>
</param>
<param>
<key>ant11</key>
<value></value>
</param>
<param>
<key>bw11</key>
<value>0</value>
</param>
<param>
<key>center_freq11</key>
<value>0</value>
</param>
<param>
<key>norm_gain11</key>
<value>False</value>
</param>
<param>
<key>gain11</key>
<value>0</value>
</param>
<param>
<key>ant12</key>
<value></value>
</param>
<param>
<key>bw12</key>
<value>0</value>
</param>
<param>
<key>center_freq12</key>
<value>0</value>
</param>
<param>
<key>norm_gain12</key>
<value>False</value>
</param>
<param>
<key>gain12</key>
<value>0</value>
</param>
<param>
<key>ant13</key>
<value></value>
</param>
<param>
<key>bw13</key>
<value>0</value>
</param>
<param>
<key>center_freq13</key>
<value>0</value>
</param>
<param>
<key>norm_gain13</key>
<value>False</value>
</param>
<param>
<key>gain13</key>
<value>0</value>
</param>
<param>
<key>ant14</key>
<value></value>
</param>
<param>
<key>bw14</key>
<value>0</value>
</param>
<param>
<key>center_freq14</key>
<value>0</value>
</param>
<param>
<key>norm_gain14</key>
<value>False</value>
</param>
<param>
<key>gain14</key>
<value>0</value>
</param>
<param>
<key>ant15</key>
<value></value>
</param>
<param>
<key>bw15</key>
<value>0</value>
</param>
<param>
<key>center_freq15</key>
<value>0</value>
</param>
<param>
<key>norm_gain15</key>
<value>False</value>
</param>
<param>
<key>gain15</key>
<value>0</value>
</param>
<param>
<key>ant16</key>
<value></value>
</param>
<param>
<key>bw16</key>
<value>0</value>
</param>
<param>
<key>center_freq16</key>
<value>0</value>
</param>
<param>
<key>norm_gain16</key>
<value>False</value>
</param>
<param>
<key>gain16</key>
<value>0</value>
</param>
<param>
<key>ant17</key>
<value></value>
</param>
<param>
<key>bw17</key>
<value>0</value>
</param>
<param>
<key>center_freq17</key>
<value>0</value>
</param>
<param>
<key>norm_gain17</key>
<value>False</value>
</param>
<param>
<key>gain17</key>
<value>0</value>
</param>
<param>
<key>ant18</key>
<value></value>
</param>
<param>
<key>bw18</key>
<value>0</value>
</param>
<param>
<key>center_freq18</key>
<value>0</value>
</param>
<param>
<key>norm_gain18</key>
<value>False</value>
</param>
<param>
<key>gain18</key>
<value>0</value>
</param>
<param>
<key>ant19</key>
<value></value>
</param>
<param>
<key>bw19</key>
<value>0</value>
</param>
<param>
<key>center_freq19</key>
<value>0</value>
</param>
<param>
<key>norm_gain19</key>
<value>False</value>
</param>
<param>
<key>gain19</key>
<value>0</value>
</param>
<param>
<key>ant1</key>
<value></value>
</param>
<param>
<key>bw1</key>
<value>0</value>
</param>
<param>
<key>center_freq1</key>
<value>0</value>
</param>
<param>
<key>norm_gain1</key>
<value>False</value>
</param>
<param>
<key>gain1</key>
<value>0</value>
</param>
<param>
<key>ant20</key>
<value></value>
</param>
<param>
<key>bw20</key>
<value>0</value>
</param>
<param>
<key>center_freq20</key>
<value>0</value>
</param>
<param>
<key>norm_gain20</key>
<value>False</value>
</param>
<param>
<key>gain20</key>
<value>0</value>
</param>
<param>
<key>ant21</key>
<value></value>
</param>
<param>
<key>bw21</key>
<value>0</value>
</param>
<param>
<key>center_freq21</key>
<value>0</value>
</param>
<param>
<key>norm_gain21</key>
<value>False</value>
</param>
<param>
<key>gain21</key>
<value>0</value>
</param>
<param>
<key>ant22</key>
<value></value>
</param>
<param>
<key>bw22</key>
<value>0</value>
</param>
<param>
<key>center_freq22</key>
<value>0</value>
</param>
<param>
<key>norm_gain22</key>
<value>False</value>
</param>
<param>
<key>gain22</key>
<value>0</value>
</param>
<param>
<key>ant23</key>
<value></value>
</param>
<param>
<key>bw23</key>
<value>0</value>
</param>
<param>
<key>center_freq23</key>
<value>0</value>
</param>
<param>
<key>norm_gain23</key>
<value>False</value>
</param>
<param>
<key>gain23</key>
<value>0</value>
</param>
<param>
<key>ant24</key>
<value></value>
</param>
<param>
<key>bw24</key>
<value>0</value>
</param>
<param>
<key>center_freq24</key>
<value>0</value>
</param>
<param>
<key>norm_gain24</key>
<value>False</value>
</param>
<param>
<key>gain24</key>
<value>0</value>
</param>
<param>
<key>ant25</key>
<value></value>
</param>
<param>
<key>bw25</key>
<value>0</value>
</param>
<param>
<key>center_freq25</key>
<value>0</value>
</param>
<param>
<key>norm_gain25</key>
<value>False</value>
</param>
<param>
<key>gain25</key>
<value>0</value>
</param>
<param>
<key>ant26</key>
<value></value>
</param>
<param>
<key>bw26</key>
<value>0</value>
</param>
<param>
<key>center_freq26</key>
<value>0</value>
</param>
<param>
<key>norm_gain26</key>
<value>False</value>
</param>
<param>
<key>gain26</key>
<value>0</value>
</param>
<param>
<key>ant27</key>
<value></value>
</param>
<param>
<key>bw27</key>
<value>0</value>
</param>
<param>
<key>center_freq27</key>
<value>0</value>
</param>
<param>
<key>norm_gain27</key>
<value>False</value>
</param>
<param>
<key>gain27</key>
<value>0</value>
</param>
<param>
<key>ant28</key>
<value></value>
</param>
<param>
<key>bw28</key>
<value>0</value>
</param>
<param>
<key>center_freq28</key>
<value>0</value>
</param>
<param>
<key>norm_gain28</key>
<value>False</value>
</param>
<param>
<key>gain28</key>
<value>0</value>
</param>
<param>
<key>ant29</key>
<value></value>
</param>
<param>
<key>bw29</key>
<value>0</value>
</param>
<param>
<key>center_freq29</key>
<value>0</value>
</param>
<param>
<key>norm_gain29</key>
<value>False</value>
</param>
<param>
<key>gain29</key>
<value>0</value>
</param>
<param>
<key>ant2</key>
<value></value>
</param>
<param>
<key>bw2</key>
<value>0</value>
</param>
<param>
<key>center_freq2</key>
<value>0</value>
</param>
<param>
<key>norm_gain2</key>
<value>False</value>
</param>
<param>
<key>gain2</key>
<value>0</value>
</param>
<param>
<key>ant30</key>
<value></value>
</param>
<param>
<key>bw30</key>
<value>0</value>
</param>
<param>
<key>center_freq30</key>
<value>0</value>
</param>
<param>
<key>norm_gain30</key>
<value>False</value>
</param>
<param>
<key>gain30</key>
<value>0</value>
</param>
<param>
<key>ant31</key>
<value></value>
</param>
<param>
<key>bw31</key>
<value>0</value>
</param>
<param>
<key>center_freq31</key>
<value>0</value>
</param>
<param>
<key>norm_gain31</key>
<value>False</value>
</param>
<param>
<key>gain31</key>
<value>0</value>
</param>
<param>
<key>ant3</key>
<value></value>
</param>
<param>
<key>bw3</key>
<value>0</value>
</param>
<param>
<key>center_freq3</key>
<value>0</value>
</param>
<param>
<key>norm_gain3</key>
<value>False</value>
</param>
<param>
<key>gain3</key>
<value>0</value>
</param>
<param>
<key>ant4</key>
<value></value>
</param>
<param>
<key>bw4</key>
<value>0</value>
</param>
<param>
<key>center_freq4</key>
<value>0</value>
</param>
<param>
<key>norm_gain4</key>
<value>False</value>
</param>
<param>
<key>gain4</key>
<value>0</value>
</param>
<param>
<key>ant5</key>
<value></value>
</param>
<param>
<key>bw5</key>
<value>0</value>
</param>
<param>
<key>center_freq5</key>
<value>0</value>
</param>
<param>
<key>norm_gain5</key>
<value>False</value>
</param>
<param>
<key>gain5</key>
<value>0</value>
</param>
<param>
<key>ant6</key>
<value></value>
</param>
<param>
<key>bw6</key>
<value>0</value>
</param>
<param>
<key>center_freq6</key>
<value>0</value>
</param>
<param>
<key>norm_gain6</key>
<value>False</value>
</param>
<param>
<key>gain6</key>
<value>0</value>
</param>
<param>
<key>ant7</key>
<value></value>
</param>
<param>
<key>bw7</key>
<value>0</value>
</param>
<param>
<key>center_freq7</key>
<value>0</value>
</param>
<param>
<key>norm_gain7</key>
<value>False</value>
</param>
<param>
<key>gain7</key>
<value>0</value>
</param>
<param>
<key>ant8</key>
<value></value>
</param>
<param>
<key>bw8</key>
<value>0</value>
</param>
<param>
<key>center_freq8</key>
<value>0</value>
</param>
<param>
<key>norm_gain8</key>
<value>False</value>
</param>
<param>
<key>gain8</key>
<value>0</value>
</param>
<param>
<key>ant9</key>
<value></value>
</param>
<param>
<key>bw9</key>
<value>0</value>
</param>
<param>
<key>center_freq9</key>
<value>0</value>
</param>
<param>
<key>norm_gain9</key>
<value>False</value>
</param>
<param>
<key>gain9</key>
<value>0</value>
</param>
<param>
<key>clock_rate</key>
<value>0.0</value>
</param>
<param>
<key>comment</key>
<value></value>
</param>
<param>
<key>affinity</key>
<value></value>
</param>
<param>
<key>dev_addr</key>
<value></value>
</param>
<param>
<key>dev_args</key>
<value>""</value>
</param>
<param>
<key>_enabled</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(1296, 724)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>uhd_usrp_sink</value>
</param>
<param>
<key>type</key>
<value>fc32</value>
</param>
<param>
<key>clock_source0</key>
<value></value>
</param>
<param>
<key>sd_spec0</key>
<value></value>
</param>
<param>
<key>time_source0</key>
<value></value>
</param>
<param>
<key>clock_source1</key>
<value></value>
</param>
<param>
<key>sd_spec1</key>
<value></value>
</param>
<param>
<key>time_source1</key>
<value></value>
</param>
<param>
<key>clock_source2</key>
<value></value>
</param>
<param>
<key>sd_spec2</key>
<value></value>
</param>
<param>
<key>time_source2</key>
<value></value>
</param>
<param>
<key>clock_source3</key>
<value></value>
</param>
<param>
<key>sd_spec3</key>
<value></value>
</param>
<param>
<key>time_source3</key>
<value></value>
</param>
<param>
<key>clock_source4</key>
<value></value>
</param>
<param>
<key>sd_spec4</key>
<value></value>
</param>
<param>
<key>time_source4</key>
<value></value>
</param>
<param>
<key>clock_source5</key>
<value></value>
</param>
<param>
<key>sd_spec5</key>
<value></value>
</param>
<param>
<key>time_source5</key>
<value></value>
</param>
<param>
<key>clock_source6</key>
<value></value>
</param>
<param>
<key>sd_spec6</key>
<value></value>
</param>
<param>
<key>time_source6</key>
<value></value>
</param>
<param>
<key>clock_source7</key>
<value></value>
</param>
<param>
<key>sd_spec7</key>
<value></value>
</param>
<param>
<key>time_source7</key>
<value></value>
</param>
<param>
<key>nchan</key>
<value>1</value>
</param>
<param>
<key>num_mboards</key>
<value>1</value>
</param>
<param>
<key>samp_rate</key>
<value>500000</value>
</param>
<param>
<key>hide_cmd_port</key>
<value>False</value>
</param>
<param>
<key>hide_lo_controls</key>
<value>True</value>
</param>
<param>
<key>stream_args</key>
<value></value>
</param>
<param>
<key>stream_chans</key>
<value>[]</value>
</param>
<param>
<key>sync</key>
<value></value>
</param>
<param>
<key>len_tag_name</key>
<value></value>
</param>
<param>
<key>otw</key>
<value></value>
</param>
</block>
<block>
<key>wxgui_fftsink2</key>
<param>
<key>avg_alpha</key>
<value>0</value>
</param>
<param>
<key>average</key>
<value>False</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>1</value>
</param>
<param>
<key>fft_size</key>
<value>1024</value>
</param>
<param>
<key>freqvar</key>
<value>None</value>
</param>
<param>
<key>_coordinate</key>
<value>(1104, 520)</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></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>30</value>
</param>
<param>
<key>samp_rate</key>
<value>data_rate</value>
</param>
<param>
<key>title</key>
<value>FFT Plot</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>20</value>
</param>
</block>
<connection>
<source_block_id>blocks_multiply_const_vxx_0</source_block_id>
<sink_block_id>rational_resampler_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_0</source_block_id>
<sink_block_id>gr_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_0_1</source_block_id>
<sink_block_id>gr_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>blocks_multiply_const_vxx_0_1</source_block_id>
<sink_block_id>rational_resampler_xxx_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_repeat_0</source_block_id>
<sink_block_id>low_pass_filter_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_socket_pdu_0</source_block_id>
<sink_block_id>gr_rds_encoder_0</sink_block_id>
<source_key>pdus</source_key>
<sink_key>rds in</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle_1</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_throttle_2</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_wavfile_source_0</source_block_id>
<sink_block_id>blocks_throttle_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>blocks_wavfile_source_0</source_block_id>
<sink_block_id>blocks_throttle_2</sink_block_id>
<source_key>1</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_add_xx_0</source_block_id>
<sink_block_id>low_pass_filter_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_add_xx_1</source_block_id>
<sink_block_id>gr_frequency_modulator_fc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_add_xx_1</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>gr_char_to_float_0</source_block_id>
<sink_block_id>blocks_repeat_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_diff_encoder_bb_0</source_block_id>
<sink_block_id>gr_map_bb_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_frequency_modulator_fc_0</source_block_id>
<sink_block_id>rational_resampler_xxx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_map_bb_0</source_block_id>
<sink_block_id>gr_char_to_float_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_map_bb_1</source_block_id>
<sink_block_id>gr_unpack_k_bits_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_multiply_xx_0</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_multiply_xx_1</source_block_id>
<sink_block_id>gr_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>2</sink_key>
</connection>
<connection>
<source_block_id>gr_rds_encoder_0</source_block_id>
<sink_block_id>gr_diff_encoder_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_sig_source_x_0</source_block_id>
<sink_block_id>gr_multiply_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_sig_source_x_0_0</source_block_id>
<sink_block_id>gr_multiply_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_sig_source_x_0_1</source_block_id>
<sink_block_id>blocks_multiply_const_vxx_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_sub_xx_0</source_block_id>
<sink_block_id>low_pass_filter_0_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_unpack_k_bits_bb_0</source_block_id>
<sink_block_id>gr_map_bb_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>low_pass_filter_0</source_block_id>
<sink_block_id>gr_multiply_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>low_pass_filter_0_0</source_block_id>
<sink_block_id>gr_add_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>3</sink_key>
</connection>
<connection>
<source_block_id>low_pass_filter_0_0_0</source_block_id>
<sink_block_id>gr_multiply_xx_1</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_0</source_block_id>
<sink_block_id>gr_add_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_0</source_block_id>
<sink_block_id>gr_sub_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_0_0</source_block_id>
<sink_block_id>gr_add_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_0_0</source_block_id>
<sink_block_id>gr_sub_xx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>1</sink_key>
</connection>
<connection>
<source_block_id>rational_resampler_xxx_1</source_block_id>
<sink_block_id>uhd_usrp_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
</flow_graph>
И как обычно, всем удачных экспериментов. И не создавайте помехи другим радиостанциям.
Комментарии (15)
augorelov
20.06.2019 16:54Не успел глубоко вникнуть в часть 7, а уже 9. 8 часть вообще мимо прошла. Не успеваю за автором. И это здорово, что автора не пропадает запал.
A_J
20.06.2019 18:51+1А не подскажете, может ли GNU Radio декодировать CDMA-сигналы? Вижу какие-то исследовательские статьи на эту тему, но не более.
DmitrySpb79 Автор
21.06.2019 12:45Лично не пробовал. Здесь смотрели?
github.com/anastas/gr-cdma
www.ruby-forum.com/t/gr-cdma/233820/10
dernuss
Прикольно. Жаль FM приёмника не было)
Что на очереди? DVB-T2?
DmitrySpb79 Автор
Да, есть мысль попробовать.
dernuss
было бы круто. Всё равно FM рано или поздно отомрёт) ну я надеюсь
Javian
Не отомрет пока в каждом авто не будет цифрового приемника, что очень сомнительно.
dernuss
Ну аналоговое ТВ загнулось
Javian
Его принудительно загнули, а так локально в провинции ему жить и жить.
А про ФМ много уже высказывалось в комментариях на такие темы. Вот, например, комментарий автора этой публикации DmitrySpb79:
и ряд еще подобных комментариев.
vladkorotnev
Свободных каналов там влезает больше из-за того, что вещатели в погоне за дешевизной режут битрейт под ноль. И выходят в итоге такие приколы как радио "Джаз" в AAC mono 24kbps.
DmitrySpb79 Автор
Я писал статью про DAB+ как-то: habr.com/ru/post/448244
Если кратко, там все грустно, качество хуже чем FM.
NikitosZs
Ага, как и АМ, который до сих пор вещается на КВ.
Javian
Не только КВ, в США популярны средневолновые радиостанции.
KorSum
FM как и AM никогда не отомрёт. Вопрос не правильный. Разная частота, разная длинна волны и свойства у них разные и известные всем радиолюбителям. Разные расстояния от передатчика до приёмника при условии уверенного приёма. Изменение связанные с временем суток. И так далее.
Вопрос просто связанный с коммерческим использованием, где деньги там и прогресс. Это понятно. FM радио, как и TV естественно будет заменено цифровым и очень скоро. Уже есть очень недорогие SDR приёмники (RTL2832U) как для приёма радио, так и для телевидения. Даже радиолюбители используют их не для приёма цифры, а для приёма аналогового сигнала и последующей его обработки, записи и хранения. Причём в очень широком диапазоне. То есть можно SDR приёмником принять и записать широкий спектр, а потом прослушать по очереди несколько передач которые шли одновременно в эфире. Возможности обработки вообще фантастические – программы SDRSharp, SDRSharper и др.
То есть вопрос модуляции и частоты, а также назначение: музыка, телевидение или военка: радары, передача данных, постановка помех.
Поэтому всегда будет и AM (SSB CW FM) на КВ и СВ, и цифра, как радио, так и телевидение на высокочастотных бендах. Между прочим, цифра была и будет и на КВ и достаточно давно.