Исправьте сдвиг фазы и частоты в шумном КАМ-сигнале с помощью синхронизатора несущей. Затем корректируют смещения, используя как синхронизатор несущей, так и компенсатор грубой частоты.
Задайте параметры примера.
fs = 10000; % Symbol rate (Hz) sps = 4; % Samples per symbol M = 16; % Modulation order k = log2(M); % Bits per symbol
Создайте модулятор QAM и канал AWGN.
channel = comm.AWGNChannel('EbNo',20,'BitsPerSymbol',k,'SamplesPerSymbol',sps);
Создайте объект диаграммы созвездия для визуализации эффектов методов компенсации смещения. Укажите диаграмму созвездия для отображения только последних 4000 выборок.
constdiagram = comm.ConstellationDiagram(... 'ReferenceConstellation',qammod(0:M-1,M), ... 'SamplesPerSymbol',sps, ... 'SymbolsToDisplaySource','Property','SymbolsToDisplay',4000, ... 'XLimits',[-5 5],'YLimits',[-5 5]);
Введите сдвиг частоты 400 Гц и сдвиг фазы 30 градусов.
phaseFreqOffset = comm.PhaseFrequencyOffset(... 'FrequencyOffset',400,... 'PhaseOffset',30,... 'SampleRate',fs);
Генерировать случайные символы данных и применять 16-QAM модуляцию.
data = randi([0 M-1],10000,1); modSig = qammod(data,M);
Создайте объект косинусного фильтра и отфильтруйте модулированный сигнал.
txfilter = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',sps, ... 'Gain',sqrt(sps)); txSig = txfilter(modSig);
Примените сдвиг фазы и частоты, а затем передайте сигнал через канал AWGN.
freqOffsetSig = phaseFreqOffset(txSig); rxSig = channel(freqOffsetSig);
Примените точную коррекцию частоты к сигналу с помощью синхронизатора несущей.
fineSync = comm.CarrierSynchronizer('DampingFactor',0.7, ... 'NormalizedLoopBandwidth',0.005, ... 'SamplesPerSymbol',sps, ... 'Modulation','QAM'); rxData = fineSync(rxSig);
Отображение диаграммы созвездий последних 4000 символов.
constdiagram(rxData)

Даже со временем схождения спиральный характер графика показывает, что синхронизатор несущей еще не компенсировал большой сдвиг частоты. Смещение 400 Гц составляет 1% от частоты дискретизации.
Повторите процесс с компенсатором грубой частоты, установленным перед синхронизатором несущей.
Создайте компенсатор грубой частоты, чтобы уменьшить сдвиг частоты до управляемого уровня.
coarseSync = comm.CoarseFrequencyCompensator('Modulation','QAM','FrequencyResolution',1,'SampleRate',fs*sps);
Передают принятый сигнал в компенсатор грубой частоты, а затем в синхронизатор несущей.
syncCoarse = coarseSync(rxSig); rxData = fineSync(syncCoarse);
Постройте график созвездия сигнала после грубой и точной компенсации частоты.
constdiagram(rxData)

Полученные данные теперь выравниваются с опорной совокупностью.