GnuRadio: Урок 3, Прием AM сигналов

В этом уроке мы будем учиться принимать сигналы в амплитудной модуляции. Мы возьмем файл с данными, содержащий несколько секунд записанного эфира. Этот файл был записан при помощи приемника USRP. Если у вас есть USRP вы можете также использовать его в качестве источника, и работать с живым сигналом.

  1. Скачайте файл: am_usrp710.dat с отсюда или отсюда. Сохраните его в известном вам месте. Если вы загрузите файл  его в виде архива, распакуйте его.
  2. Запустите GnuRadio
  3. Постройте граф как показано ниже, состоящей из блоков File Source (файловый источник), Throttle, и WX GUI FFT Sink. Установите частоту дискретизации в переменной samp_rate равной 256000. Это частота, с которой сохраненные данные были дискретизированны
    amdemod1
  4. Дважды щелкните на блоке “File Source”. Нажмите на кнопку с многоточием (…) рядом с полем параметра “File”.
    Найдите файл am_usrp710.dat, сохраненный на шаге 1 (распакованный). Путь к файлу будет выглядеть, как показано на рисунке ниже. Установите параметр “Output Type” в значение “Complex”. Использование комплексных числе для описания и обработки сигналов в SDR будут обсуждаться на следующем занятии. Задайте параметру  «Repeat» (“Повтор”) значение «Yes». Это приведет к зацикливанию данных из файла, и непрерывной передаче сигнала.
    amdemod2
  5. Сохраните и выполните граф. Вы должны увидеть FFT спектр, похожий на показанный ниже. Возможно, вам придется нажать на кнопку “Autoscale” для масштабирования данных, для того что бы получить график как показано на рисунке. Обратите внимание на следующее:
    — Эти данные были записаны с USRP на частоте 710 KHz. Таким образом сигнал, который вы видите в центре (указан как 0 кГц) на самом деле находится на частоте 710 кГц. Кроме того, сигнал на 80 кГц на самом деле находится на:  710 KHz + 80 KHz = 790 KHz.
    — Дисплей охватывает диапазон частот чуть ниже 120 кГц, и чуть выше 120 кГц. Точная ширина полосы равна  256 KHz, что соответствует частоте дискретизации, с которой данные были записаны.
    — Пики, которые вы наблюдаете на этом графике, соответствующие несущим для АМ сигналов радиовещательных станций. Вы можете наблюдать боковые полосы у сильных сигналов.
    amdemod3
  6. На этом шаге мы будем расширять частотную шкалу на FFT спектре, для того чтобы можно было  просматривать сигналы с большим разрешением. Вспомните шаг 5, в котором говорилось что ширина полосы оси частот определяется частотой дискретизации (256К в данном файле). Хотя мы не можем изменить исходные данные, мы можем ресэмплировать их, и  увеличить или уменьшить частоту дискретизации. Мы будем уменьшать частоту дискретизации с помощью прореживания. Измените граф следующим образом:
    — Добавьте блок “Variable” (переменная) (в группе “Variables”). Установите данному блоку параметр  ID  “resamp_factor”, и параметр “Value” (значение) равный 4, как показано ниже
    amdemod4— Добавьте блок “Rational Resampler” (не “Rational Resampler Base”!) из группы Resamplers, как показано ниже. Присвойте его параметру “Decimation” (прореживание) значение  resamp_factor. Таким образом блок ресемплирования,  будет использовать значение переменной из предыдущего шага 4, чтобы выполнить прореживание входящих данных. Все это означает, что он будет делить входящую скорость передачи данных на прореживающий фактор. В данном примере, входящие со скоростью  256 выборок /сек данные будут преобразованы до значения 256/4 = 64 выборок /сек.
    -Не будем забывать, что блокам Throttle и WX GUI FFT Sink тоже нужно правильное значение частоты дискретизации. Измените параметр “Sample Rate” у этих блоков со значения samp_rate на  samp_rate / resamp_factor. Теперь мы можем менять прореживание всего лишь изменив значение переменной resamp_factor , а в остальных блоках нужные значения пересчитаются автоматически.
    — Ваш граф должен выглядеть так, как показано ниже.
    amdemod5
  7. Выполните новый граф. Теперь вы должны наблюдать полосу частот только в 64 кГц (-32KHz до +32 кГц). Какому фактическому диапазону частот она соответствует?
  8. Ширина широковещательного  АМ  сигнала 10 кГц (+/- 5 кГц от несущей частоты). Вам будет  полезно нажать на кнопку «Stop» на FFT спектре, чтобы увидеть это более ясно. Кроме того отметим, что многие станции включают дополнительную информацию за пределом полосы пропускания в 10 кГц. Этот вопрос мы обсудим позднее.
  9. Для того, чтобы отобрать станцию на частоте 710 кГц (или 0kHz) нужно вставить фильтр для устранения всех станций кроме одной, которую мы  хотим получить. Это часто называется канальным фильтром. Так как станция на частоте 710 кГц была перенесена на 0 кГц (в USRP) мы будем использовать ФНЧ.
    Ширина сигнала станции 10 кГц, поэтому мы будем использовать ФНЧ, с частотой среза 5 кГц.
    Вставьте блок “Low Pass Filter” (ФНЧ) (с помощью группы “Filters”) между Rational Resampler и Throttle. Установите параметры, как показано ниже.
    amdemod6
  10. Выполните граф. Вы должны увидеть только сигнал станции между +/- 5 кГц.
  11. Следующий шаг —  демодуляция сигналов. В случае амплитудной модуляции, низкочастотный аудиосигнал может быть получен вычислением огибающей или модуля высокочастотного радиосигнала. GNU Radio содержит блок “Complex To Mag” (комплексное в модуль) (данный блок находится в группе “Type Converters”), который может быть использован для этой цели. Вставьте этот блок между Low Pass Filter  и Throttle.
  12. Обратите внимание, что названия некоторых из блоков в настоящее время красные и значок “Run Flow Graph” окрашен серым цветом. Это указывает на ошибку. До добавления нового блока, все вводы и выводы у блоков  были комплексными значениями. Но вот у нашего нового блока “Complex to Float” вывод передает числа с плавающей точкой. Следовательно любые блоки после него должны иметь тип Float. Измените блоки Throttle  и FFT Sink на тип Float.
  13. Выполните граф. Теперь вы должны наблюдать спектр низкочастотного аудиосигнала на FFT спектре. Отметим, что поскольку  входные данные у  FFT Sink  являются числами с плавающей точкой, отображается только положительный частотный спектр.
  14. Следующим шагом будет прослушивание демодулированного сигнала, дабы убедиться что мы все  сделали верно. Уберите Throttle и FFT Sink блоки. Добавьте блок Audio Sink к выводу блока “Complex to Mag”. Обратите внимание, что по умолчанию частота сэмплирования  для Audio Sink установлена в значение 32 кГц. Большинство современных звуковых карт требуют частоту дискретизации по крайней мере 44,1 кГц. Установите частоту дискретизации для аудиовыхода равной 48 кГц.
  15. Обратите внимание, что частота дискретизации на выходе блока “Complex to Mag” составляет 64k, а на входе аудиоблока — 48k. Для того чтобы преобразовать 64k в 48k мы должны разделить (выполнить прореживание) на 4 и умножить (интерполировать) на 3. Вставьте блок “Rational Resampler” между “Complex to Mag” и “Audio Sink” и установите параметры “Decimation” и “Interpolation” как указано выше. Не забудьте так же установить блоку  “Rational Resampler” тип “Float”
  16. Подсоедините блок “Scope Sink” на выход “Rational Resampler” (в дополнение к аудиовыводу). Измените его тип на “Float”. Граф должен быть похож на изображенный ниже.
    amdemod7
  17. Выполните граф. Должен открыться график, и отобразить выходной сигнал. Тем не менее, возможно вы не услышите никакого звука из динамиков. Это связано с тем, что уровень выборок, передаваемых в аудиовывод являются слишком большими для динамика. Мы должны применить аттенюатор, чтобы уменьшить уровень выборок.
  18. Вставьте блок “Multiply Const” (умножение на константу) из категории “Math Operators”, между блоком “Comlex to Mag” и блоком “Rational Resampler”. Установите тип блока “Float”.
  19. Добавьте блок “WX GUI Slider”. Установите его параметры как показано ниже
    amdemod8
  20. В блоке “Multiply Const” установите значение константы, на которую будет производиться умножение, в значение volume, что бы мы могли контролировать его полосой прокрутки. Окончательный вид графа показан ниже.
    amdemod9
  21. Выполните граф. Вероятно вы услышите искаженный сигнал. Убавьте громкость полосой прокрутки, до разборчивости звука. Это вероятно произойдет около значения  3m  (.003). Теперь у вас есть AM приемник.
  22. Дважды щелкните на ФНЧ. Обратите внимание, что он тоже может выполнять прореживание. Задайте прореживание в ФНЧ равное переменной resamp_factor и удалите блок “Rational Resampler”. Фильтр теперь будет обрабатывать обе операции. Проверьте приемник снова.
  23. Подключите блок “WX GUI FFT Sink” к выводу “File Source”, оставив остальную часть графа без изменений. Выполните графа и дабы увидеть расположение других станций на спектре. Обратите внимание, что существует достаточно сильный сигнал на 80 кГц (на самом деле 710 + 80 = 790 кГц).
  24. Для того, чтобы получить этот сигнал, мы должны сдвинуть его вниз до нулевой частоты так, чтобы он смог пройти через фильтр низких частот. Один из способов достижения этой цели является умножение исходного сигнала на синусоиду. Измените граф, как показано ниже. Добавьте источник сигнала и настройте его параметры для вывода косинуса с частотой -80000. Эта отрицательная частота сместит весь спектр влево на 80 кГц. Используйте блок “Multiply Const” для умножения исходного сигнала на косинусоиду, а так же подключите “FFT Sink” к ​​выходу сумматора. Протестируйте приемник.
    amdemod10
  25. Добавьте еще один блок “Variable Slider”, для того чтобы можно было управлять частотой источника косинусоиды. Проверьте граф и продемонстрируйте, что он работает.  Возможно вам придется подстроить уровень громкости для каждой станции. Громкость различается по тому, что станции находились на разных расстояниях от приемника и имели разную мощность передатчика.
  26. Регулировка громкости может быть автоматизирована с помощью блока AGC (АРУ). Этот блок работает путем вычисления среднего значения поступающих выборок, и поддержания уровня выходящих выборок на требуемом уровне. Вставьте блок “AGC2” (находится в разделе “Level Controllers”) между блоками ФНЧ и “Complex to Mag”. Звуковая карта может только принимать значения выборок в диапазоне от -1,0 до 1,0. Нам нужно настроить AGC для регулировки усиления так, что выборочные значения всегда находилсь в этом диапазоне. Этим управляет параметр “Threshold”(порог). Установите значение “Threshold” в 0.2. Это означает, что блок АРУ будет корректировать уровень так, что среднее значение на выходе будет составлять 0.2. Остальные параметры обсудим чуть позднее. Установите параметры “Attack” на 6.25E-4 и “Decay” в 1E-5. Оставьте остальные параметры в их значения по умолчанию. Установитe уровень громкости в диапазоне от 0 до 1. Проверьте приемник снова. Отрегулируйте уровень громкости до комфортного уровня на первой станции, и пройдитесь ввверх и вниз по частоте. Обратите внимание, вам больше не нужно подстраивать громкость. Радио работает так же, как аппаратное радио.

Один комментарий к “GnuRadio: Урок 3, Прием AM сигналов

  1. Сергей

    «Используйте блок “Multiply Const” для умножения исходного сигнала на косинусоиду»
    Здесь типа опечатка. Просто «Multiply».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *