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