Восстановитесь с синхронизации символа и ошибок смещения частоты при помощи объектов comm.SymbolSynchronizer
и comm.CarrierSynchronizer
.
Задайте выборки на параметр символа. Создайте совпадающую пару повышенных объектов фильтра косинуса.
sps = 8; txfilter = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',10, ... 'OutputSamplesPerSymbol',sps,'Gain',sqrt(sps)); rxfilter = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',10, ... 'InputSamplesPerSymbol',sps,'DecimationFactor',sps/2,'Gain',sqrt(1/sps));
Создайте объект PhaseFrequencyOffset
ввести эффект Доплера на 100 Гц.
doppler = comm.PhaseFrequencyOffset('FrequencyOffset',100, ... 'PhaseOffset',45,'SampleRate',1e6);
Создайте переменный объект задержки ввести смещения синхронизации.
varDelay = dsp.VariableFractionalDelay;
Создайте поставщика услуг, и синхронизатор символа возражает, чтобы исправить для эффекта Доплера и смещения синхронизации, соответственно.
carrierSync = comm.CarrierSynchronizer('SamplesPerSymbol',2); symbolSync = comm.SymbolSynchronizer(... 'TimingErrorDetector','Early-Late (non-data-aided)', ... 'SamplesPerSymbol',2);
Создайте объекты схемы совокупности просмотреть результаты.
refConst = qammod(0:15,16,'UnitAveragePower',true); cdReceive = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',sps,'Title','Received Signal'); cdDoppler = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',2,'Title','Frequency Corrected Signal'); cdTiming = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',2,'Title','Frequency and Timing Synchronized Signal');
Выполните следующие операции:
Сгенерируйте случайные символы и примените модуляцию QAM.
Отфильтруйте модулируемый сигнал.
Примените частоту и синхронизирующие смещения.
Передайте переданный сигнал через канал AWGN.
Правильный для эффекта Доплера.
Отфильтруйте полученный сигнал.
Правильный для синхронизации смещается.
for k = 1:15 data = randi([0 15],2000,1); modSig = qammod(data,16,'UnitAveragePower',true); txSig = txfilter(modSig); txDoppler = doppler(txSig); txDelay = varDelay(txDoppler,k/15); rxSig = awgn(txDelay,25); rxFiltSig = rxfilter(rxSig); rxCorr = carrierSync(rxFiltSig); rxData = symbolSync(rxCorr); end
Постройте схемы совокупности полученного сигнала, частота исправленный сигнал, и частота и синхронизация синхронизируемого сигнала. В то время как определенные точки совокупности не могут быть идентифицированы в полученном сигнале и только частично идентифицированы в частоте, исправленный сигнал, синхронизация и частота синхронизировались, сигнал выравнивается с ожидаемыми точками совокупности QAM.
cdReceive(rxSig)
cdDoppler(rxCorr)
cdTiming(rxData)