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