Про SDR приёмники и трансиверы я узнал от радиолюбителей ещё очень давно, когда у меня ещё даже не было Интернета. Как ни странно, в этой технике толком мало кто понимал. Плотно занимаясь на то время обработкой аудио, я уловил идею и основной принцип работы SDR. Как я понимал на то время, SDR представляет собой обычный приёмник прямого преобразования, в состав которого в основном входит смеситель и опорный гетеродин фиксированной или перестраиваемой частоты. На входы смесителя заводится антенна и выход гетеродина, а выход смесителя подаётся на звуковую карту. В связи с тем, что станции имеют узкую полосу, а звуковая карта – гораздо шире, есть возможность каким-либо образом программно перестраиваться со станции на станцию внутри фиксированной широкой полосы частот. Кроме того, существует возможность заодно обрабатывать принимаемый сигнал с помощью DSP. С отдельными программами для DSP, которые обрабатывают сигнал с НЧ выхода радиоприёмника, я уже сталкивался (подавление шума, узкополосный фильтр и т.д.). Идея мне показалась довольно заманчивой, и я стал интересоваться этим вопросом глубже.

Спустя некоторое время мне удалось собрать собственный SDR трансивер по одной из схем, которые мне предоставили. Всего было две схемы. В одной схеме в качестве опорной частоты служил генератор с переключаемыми кварцами на нужный радиолюбительский диапазон, а перестройка производилась программно. Вторая схема содержала в себе DDS синтезатор, который способен генерировать любую частоту (в своих пределах), которая задаётся с компьютера программой управления. Имеется возможность перестраиваться как программно, так и аппаратно. Я выбрал вторую схему. Программа управления очень навороченная. Прежде всего, она позволяет не только слышать станцию и видеть её спектр, но и видеть весь спектр широкополосного сигнала, который приходит на звуковую карту. Более того, можно с помощью мыши мгновенно перестраиваться на станцию, спектр которой виден на экране. Это одна из ключевых особенностей SDR. У одного из радиолюбителей, который собрал такую же схему раньше меня, я полностью пронаблюдал, как это всё работает на практике. Первое, что меня удивило – в звуковой карте задействованы оба канала: L и R. Казалось бы, а причём здесь стерео? Это в настоящее время я всё чётко понимаю, но на то время, когда Интернеты в обычных домах провинциальных городов только зарождались, подробной технической информации практически не было. Кроме того, при частоте дискретизации звуковой карты 48 кГц ширина обзора составляет не 24 (как я думал, по теореме Котельникова), а все те же 48 кГц. Мне никто не дал чёткого объяснения, почему это так. Но я интуитивно однозначно понял: это как раз и связано с тем, что задействованы оба звуковых канала. По одному каналу передаётся сигнал, скажем, первой половины всего спектра обзора, а по второму – второй половины. Но это не совсем так! Из практики было известно, что при пропадании одного из двух каналов, поступающие на звуковую карту, на экране не исчезнет половина спектра, а будет наблюдаться «зеркальный» эффект: спектр приобретёт симметричность относительно центра всей спектральной панорамы. А если поменять каналы местами, весь спектр будет зеркально развёрнут. Ответы на все вопросы я нашёл самостоятельно, когда собрал данный SDR трансивер. Рассмотрим краткую структурную схему приёмного тракта SDR.



Схема весьма простая. Я обратил особое внимание на узел «Делитель на 4». Дело в том, что ключевой смеситель работает в «двухканальном режиме». Для выделения особого стерео сигнала (называется он I/Q сигнал) на него необходимо подавать с гетеродина два одинаковых сигнала по частоте, но сдвинутые по фазе на 90 градусов. Сдвиг достигается за счёт предварительного формирования синтезатором частоты в 4 раза больше и деления на 4 с помощью триггеров (классика цифровой микроэлектроники). Стоит отметить, что сигнал имеет пилообразную форму (компаратор входит в состав синтезатора), а ключевой смеситель представляет собой обычный коммутатор из области той же цифровой логики. Не вдаваясь в подробности программно-аппаратной структуры SDR, оговорю сразу, что программа управляет перестройкой синтезатора напрямую (без промежуточной ПЛИС или МК). Через LPT реализован SPI интерфейс подобно, как это реализовано для программатора МК AVR STK200.

Итак, со схемой и софтом разобрался, всё сконструировал и настроил. Далее с помощью программы Adobe Audition 1.5 я приступил к анализу фрагмента I/Q сигнала, который я записал с выхода своего SDR, настроившись на частоту одного из радиолюбительских диапазонов где-то посередине. На рисунке представлен скриншот программы, где показана фазовая диаграмма и спектральный вид фрагмента.



На спектре можно увидеть узкополосные станции, шириной приблизительно в 3 кГц. Левый и правый каналы по виду одинаковые, но по форме волны – разные, что подтверждает фазовая диаграмма. На слух оба канала звучат одинаково, если слушать их по отдельности. Но, слушая одновременно в наушниках, можно обратить внимание на фазовый сдвиг. Значение фазового сдвига – 90 градусов. Можно догадаться не только исходя из анализа диаграммы, но и из анализа схемы. Выше я обращал внимание на то, что второй канал формируется с ключевого смесителя после «смеси» входного сигнала (с антенны) с частотой синтезатора, сдвинутой по фазе на 90 градусов. Однако правый канал не является прямым результатом сдвига по фазе на 90 градусов левого канала (тоже проверял). И даже с точки зрения «информатики», по сути, это был бы один и тот же сигнал. А выше был сделан вывод, что сигналы разные, ибо с частотой дискретизации 48 кГц получается ширина полосы также 48 кГц.

Наблюдая за панорамой радио эфира и одновременно за спектром I/Q сигнала в Adobe Audition в режиме аудиозаписи, мне удалось понять, что визуально спектр каждого канала – это «свёртка» всего спектра радио эфира относительно центра. Дальнейшие эксперименты в Adobe Audition со сдвигом фазы на 90 градусов и различными комбинациями суммирования и вычитания каналов помогли мне всё-таки во всём разобраться. Эмпирически подтверждена следующая мысль. Сигнал «I» (левого канала) представляет собой сумму (микс) двух сигналов: сигнала, отвечающего за левую половину спектра эфира, и сигнала, но сдвинутого на 90 градусов, отвечающего за правую половину спектра эфира. Сигнал «Q» (правого канала) представляет собой сумму (микс) двух сигналов: сигнала, отвечающего за правую половину спектра эфира, и сигнала, но сдвинутого на 90 градусов, отвечающего за левую половину спектра эфира. Обратные зависимости тоже очень похожи. Покажу данные преобразования абстрактно с помощью математических формул.

Пусть даны два разных сигнала

$L=L(t),\ \ \ R=R(t).$

Они представляют собой сигналы, соответственно для левой и для правой половины спектра всей панорамы, как говорилось выше. Чтобы не нагромождать формулы, в дальнейшем все сигналы будем обозначать без аргумента времени $t$.

Обозначим $L_{90}$ сигнал, сдвинутый на $90^\circ$, причем

$L_{90}=f_{90}(L).$

Аналогично

$R_{90}=f_{90}(R),$

где $f_{90}$ — оператор сдвига сигнала по фазе на $90^\circ$.

Для оператора $f_\alpha$ сдвига на $\alpha$ характерны следующие очевидные свойства:

1. Последовательное применение оператора сдвига $f\ k$ раз на углы $\alpha_1, \alpha_2,\dots,\alpha_k$ даёт сдвиг на угол $\alpha$, равный сумме вышеперечисленных углов:

$f_{\alpha}=f_{\alpha_1}\circ f_{\alpha_2}\circ\dots\circ f_{\alpha_k},\ \ \ \alpha=\sum\limits_{i=1}^k\alpha_i.$


2. Амплиттуду какого-либо сигнала $S$ в $a$ раз можно изменить до или после примпенения оператора $f_\alpha$, при этом результат не изменится:

$f_\alpha(a\cdot S)=a\cdot f_\alpha(S)$


3. Результат сдвига сигнала $S$, равный сумме $k$ штук сигналов $S_1,S_2,\dots,S_k$, на угол $\alpha$ равен сумме результатов сдвига на тот же угол вышеперечисленных сигналов:

$f_\alpha(S)=\sum\limits_{i=1}^kf_\alpha(S_i),\ \ \ S=\sum\limits_{i=1}^kS_i.$


4. Сигнал $S$, сдвинутый по фазе на $180^\circ$ даёт «противофазу» исходного сигнала:

$f_{180}(S)=-S.$


Согласно моему утверждению,

$I=I(L,R)=L+f_{90}(R)=L+R_{90},$

$Q=Q(L,R)=f_{90}(L)+R=L_{90}+R.$


Из такого представления можно однозначно извлечь сигналы $L$ и $R$ вот так:

$L=\frac12\Big(I-f_{90}(Q)\Big),\ \ \ \ \ (1)$

$R=\frac12\Big(Q-f_{90}(I)\Big).\ \ \ \ \ (2)$

Доказать эти формулы, используя вышеперечисленные свойства, не составляет особого труда.

$\frac12\Big(I-f_{90}(Q)\Big)=\frac12\Big(L+R_{90}-f_{90}(L_{90}+R)\Big)=$

$=\frac12\Big(L+R_{90}-f_{90}(L_{90})-f_{90}(R)\Big)=\frac12\Big(L+R_{90}-f_{180}(L)-f_{90}(R)\Big)=$

$=\frac12\Big(L+R_{90}+L-R_{90}\Big)=\frac122L=L.$



Аналогично для $R$:

$\frac12\Big(Q-f_{90}(I)\Big)=\frac12\Big(L_{90}+R-f_{90}(L+R_{90})\Big)=$

$=\frac12\Big(L_{90}+R-f_{90}(L)-f_{90}(R_{90})\Big)=\frac12\Big(L_{90}+R-f_{90}(L)-f_{180}(R)\Big)=$

$=\frac12\Big(L_{90}+R-L_{90}+R\Big)=\frac122R=R.$



Теперь попробуем проверить полученные формулы на практике с помощью программы Adobe Audition. На самом деле существует масса более удобных программ для моделирования сигналов, начиная от MatLab, но я работаю именно в Adobe Audition. Будем работать с фрагментом I/Q сигнала, вид которого изображался на скриншоте выше. Требуется из этого сигнала согласно формулам выделить сигнал L, которому соответствует левая половина спектра на панораме SDR, и сигнал R для правой половины. Это можно сделать множеством способов, но я рассмотрю один из них.

Для начала нужно сохранить по отдельности сигнал I и сигнал Q (левый и правый канал как два моно) в файлы «i.wav» и «q.wav» соответственно. Затем над каждым из сохранённых файлов проделать операцию сдвига по фазе на 90 градусов. Это делается с помощью эффекта «Графический сдвиг фазы» в разделе «Фильтры». Выбираем из списка предустановленный пресет «+90 Degrees» и применяем.



На самом деле, в общем, можно вручную задать с помощью графика частотно-фазовую характеристику, ибо обработка основана на прямом и обратном БПФ. Но в данном случае это не нужно, так как требуется сдвиг на 90 градусов всех частотных компонент. После применения эффекта сохраняем результат в отдельные файлы с именами «i90.wav» и «q90.wav». Затем в режиме работы «Мультитрек» собираем стерео микс, согласно формулам (1) и (2). В левый канал – первая формула, а в правый – вторая. В формуле по два слагаемых, причём второе – с отрицательным знаком. Первый трек – первое слагаемое в первой формуле. Туда ложем соответствующий ему сигнал, точнее, файл («i.wav»). Второй трек – второе слагаемое первой формулы («q90.wav»). Но на него ещё нужно «повесить» эффект инверсии. Это можно сделать с помощью эффекта «Микшер каналов» и настроить так, как показано на картинке. Оба трека полностью выводим на левый канал. Аналогично для третьего и четвёртого треков (вторая формула). Коэффициентом 1/2 в формулах можно пренебречь, образцы и так тихие. Если его понадобиться учитывать, необходимо установить громкость каждого трека -6 dB.



После экспорта микса будет создан новый файл, вид спектра которого представлен на рисунке ниже.



Левый канал данного файла представляет сигнал, который соответствует левой половине спектра панорамы радио эфира. Правый – аналогично. На рисунке по спектру визуально видно, что каналы разные с точностью до небольшой «зеркалки», которая в моём случае вызвана некими техническими нюансами.

Таким образом, любые два сигнала по приведённым формулам можно «сложить» в представление I/Q и «разложить» обратно.

Все вышеизложенные мысли имеют право на существование, но на самом деле всё гораздо проще (или сложнее). Позже я узнал очевидные на сегодняшний день факты: I/Q сигнал это есть нечто иное, как обычный комплексный сигнал с действительной и мнимой составляющей. Синтезатор в блоке SDR трансивера, выдающий совместно с делителем пару сигналов можно назвать комплексным гетеродином. Спектр комплексного сигнала I/Q, поступающий на звуковую карту, как ни странно, имеет отрицательную составляющую. При частоте дискретизации 48 кГц полоса сигнала будет от -24 до 24 кГц. Сигнал L, который я выделял из I/Q, представляет собой сигнал для отрицательной части спектра сигнала I/Q, а сигнал R – для положительной.

На практике гораздо интереснее получить из I/Q сигнала не пару сигналов (по половинкам), как я это делал ранее, а сигнал с той же полосой 48 кГц, но чтобы спектр лежал полностью в положительной области частот (сдвинуть спектр вправо на 24 кГц). Такой сигнал будет уже с частотой дискретизации 96 кГц. Для получения такого сигнала с помощью Adobe Audition необходимо выполнить операцию квадратурной модуляции, согласно известному алгоритму. Эта операция является обратной по отношению к операции квадратурного детектирования, которая как раз и происходит в тракте SDR приёмника на аппаратном уровне, «сдвигая» весь спектр радио эфира влево на частоту гетеродина.

Попробуем проделать квадратурную модуляцию в Adobe Audition, руководствуясь известной блок-схемой ниже.



Опишу кратко проделываемые действия. Сначала для формальности нужно исходный файл апсэмплить с 48 до 96 кГц (хотя, на самом деле эта процедура необязательна). Затем необходимо в пустом файле (с частотой дискретизации 96 кГц) сгенерировать синусоидальный тон частотой 24 кГц на полной громкости такой же длинны, как исходный фрагмент I/Q сигнала. Это будет сигнал синуса.



Точно также создаём тон во второй новый файл, но только меняем параметр «Начало фаза» с 0 на 90. Тем самым, будет создан сигнал косинуса. Согласно блок-схеме, необходимо попарно перемножить сигнал синуса с компонентой «Q» и сигнал косинуса с компонентой «I», затем результаты сложить. Сначала скопируем в буфер обмена компоненту «Q» (правый канал) из исходного I/Q сигнала. Затем воспользуемся функцией из меню «Редактирование» «Микшировать вставку с параметрами «Модуляция», «Из буфера 1», предварительно выделив всю область волны с синусом.



После нажатия на кнопку «OK» произойдёт перемножение сигнала буфера обмена с выделенным сигналом. Результат перемножения станет на место сигнала синуса. Аналогичные операции проделываем для сигнала косинуса и канала «Q». Затем получившиеся результаты микшируем в режиме «Мультитрек» и сразу же экспортируем микс в «моно». В результате получится сигнал, спектр которого изображён на рисунке ниже.



Это как раз и есть изображение того же спектра, который рисуется на панораме SDR. С помощью всех приведённых в этой статье операций в Adobe Audition имеется возможность выделить из записи I/Q любую узкополосную радиостанцию. В отдельных случаях могут потребоваться небольшие видоизменения вышеупомянутой операции (если будет необходимо перевернуть спектр «вверх ногами»). Плюс ко всему потребуется полосовой фильтр, АРУ и прочие эффекты по необходимости.

В заключение стоит отметить несколько моментов, касательно SDR техники. На сегодняшнее время существуют и вполне доступны SDR с «прямой оцифровкой» всей полосы радиочастот (прямо с антенного входа) вплоть до нескольких гигагерц. Это гораздо интереснее и совершеннее. SDR через звуковую карту – уже «прошлый век». Кроме того, сейчас наиболее популярны такие темы, как «DVB тюнер в качестве SDR приёмника», «SDR онлайн». Наверняка большинство современных читателей, которые хоть что-то слышали об SDR, будут подразумевать именно это. Но это уже совсем другая тематика.

Комментарии (2)


  1. ZiroKyl
    27.08.2018 17:36

    Небольшое дополнение к этому фрагменту:

    На самом деле существует масса более удобных программ для моделирования сигналов...
    Как-то я увлекся анализом сигналов, и нашел Signals Analyzer (SA):


    P.S. по крайне мере он хорошо подходит для некоторых демонстраций работы с сигналом студентам.
    P.P.S. я тоже увлекался работой с сигналом в неспециализированных аудио-редакторах :)


  1. zillant
    27.08.2018 20:40

    Исправьте MatHLab на Matlab пожалуйста, а то эта опечатка очень сильно режет глаз)
    Статья написана очень интересно, отлично подойдёт для тех кто только начинает, с минимумом знаний по ЦОС.