Правильный для фазы и смещения частоты в шумном сигнале QAM использование синхронизатора несущей. Затем правильный для смещений с помощью и синхронизатора несущей и крупного компенсатора частоты.
Установите параметры в качестве примера.
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);
Создайте объект схемы созвездия визуализировать эффекты методов компенсации смещения. Задайте схему созвездия, чтобы отобразить только последние 4 000 выборок.
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);
Отобразите схему созвездия последних 4 000 символов.
constdiagram(rxData)
Даже со временем, чтобы сходиться, спиральная природа графика показывает, что синхронизатор несущей еще не компенсировал большое смещение частоты. Смещение на 400 Гц составляет 1% частоты дискретизации.
Повторите процесс с крупным компенсатором частоты, вставленным перед синхронизатором несущей.
Создайте крупный компенсатор частоты, чтобы уменьшать смещение частоты к управляемому уровню.
coarseSync = comm.CoarseFrequencyCompensator('Modulation','QAM','FrequencyResolution',1,'SampleRate',fs*sps);
Передайте полученный сигнал крупному компенсатору частоты и затем синхронизатору несущей.
syncCoarse = coarseSync(rxSig); rxData = fineSync(syncCoarse);
Постройте схему созвездия сигнала после крупной и прекрасной компенсации частоты.
constdiagram(rxData)
Принятые данные теперь выравниваются со ссылочным созвездием.