Простой цифровой радиоприемник. Часть 2.

Предыдущая статья вызвала некоторой интерес к теме цифрового радио, что меня порадовало. Поэтому я решил разразиться второй частью темы.
Итак, вы уже собрали и проверили работу гетеродинного приемника, о котором я рассказывал в предыдущей статье? Будем надеяться, что да: о). И все почитали соответствующую литературу о том, как он работает, и какие недостатки у него есть. Можно конечно еще многое усовершенствовать в гетеродинном приемнике, и даже заставить его принимать FM модуляцию, ввести АРУ и всякие свистелки переделки. Однако все это был так сказать детский сад и стоит, думаю перейти к более серьезным вещам. Эта часть статьи будет теоретической. Я постараюсь объяснить все как можно проще, так сказать на пальцах.
Чтобы двигаться дальше, нам надо в первую очередь усовершенствовать наш смеситель. Но за нас уже давно все придумали, и это усовершенствование называется — квадратурный смеситель.


Квадратурный смеситель
Выглядит он как-то так.


По сути, это два смесителя о котором я рассказывал в предыдущей части. На первые входы обоих смесителей подается сигнал с нашего АЦП, а на вторые сигналы с гетеродина. Однако, сигналы гетеродина в этом смесителе должны быть сдвинуты на 90 градусов. Т.е. поток данных с АЦП умножается в первом смесителе на синус, а во втором на косинус, формируемый нашим гетеродином. Очевидно, что гетеродин теперь должен иметь два выхода сдвинутых на 90 градусов, т.е. sin, cos. Гетеродин у нас стал квадратурным гетеродином.

Что делает такой смеситель:

Пусть входной сигнал у нас будет X, выходные сигналы обозначим как, I – та часть, которая умножена на косинус, Q – та часть, которая умножена на синус. w = 2пf. Откуда появятся такие уравнения:

I(t) = X(t) * cos (w)
Q(t) = X(t) * sin (w)

Такие чудо сигналы, имеют место на выходе нашего смесителя. Это так называемый квадратурный сигнал, а именно: I – синфазный, Q – квадратурный сигнал. Это вам ничего не напоминает? Да, да, это очень похоже на действительную и мнимую часть сигнала. Или комплексную огибающую.



И уже из этого квадратурного сигнала можно демодулировать все что угодно. Вопрос остается только в сложности и реализуемости конкретного вида демодуляции.

Программная реализация

В принципе если вы читали предыдущую статью, не должно возникнуть никаких особых затруднений. Просто нужно все, что было в гетеродинном приемнике скопипастить еще один раз. И усовершенствовать наш гетеродин, переделав его в квадратурный.

Модернизация DDS колебатора:



Все изменения сводятся к установке квадратурного выхода DDS генератора. Теперь вы можете проделать путь к фазофильтровому или любому другому приемнику.
Подробнее о квадратурном демодуляторе можно почитать, например в [1], [2].

Дециматор – CIC фильтр

Прошлый раз меня просили рассказать о выборе частоты после дециматора. Немного расскажу, как рекомендуется работать при децимации сигнала. Во-первых, децимацию рекомендуется делать ступенями. Т.е. разбивать большой коэффициент децимации на несколько маленьких. Это повышает подавление нежелательных составляющих неминуемо образующихся при децимации. Т.е. алиазинга.
Кроме того, рекомендуется на каждой ступени, увеличивать разрядность, это способствует увеличению динамического диапазона приемника. Конкретные рекомендации, типа: сколько ступеней использовать при таком то коэффициенте децимации дать трудно. Но обычно используют от 2 до 6, в зависимости от коэффициента децимации. Чем больше коэффициент, тем больше ступеней. Например, для гетеродинного приемника с коэффициентом децимации 1024 можно было бы разбить всю децимацию на 4 ступени, с коэффициентами децимации 8, 8, 8, 2. Т.е. 8*8*8*2 = 1024. В реальности эффект от такого разбивания можно увидеть только сделав БПФ и наблюдая за спектром.

Однако все это повышает ресурсоемкость структуры децимации. Так – что тут как говорится, каждый умирает сам.: о)

Выбор коэффициента децимации в первую очередь зависит от применяемого ЦАП, или необходимости синхронизироваться со стандартами частоты дискретизации звука. А так же от желаемой полосы обзора спектра, если в системе есть БПФ. Ну и критерий Найквиста никто не отменял. Кое какую информацию о децимации можно почерпнуть в [3]

Это сладкое слово CORDIC

Собсно, это так называемый appendix, как любят в забугорной лит-ре писать: о). В принципе я вам уже рассказал выше все, что хотел в этой части статьи. А далее я расскажу о том как делают крутые дяди, жаль что тети в этой теме встречаются редко: о).

Дело в том, что такую реализацию квадратурного смесителя, о которой я вам рассказал, сейчас стараются не делать. А вместо двух умножителей с DDS генератором, используют CORDIC алгоритм с аккумулятором фазы. Минус DDS+умножитель заключается в том, что у DDS генератора кроме аккумулятора фазы есть таблица синуса, и эта таблица имеет некоторую точность. И еще, зачастую фазу и таблицу синуса усекают, иначе она бы занимала очень много памяти. Не буду вдаваться в подробности работы DDS генератора, я думаю, это вы найдете в интернете без проблем. А вот бяка заключается в том, что якобы усечение фазы и как следствие погрешность установки отсчетов синуса нехорошо сказывается на SFDR (динамический диапазон свободный от гармоник), и SNR (отношение сигнал шум) приемника.

А вот CORDIC не использует никаких таблиц, а производит чистое умножение на синус и косинус угла, т.е. осуществляет поворот вектора. Я не производил качественных и тем более количественных измерений смесителей, реализованных на умножитель+DDS и на CORDIC алгоритме, поэтому точно сказать не могу что лучше, знаю только что на слух вы там ничего не услышите это точно: о).

Однако, крутые дяди занимающиеся этой темой, чай не дубы, и наверное знают о чем говорят. Поэтому, можно с утверждением сказать, что CORDIC в качестве квадратурного смесителя лучше.

Как это работает

Нас как обычно, спасает логическое ядро CORDIC алгоритма от Xilinx. Там за нас уже все придумано, нам надо его только правильно настроить.



CORDIC от Xilinx в режиме поворота вектора, а это нам как раз и надо, вычисляет следующие уравнения:

X’ = cos (ф) * X – sin (ф) * Y
Y’ = cos (ф) * Y + sin (ф) * X

Но это нам не совсем подходит, нам нужны только косинус и синус. Поэтому на один из входов нам необходимо подать постоянно 0, тогда наши уравнения примут вид:

X’ = cos (ф) * X
Y’ = sin (ф) * X

Можно 0 подавать и на X, на выходе в этом случае будет минус синус. Если забегать вперед, обычно так и делается. Разницы тут конечно особой нет, просто минус синус позволяет согласовываться с БПФ если оно будет в системе, там в этом случае несколько получается попроще, но это уже другая история….
Что такое ф? Очевидно что это угол, на рисунке он обозначен как P, типа фаза – это одно и тоже. Диапазон изменения угла от –Пи до Пи. В реальности это не очень удобно, и при настройке ядра лучше использовать опцию нормализованного угла от -1.0 до 1.0.

Ну вот… Остается понять, что за аккумулятор фазы еще там приклеен. Аккумулятор фазы как раз и есть та штука, которая гонит в наш CORDIC угол ф. Точно так же как раньше DDS гнал отсчеты синуса или косинуса в умножитель, тут аккумулятор фазы гонит угол в CORDIC.

Дак что же это за аккумулятор такой?

Это обычный счетчик с индексом М. А индекс М – это наше слово частоты, меняя это слово, мы меняем скорость приращения фазы и как следствие перестраиваемся по частоте. Короче говоря, это точно такой же узел, который есть в DDS генераторе, или иными словами это тот же DDS генератор только без таблицы синуса.
Аккумулятор фазы, можно родить как самому, благо счетчик осилит каждый, так и использовать уже известное нам логическое ядро DDS генератора в режиме генератора фазы. С этим я думаю, вы разберетесь и сами, не забываем только о том, что у CORDIC алгоритма формат входных и выходных данных дробный. 1QN формат для входных и выходных данных и 2QN для угла. Подробнее, курим даташит

Пару слов о настройке CORDIC ядра:
Режим: вращение вектора (Rotate)
Структура: Конвейерный режим – иначе CORDIC не будет успевать считать семплы.
Формат фазы: Нормализованные радианы.
Обязательно поставить галку Corse Rotation – это включает модуль грубого поворота угла, иначе CORDIC будет считать только до Пи/4. А так же включить компенсацию масштаба, это повышает точность.

Выглядеть это может как то так:





А вот реализацию этого в реальном мире, я оставлю вам на домашнее задание.: о). Кто осилит, пишите: о)
Кстатии, есть даже DDS генераторы не на основе таблицы синуса, а на основе CORDIC алгоритма: о). Ресурсов это требует больше, но зато чистый спектр. Так, чета вспомнилось… к слову: о).
В принципе для радиолюбительских целей CORDIC можно и не юзать, все вполне работает и на связке умножитель+DDS.

Эти крутые дяди – такие крутые…

На последок еще пару слов как делают, и делать в принципе надо. Правда реализация такого в ПЛИС пока довольно сложна, лично я пока не осилил… Но есть к чему стремиться. Это обычно делают там, где попроще — в компьютерной программе.
Представим, что наш квадратурный сигнал мы взяли и подали на БПФ. Что это нам даст? Это нам даст спектр участка диапазона в реальном времени.



Нарисовано схематически и не в масштабе, чисто чтобы понять смысл. На этом спектре (верхний график) видно, что есть какой-то сигнал, и мы его хотим послушать. Как нам это сделать? Полоса пропускания приемника, всего 3Кгц, а сигнал на спектре находится в районе, к примеру на частоте 50 Кгц, т.е. частота гетеродина + 50 Кгц. Самый простой метод сместить частоту гетеродина на 50 Кгц вверх, чтобы этот сигнал оказался в полосе пропускания НЧ фильтра. Но это как бы не особо… и известно еще со времен Попова…
Но есть другой метод, не трогая частоту гетеродина, тупо взять и скопировать этот участок спектра прямо в полосу пропускания приемника. Сделать ОБПФ и радоваться…

Т.е. мы можем просматривать диапазон в реальном времени и слушать разные его участки, не трогая настройку приемника. Профит? Ага…: о). Это чисто на пальцах, там есть куча всяких подводных камней, но это уже совсем другая история… и выходит далеко за рамки простого цифрового приемника.

Ну вот, собственно и все на этот раз… Удачных экспериментов и дальнего приема: о). Надеюсь было интересно тем кому интересно: о).

Спасибо за внимание!

Для общего развития:
1. dspsys.org/vsa/23-iqdemod
2. www.dsplib.ru/content/quadosc/quadosc.html
3. www.paradiddle.us/custom-dsp-solutions/dsp-radio2
4. www.eurojournals.com/ejsr_30_4_03.pdf
5. www.mhprofessional.com/downloads/products/0071485473/SkolnikCh25.pdf
  • +9
  • 03 февраля 2013, 15:48
  • RezonanS

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

RSS свернуть / развернуть
Спасибо, интересно, про CORDIC не знал.
БПФ в обработке НЧ используется в большинстве программ SDR причем комплексное, что для ПЛИС не легкое дело. Но есть другой путь, он описан в книжках Полякова.
Нужно IQ сигналы опять смешивать cos\sin частотой какой-то НЧ, потом сложить, получим одну боковую, и без фазовращателей.
Если не нужно переносить спектр, то частота может быть и 1.5кГц.
0
Фазофильтровой приемник это понятно, но не особо кошерно… Для SSB преобразование Гильберта всех спасет. Хотя в принципе это те же яйца только в профиль.
0
Спасибо за статьи. Когда-то приемниками прямого преобразования интересовался, книжка Полякова до сих пор где-то валяется. Признаться, не думал, что все продвинулось настолько далеко в этом вопросе.
0
  • avatar
  • evsi
  • 04 февраля 2013, 13:13
Дык квадратурная обработка сейчас лежит в основе почти всех современных радиосистем, будь то радиолокация, радионавигация, или цифровая радиосвязь.
0
читатется как роман — на одном дыхании :)
0
Хорошая, годная, греющая душу плисоводам статья =)

Представим, что наш квадратурный сигнал мы взяли и подали на БПФ. Что это нам даст? Это нам даст спектр участка диапазона в реальном времени.

Небольшая ремарка. Не совсем в реальном времени… БПФ работает по секциям сигнала, а не скользит по выборкам. Поэтому с ним всячески извращаются, перекрывая секции, вводя весовые коэффициенты и т. д.
0
Это понятно. Реальное время это всего лишь термин зависящий от тех временных ограничений которые ты задал :). В приемнике даже секундные задержки никак пользователем не обнаружатся, главное не потерять данные.
0
В приемнике даже секундные задержки никак пользователем не обнаружатся,
Обнаружатся, еще как обнаружатся, например сигналы точного времени: пи, пи, пи, пи, пи, пииии!!!
0
  • avatar
  • Aneg
  • 08 февраля 2013, 01:00
Да ну, а поподробнее про методику
пи, пи, пи, пи, пи, пииии!!!
как вы там еще как обнаружите...? :)
0
Некоторые вещательные радиостанции, передают сигналы точного времени. Эти сигналы передаются каждый час, по ним я выставляю время на своих наручные часах. На слух это и есть, то самое:
пи, пи, пи, пи, пи, пииии!!!
0
  • avatar
  • Aneg
  • 08 февраля 2013, 12:06
Дак как вы обнаружите задержку в приемнике, вы так и не ответили.
0
Мои часы будут отставать на несколько секунд, после их корректировки вышеописанным методом, вот так задержка и обнаружится))))
0
вот тут про кордик bsvi.ru/cordic-dlya-chajnikov/
но на англиском вот еслиб кто перевел причем не автоматом это я и сам могу
а так чтоб читать было приятно
0
Можно конечно еще многое усовершенствовать в гетеродинном приемнике, и даже заставить его принимать FM модуляцию, ввести АРУ и всякие свистелки переделки. Однако все это был так сказать детский сад и стоит, думаю перейти к более серьезным вещам.
Автор, вы наверно пошутили))) уж очень там все по детски, особенно настройка контуров)))
0
Вам неплохо бы хотя бы название темы прочитать для начала.
0
Ы-ы-ы-ы))) А я сначала подумал что автор имеет ввиду аналоговый супергетеродин. Читал я то полностью, но без предыдущей части не то надумалось. А автор молодец. Кстати тоже уже знаком с ПЛИС Xilinx, весьма полезная штука. Всегда хотел что то подобное (цифровой прием) на них реализовать.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.