Правильная синхронизация символа и частота возмещают ошибки при помощи comm.SymbolSynchronizer
и comm.CarrierSynchronizer
Системные объекты.
Инициализируйте параметры симуляции.
M = 16; % Modulation order nSym = 2000; % Number of symbols in a packet sps = 2; % Samples per symbol spsFilt = 8; % Samples per symbol for filters and channel spsSync = 2; % Samples per symbol for synchronizers lenFilt = 10; % RRC filter length
Создайте совпадающую пару Системных объектов фильтра корня повысил косинус (RRC) для передатчика и получателя.
txfilter = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',lenFilt, ... 'OutputSamplesPerSymbol',spsFilt,'Gain',sqrt(spsFilt)); rxfilter = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',lenFilt, ... 'InputSamplesPerSymbol',spsFilt,'DecimationFactor',spsFilt/2,'Gain',sqrt(1/spsFilt));
Создайте Системный объект смещения частоты фазы, чтобы ввести эффект Доплера на 100 Гц.
doppler = comm.PhaseFrequencyOffset('FrequencyOffset',100, ... 'PhaseOffset',45,'SampleRate',1e6);
Создайте переменный Системный объект задержки, чтобы ввести смещения синхронизации.
varDelay = dsp.VariableFractionalDelay;
Создайте поставщика услуг и Системные объекты синхронизатора символа, чтобы откорректировать для эффекта Доплера и синхронизации смещения, соответственно.
carrierSync = comm.CarrierSynchronizer('SamplesPerSymbol',spsSync); symbolSync = comm.SymbolSynchronizer( ... 'TimingErrorDetector','Early-Late (non-data-aided)', ... 'SamplesPerSymbol',spsSync);
Создайте Системные объекты схемы созвездия, чтобы просмотреть результаты.
refConst = qammod(0:M-1,M,'UnitAveragePower',true); cdReceive = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',spsFilt,'Title','Received Signal'); cdDoppler = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',spsSync,'Title','Frequency Corrected Signal'); cdTiming = comm.ConstellationDiagram('ReferenceConstellation',refConst, ... 'SamplesPerSymbol',spsSync,'Title','Frequency and Timing Synchronized Signal');
Основной цикл обработки:
Генерирует случайные символы, и примените модуляцию QAM.
Фильтрует модулируемый сигнал.
Применяет частоту и синхронизирующие смещения.
Передает переданный сигнал через канал AWGN.
Фильтрует полученный сигнал.
Корректирует эффект Доплера.
Корректирует смещение синхронизации.
for k = 1:15 data = randi([0 M-1],nSym,1); modSig = qammod(data,M,'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)