Какие есть варианты восстановления фазы сигнала BPSK в программном обеспечении? Единственные ресурсы, которые я могу найти в Интернете, содержат принципиальные схемы - похоже, никто не хочет объяснять это людям, незнакомым с аналоговыми цепями.
Я хотел бы получить любое объяснение того, как восстановление носителей работает в теории, а также хотел бы псевдокод или примеры кода.
Ответы:
Чтобы демодулировать сигнал с фазовой манипуляцией, из которых 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.
Надеюсь, это поможет.
источник