Попытайтесь откорректировать для смещения частоты с помощью объекта синхронизатора несущей. Увеличьте коэффициент затухания синхронизатора и определите, было ли смещение откорректировано.
Установите порядок модуляции, частоту дискретизации, смещение частоты и параметры отношения сигнал-шум.
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