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