Посвящается участнику форума radioscanner.ru STABO,
которому я дал обещание написать эту статью,
и чьи напоминания не давали спать моей совести.
🙂
Как я уже писал в предыдущей заметке, я удачно победил приемник PCR-1000 и смог им управлять из GnuRadio. Все прекрасно, но вот хочется удобств. Хочется видеть спектр, и не упускать интересные вещи происходящие на пару килогерц от той частоты на которой ты сейчас находишься. В родном софте для PCR1000 имеется возможность видеть спектр. Изучив ситуацию поглубже я обнаружил что все данные для отображения на спектре передаются непосредственно через COM порт, а программа лишь рисует пики. Повозившись немного с этими данными, и попробовав их отобразить, я плюнул на это дело и решил искать обходные пути. И этот путь был найден.
Разглядывая SDR приемники в интернете, я наткнулся на простенький приемник Soft66Lite, котрый использует в качестве АЦП звуковую карту компьютера. «А это мысль!», подумал я, «если этот приемник выдает в аудиокарту I/Q сигнал, то я с легкостью смогу ввести эти данные в GnuRadio».
Вырисовывается следующая схема:
Предварительно нам нужно будет сделать следующее:
1) Сделать вывод IF (промежуточной частоты) для PCR1000
2) Перенастроить Soft66Lite на работу с промежуточной частотой PCR1000.
Начнем с модификации приемника.
Изучив опыт других владельцев данного приемника я взял в руки отвертку, паяльник и приступил к вскрытию.
Почитав разные мнения в Интернете, я не стал допаивать еще один конденсатор как описано в статье выше, а припаялся после имеющегося.
Выкидываем заземляющий болт, и ставим вместо него SMA разъем.
Далее займемся подгонкой SDR приемника под наши нужды.
Естественно надо было его сначала заказть, и собрать. Так же на eBay были приобретены кварцы на 10.7 Мгц (я не стал морочиться с умножением частоты, решив просто опираться на кварц)
В Soft66Lite присутсвует сменный блок фильтра. В комплекте к Soft66Lite уже шли пару фильтров под распостраненные любительские диапазоны. Но для нашей внештатной частоты придется рассчитать новый фильтр. Так как в Soft66Lite используется фильтр Баттерворта, воспользуемся данным онлайн-калькулятором для расчета.
Вот так выглядит Soft66Lite готовый работать квадратурным смесителем.
Соединив PCR1000 и Soft66Lite я бросил взгляд, на ноутбук, и задумался. Все классно, кроме одного. Линейного входа-то в ноутбуке нет! Придется искать USB звуковую карточку с линейным входом. Осмотр ближайших магазинов и Яндекс.Маркета выявил печальную картину — есть либо копеечная фигня с входом только для микрофона, либо адова техника для Серьезного Применения за Серьёзные Цены. Ну, не беда «заграница нам поможет». Снова заглядываем на eBay и находим подходящую вещь — USB звуковушка C-Media, аж с поддержкой частоты дискретизации в 96 kHz, и SPDIF. Данная звуковая карта отлично опознается Linux как
ID 0d8c:0102 C-Media Electronics, Inc. CM106 Like Sound Device
Настроим систему на захват с линейного входа.
Запустим настройку микшера командой
sudo alsamixer
В текущий момент показываются настройки встроенной звуковой карты. Нажмем F6 и выберем USB Sound Device (так наша китайская звуковушка представляется системе)
Убедитесь что настройки выставлены соответствующе. В разделе «Воспроизведение» у PCM Capture Source должно быть выставленно «Line», а в разделе «Захват» у PCM и Line должны быть выставленны соответствующие уровни.
Следующий шаг — определить, какое имя устройства нам надо будет указать в качестве источника сигнала в блоке «Audio Source». Для этой цели я использую программу Audacity. Запускаем ее (а если ее нет, то устанавливаем сначала), и раскрываем в ней меню выбора источника записи (рядом со значком микрофона).
Как видите, тут представлена наша USB звуковая карточка, и рядом с ней в скобках указан номер устройства. Именно он нам и потребуется в дальнейшем. Кстати, можете проверить, правильно ли мы выбрали устройство. Подключите к линейному входу какой-нибудь источник сигнала (к примеру телефон или плеер) , и нажмите кнопку записи в Audacity. Вы должны увидеть что сигнал захватывается.
Итак, с настройкой оборудования мы закончили. Переходим от аппаратной к программной части.
Запустим GnuRadio и соберем граф как показано на рисунке. Пояснения я дам ниже.
Первый блок в графе — Audio Source. Этот блок было настроен для работы с нашей звуковой картой указанием в поле «Device Name» значения «hw:1,0». Также наш аудиоблок был отконфигурирован на использование 2 выходов: для левого и правого канала. Далее у нас идет блок Float to Complex. Как понятно из названия, этот блок берет два входных Float значения, и конструирует из них одно комплексное. Следующий блок в схеме — Moving Average, он реализует простой фильтр скользящего среднего и используется для небольшого снижения уровня шума. Этот блок я добавил чуть позднее, в процессе использования, и впринципе данная схема может обойтись без него. К выходу Float to Compex я так же подключил WX GUI Waterfall Sink, блок реализующий водопад.
К блоку Moving Average подключен блок ФНЧ, ширина которого может регулироваться выпадающим меню filter_with. К выходу ФНЧ подключены спектронализатор, и блок Selector. Назначение спектроанализатора ясно, а вот Selector требует пояснения. Данный блок (а точнее блоки) работает как переключатель потока данных. У этого блока может быть множество входов и выходов, но в любой момент времени активен может быть только один вход и один выход. За номера активного входа и активного выхода отвечают параметры «Input Index» и «Output Index» соответственно.
Вход в нашем случае один, а выходов два. Активный выход настраивается выпадающим меню «mod_type».
Далее у нас на каждой ветке висит по блоку демодулятора. На первой ветке — NBFM демодулятор, на второй — AM. Тут мне кажется тоже все ясно. Выходы блоков демодуляторов подсоединены ко второму Selector’у, входы которого так же управляются выпадающим меню «mod_type» Совместное переключение селекторов обеспечивает работу только одной ветки демодуляции. К селектору прицеплен последний блок — Audio Sink, который непосредсвенно выводит демодулированный сигнал на колонки.
Ну что же. Наступает торжественный момент. Попытка запуска. Стартуем нашу программу управления из предыдущей статьи, выставляем в ней тип модуляции WBFM и ширину полосы в 230kHz (по моим ощущениям, это положительно сказывается на выводе ПЧ). Включаем ICOM, и запускаем наш свежесозданный SDR приемник. 🙂
Вот как-то так это и выглядит. На картинке показано текущее состояние дел в эфире на частоте 127.800 Мгц. Полоса на водопаде — АТИС нижегородского аэропорта (SNR не удивляйтесь, принималось это все на кусок провода).
Итак, что я могу сказать в качестве заключения:
1) Да, это работает.
2) Шумы на порядок сильнее чем при прослушивании просто ICOMа. Но тут видимо виноваты: паршивый монтаж, отсутствие экранов на всех элементах и соединительных проводах. Вероятно если все хорошо заэкранировать и зафильтровать, то шумы снизятся.
3) В процессе работы схемы из динамика раздаются щелчки. Насколько я знаю, причиной этого является переполнение буфера выводящей звуковой карты. Интересно то, что под FreeBSD щелкало меньше и чем под Linux. С проблемой щелчков надо еще покопаться.
4) Как и ожидалось, частоту семплирования в 96kHz карта держит. Но плохо. Сигналы дальше чем 40 кГц от центральной частоты теряются в шуме. Интересно было бы посмотреть на другие карточки, не настолько китайские.