Исправьте символы времени и ошибки смещения частоты при помощи 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)