Попытка исправить смещение частоты с помощью объекта синхронизатора несущей. Увеличьте коэффициент демпфирования синхронизатора и определите, было ли откорректировано смещение.
Установите порядок модуляции, частоту дискретизации, сдвиг частоты и параметры отношения сигнал/шум.
M = 8; fs = 1e6; foffset = 1000; snrdb = 20;
Создайте объект фазового сдвига частоты, чтобы ввести сдвиг частоты в модулированный сигнал. Создайте объект диаграммы созвездий.
pfo = comm.PhaseFrequencyOffset('SampleRate',fs, ... 'FrequencyOffset',foffset); constDiagram = comm.ConstellationDiagram( ... 'ReferenceConstellation',pskmod(0:M-1,M,pi/M));
Создайте объект синхронизатора несущей для коррекции смещения частоты.
carriersync = comm.CarrierSynchronizer('Modulation','8PSK', ... 'DampingFactor',0.05,'NormalizedLoopBandwidth',0.01);
Основной цикл обработки включает в себя следующие шаги:
Создание случайных данных.
Применить 8-PSK модуляцию.
Введите сдвиг частоты.
Передача сигнала по каналу AWGN.
Исправьте смещение частоты.
Отображение диаграммы созвездий.
for k = 1:200 data = randi([0 M-1],1000,1); modSig = pskmod(data,M); txSig = pfo(modSig); rxSig = awgn(txSig,snrdb); syncOut = carriersync(rxSig); constDiagram(syncOut) end

Точки совокупности не могут быть четко идентифицированы, указывая, что синхронизатор несущей не способен компенсировать сдвиг частоты.
Определите нормализованный диапазон втягивания, максимальную задержку синхронизации частоты и максимальную задержку фазовой синхронизации с помощью info функция.
syncInfo = info(carriersync)
syncInfo = struct with fields:
NormalizedPullInRange: 0.0044
MaxFrequencyLockDelay: 78.9568
MaxPhaseLockDelay: 130
Преобразуйте нормированный диапазон втягивания из радиан в циклы. Сравните нормализованное смещение частоты с диапазоном втягивания.
[foffset/fs syncInfo.NormalizedPullInRange/(2*pi)]
ans = 1×2
10-3 ×
1.0000 0.7071
Смещение больше диапазона втягивания. Это причина того, что синхронизатор несущей не смог скорректировать сдвиг частоты.
Изменение коэффициента демпфирования синхронизатора на 0.707.
carriersync.DampingFactor = 0.707;
Повторите основной цикл обработки.
for k = 1:200 data = randi([0 M-1],1000,1); modSig = pskmod(data,M); txSig = pfo(modSig); rxSig = awgn(txSig,snrdb); syncOut = carriersync(rxSig); constDiagram(syncOut) end

В настоящее время имеется восемь наблюдаемых кластеров, которые показывают, что смещение частоты было скорректировано.
Определите новый диапазон втягивания. Нормализованное смещение меньше диапазона втягивания. Это объясняет, почему синхронизатор несущей смог скорректировать смещение.
syncInfo = info(carriersync); [foffset/fs syncInfo.NormalizedPullInRange/(2*pi)]
ans = 1×2
0.0010 0.0100