Как выполнить восстановление фазы несущей в программном обеспечении?

13

Какие есть варианты восстановления фазы сигнала BPSK в программном обеспечении? Единственные ресурсы, которые я могу найти в Интернете, содержат принципиальные схемы - похоже, никто не хочет объяснять это людям, незнакомым с аналоговыми цепями.

Я хотел бы получить любое объяснение того, как восстановление носителей работает в теории, а также хотел бы псевдокод или примеры кода.

Кит
источник
Обычно мы не предоставляем примеры кода, особенно для чего-то такого сложного, как демодулятор BPSK.
Джим Клэй
1
Как указал JimClay, у вас вряд ли найдется кто-то, у кого будет достаточно времени, чтобы предоставить полный исходный код для реализации демодулятора. Однако механизм создания реализации должен быть легким, если вы понимаете концепции. В общем, программный приемник будет иметь структуру, аналогичную соответствующей аппаратной технике (например, синхронизатор на основе нелинейности с прямой связью или метод PLL-bsed-обратной связи). У вас была конкретная топология, на которую вы планировали нацелиться?
Джейсон Р
Спасибо за ваши комментарии @JimClay и JasonR - я не хотел просить рабочий исходный код. Я обновил вопрос, чтобы быть более конкретным: я просто ищу любое объяснение, которое не предполагает понимания аналоговых схем и принципиальных схем.
Кит

Ответы:

25

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

Пакетные сигналы Некоторые сигналы являются пакетными и предоставляют известную последовательность данных, называемую преамбулой или средней амплитудой (в зависимости от того, отображается ли она в начале или в середине пакета). Демодуляторы могут использовать согласованный фильтр, который «ищет» известную последовательность данных и использовать его для определения частоты пакета, фазы и синхронизации символов. Они делают это для каждого пакета, и им не нужно беспокоиться о «дрейфе» (постепенное расстояние, которое накапливается между демодулятором и полученным сигналом по мере накопления небольших ошибок), потому что пакеты обычно достаточно короткие, чтобы дрейф не был проблема.

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

Восстановление перевозчика

Обычно вы знаете, на какой частоте будет искомый сигнал или, по крайней мере, на каком наборе частот он может быть. Тем не менее, даже имея эти знания, вы должны иметь возможность корректировать смещение частоты, поскольку никакие два передатчика не передают на одной частоте. Всегда есть какая-то ошибка. Таким образом, обычный метод состоит в том, чтобы смешать частоту, на которой, как вы думаете, будет сигнал, и затем исправить ошибку остаточной частоты. Это можно сделать с помощью цикла Костасаили путем взятия четвертой степени данных сигнала основной полосы частот и поиска скачка частоты. Должен быть скачок частоты при смещении несущей * 4 (например, если вы возьмете БПФ данных до 4-й степени и увидите скачок частоты при 8300 Гц, это означает, что смещение несущей составляет 8300/4 = 2075 Гц). Это очень эффективный способ получить начальную блокировку смещения частоты. Вы также можете использовать его, чтобы компенсировать дрейф, если вы делаете это время от времени. Есть еще один способ компенсации дрейфа, о котором я расскажу позже.

Фаза несущей

В этот момент, если вы вычерчиваете свои сложные данные в комплексной плоскости (ось X является реальной, ось Y является воображаемой), она должна выглядеть примерно так:

Вращенный БПСК

Если вы присмотритесь, вы увидите две плотные области к концам размытой линии. Это точки созвездия БПСК. Точки между ними - это переходы между точками созвездия. Они прояснятся, как только мы получим символ времени. Причина, по которой линия находится под углом, связана с фазой несущей. Это можно измерить путем зеркального отражения сигнала путем умножения всех точек с отрицательными действительными значениями наеJ*π

Вращенный и зеркальный БПСК

а затем взять среднее значение углов точек. Как только вы вычислили это, вычтите этот угол из всех точек, у которых было удалено смещение несущей, умножив точки наеJ*-ω, Вы также можете компенсировать смещение несущей с помощью этого метода, динамически обновляя смещение фазы. Как только данные скорректированы по фазе, они должны выглядеть примерно так:

Шумный БПСК

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

Символ времени

Обычно вы должны знать априори период символа сигнала, который вы пытаетесь демодулировать. Если вам нужно определить период / частоту символа, вы можете сделать это аналогично тому, как было обнаружено смещение несущей. Вы можете возвести в квадрат данные, которые вызовут скачок частоты вдвое больше частоты символа.

Как и в случае с оператором, вам нужно будет правильно настроить фазу (время), а затем компенсировать смещение. Обычный метод для обеих этих проблем - поиск переходов через ноль. Если шум не очень плохой, он должен пересекать только нулевую точку в середине перехода символа от -1 до 1 или от 1 до -1. Даже если шум вызывает это в середине символа, это случается не очень часто.

Глазная диаграмма

Картинку выше обычно называют «глазной диаграммой» или «глазным рисунком». Он имеет ширину в два символа и имеет много символов, «сложенных» друг над другом. Я не знаю, знакомы ли вы с осциллографами или нет, но вы можете заставить осциллограф показывать такую ​​картинку. Во всяком случае, два "X" являются символьными переходами. Верхние и нижние линии в X - это когда символ переходит от 1 к a -1, а нижние и верхние линии в X - когда символ переходит от -1 к 1. Точка между ними, где Розовая линия - это оптимальное место для выборки данных, чтобы увидеть, является ли символ 1 или -1.

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

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

Шумное созвездие БПСК

Надеюсь, это поможет.

Джим Клэй
источник
Чтобы сделать этот замечательный пост лучше, может быть, вы могли бы добавить раздел восстановления часов перед синхронизацией символа?
LWZ
Думаю, я знаю, что ты имеешь в виду, но я не уверен. Что конкретно вы имели в виду?
Джим Клэй
Спасибо! Я не думал о поиске пересечения нуля или построении реального / мнимого на x / y таким образом. Я просто смотрю на графики фазы и задаюсь вопросом, как синхронизировать все. Еще раз спасибо!
Кит
@JimClay, в начале вашего раздела « Выбор времени символа » вы упомянули, что «вы обычно должны знать период символа сигнала, который вы пытаетесь демодулировать.», И это обычно достигается блоком восстановления тактового сигнала, потому что обычно вы выиграли » отправить часы вместе с вашими данными. Для сигнала BPSK это легко, когда вы можете просто возвести в квадрат свой сигнал, который удаляет данные. Затем вы смотрите на спектр мощности, там должна быть пиковая частота, которая называется тактовым тоном , который дает вам период символа.
LWZ
Добавлен параграф о частоте символов.
Джим Клэй