понедельник, 1 февраля 2016 г.

Работа с FSK и CPFSK в GnuRadio

Предполагаю, что вы уже слышали о частотном манипулировании, поэтому в этой статье основное внимание я уделю особенностям формирования сигнала FSK в GnuRadio, опишу влияние параметров модуляции на выходной сигнал и связь этих параметров с известными теоретическими описаниями FSK.

Введение.


В сети можно найти много материала по частотной манипуляции FSK и частотной манипуляции с непрерывной фазой CPFSK. Математическое описание этих сигналов рассмотрено очень подробно, например тут http://www.dsplib.ru/content/fsk/fsk.html . 
Очень рекомендую сперва ознакомиться с математикой, понять, что хотел сказать автор, а потом уже переходить к практике.
Кроме того, для дальнейшего чтения, вам нужно иметь представление о комплексных числах и представлении сигнала в комплексном виде. Очень доходчиво этот вопрос раскрыт в видеоуроках от Майкла Оссманна (Michael Ossmann), посмотрите хотя бы урок 6.
Да, и там же есть описание частотной манипуляции урок 9, на которое я буду опираться в дальнейшем.

FSK и CPFSK

В учебниках FSK рисуют в виде механического ключа который подключает на выход то генератор одной частоты, то другой. Очевидно, что такой херни на практике не бывает и когда говориться о FSK, подразумевается CPFSK. Далее речь пойдет именно о CPFSK.

Вот flowgraf формирующий CPFSK сигнала в GnuRadio
Рис.1 Flowgraf формирующий CPFSK сигнала в GnuRadio

Как работает Flowgraf. 

Источник генерирует случайные байты.  Throttle -блок берет из источника 125 тысяч байт в секунду. Блок Unpack для каждого входного байта, который может принимать значения от 0 до 255,  генерирует 8 байт, принимающих значения 0 или 1. Это как бы наши "биты", которые нужно передать, но правильно говорить байты, потому что в GnuRadio нет двоичного типа, и приходится использовать целый байт, чтобы передать 1 или 0.
Дальше последовательность 0 и 1 поступает в модулятор.
На выходе модулятора получается последовательность комплексных чисел в количестве n на один бит.  Это n задается параметром Samples_per_symbol, в дальнейшем будем обозначать его как .
Если изобразить эти числа на комплексной плоскости, то для логической единицы и логического нуля  получится вот такие картины:

Рис. 2 Выход модулятора для логической единицы.

Рис. 3 Выход модулятора для логического нуля.

У этих комплексных чисел одинаковый модуль, задаваемый параметром Amplitude, и разница их аргументов(фаз) равна нормированной частоте девиации в радианах. Для логической единицы эта разница положительна, для логического нуля - отрицательная.
Частота девиации определяется параметром К и 
где    K - индекс модуляции, в отечественной литературе обычно обозначается как m
       - количество отсчетов на один бит.
Если вы внимательно посмотрели  урок 6, то понимаете, что на Рис. 2. нарисован квадратурный сигнал с частотой
а на Рис.3. сигнал с частотой
что и есть та самая частотная манипуляция FSK, с центральной частотой =0.
гдев этих формулах - частота дискретизации.

Квадратурный сигнал.

Если непонятно, как из обычного сигнала получаются точки на комплексной плоскости, откуда берется мнимая составляющая и что такое отрицательная частота - читайте здесь , и в гугле.

Что же там на выходе CPFSK модулятора?

Давайте теперь повнимательнее изучим, что же получается на выходе модулятора. Ну как изучим, тут все уже изучено до нас http://www.dsplib.ru/content/fsk/fsk.html, и лучше мне не написать. Единственно, что многие авторы учебников, особенно отечественных, для описания FSK сигнала отталкиваются от битовой скорости ,  а тот автор по ссылке исходит из непрерывного исходного сигнала, где время передачи одного бита определяется как .  Так же частоты и  там указываются в рад/сек.
В GnuRadio нет непрерывных сигналов и гораздо удобнее использовать такие параметры как количество отсчетов на один символ Samples_per_symbol или и нормирована частота  указанная в радианах.
Связаны они через частоту дискретизации   или Sample_Rate  следующими соотношениями.





В дальнейшем говоря частота сигнала я буду подразумевать нормированную частоту. Более подробно понятие нормированной частоты описано в книге Солонина. Улахович "Основы цифровой обработки сигналов. Курс лекций." на странице 18.

Мгновенная частота

Для начала пропустим наш сигнал через блок Quadrature_demod. Этот блок высчитывает разницу мгновенных фаз между двумя комплексными числами, подаваемыми на вход (угол между ними) и выдает его на выход.

Рис. 4 Изменения частоты сигнала при передаче 1 и 0
Если включить режим изображения "Точки", то видно, что для каждой логической единицы модулятор генерирует 4 отсчета  с положительной частотой , а для логического нуля - с отрицательной частотой 


Рис. 5 Количество отсчетов FSK сигнала на один бит

Спектр CPFSK

Хорошо. Теперь посмотрим на этот сигнал в частотной области.  Спектр CPFSK сигнала представлен на рисунках 6, 7 и 8.

Рис. 6. Индекс модуляции K=2, отсчетов на один бит Samples_per_symbol=6
Рис. 7. Индекс модуляции K=3, отсчетов на один бит Samples_per_symbol=4
Рис. 8. Индекс модуляции K=4, отсчетов на один бит Samples_per_symbol=8
Общим для всех спектров является присутствие характерных "сисек". Каждая такая сиська, основная вместе с боковыми, представляет собой спектр случайной последовательности бит. Ширина такой сиськи зависит от скорости передачи  рад/сек, или  Гц. Если выразить в нормированной частоте, то радиан.
Расстояние между сиськами определяется индексом модуляции. Для FSK индекс модуляции берут больше 2-х, так-как при меньших значениях основные сиськи накладываются друг на друга, что снижает вероятность корректно распознать передаваемый сигнал.
Чтобы сузить полосу частот, занимаемую сигнала, нужно уменьшить ширину сисек и сдвинуть их поближе к друг-другу. Ну сдвинуть просто, достаточно взять индекс модуляции меньше 2-х. А вот чтобы сиськи стали меньше используют фильтр Гаусса. При этом получается GFSK модуляция, о которой с напишу чуть позже.






















Комментариев нет:

Отправить комментарий