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