Образцовые нарушения канала, такие как синхронизация смещения фазы, смещения несущей частоты и фазы поставщика услуг смещаются для сигнала минимального манипулирования сдвига (MSK). Используйте comm.MSKTimingSynchronizer
и Системные объекты comm.CarrierSynchronizer
, чтобы синхронизировать такие сигналы в получателе. Синхронизатор синхронизации MSK восстанавливает смещение синхронизации, в то время как синхронизатор поставщика услуг восстанавливает смещения фазы и несущая частота.
Инициализируйте системные переменные путем выполнения configureMSKSignalRecoveryEx
скрипта MATLAB. Задайте логическую контрольную переменную recoverTimingPhase
, чтобы позволить синхронизировать восстановление фазы и recoverCarrier
, чтобы включить восстановление фазы и несущая частота.
configureMSKSignalRecoveryEx; recoverTimingPhase = true; recoverCarrier = true;
Задайте демонстрационную задержку, timingOffset
, что модель канала применяется. Создайте переменный дробный объект задержки ввести задержку синхронизации с переданным сигналом.
timingOffset = 0.2; varDelay = dsp.VariableFractionalDelay;
Создайте Системный объект comm.PhaseFrequencyOffset
, чтобы ввести фазу поставщика услуг и смещения частоты к модулируемому сигналу. Поскольку модулятор MSK сверхдискретизировал переданные символы, установите свойство SampleRate
на отношение samplesPerSymbol
и шага расчета, Ts
.
freqOffset = 50; phaseOffset = 30; pfo = comm.PhaseFrequencyOffset(... 'FrequencyOffset',freqOffset, ... 'PhaseOffset',phaseOffset, ... 'SampleRate',samplesPerSymbol/Ts);
Создайте Системный объект comm.AWGNChannel
, чтобы добавить белый Гауссов шум в модулируемый сигнал. Шумовая степень определяется свойством EbNo
, которое является энергией, подведенной к долоту к шумовой степени спектральное отношение плотности. Поскольку модулятор MSK генерирует символы с 1 ваттом мощности, установите свойство степени сигнала Системного объекта канала AWGN к 1.
EbNo = 20 + 10*log10(samplesPerSymbol); chAWGN = comm.AWGNChannel(... 'NoiseMethod','Signal to noise ratio (Eb/No)', ... 'EbNo',EbNo,... 'SignalPower',1, ... 'SamplesPerSymbol',samplesPerSymbol);
Создайте синхронизатор синхронизации MSK, чтобы восстановить фазу синхронизации символа с помощью метода нелинейности четвертого порядка.
timeSync = comm.MSKTimingSynchronizer(... 'SamplesPerSymbol',samplesPerSymbol, ... 'ErrorUpdateGain',0.02);
Создайте синхронизатор поставщика услуг, чтобы восстановить и несущую частоту и фазу. Поскольку совокупность MSK является QPSK со смещением фазы с 0 степенями, установите comm.CarrierSynchronizer
соответственно.
phaseSync = comm.CarrierSynchronizer(... 'Modulation','QPSK', ... 'ModulationPhaseOffset','Custom', ... 'CustomPhaseOffset',0, ... 'SamplesPerSymbol',1);
Симуляция модулирует данные с помощью модуляции MSK. Модулируемые символы проходят через модель канала, которая применяет задержку синхронизации, несущую частоту и сдвиг фазы и аддитивный белый Гауссов шум. Получатель выполняет фазу синхронизации и восстановление фазы и несущую частоту. Наконец, символы сигнала демодулируются, и частота ошибок по битам вычисляется. Скрипт plotResultsMSKSignalRecoveryEx
генерирует графики рассеивания в этом порядке показать эти эффекты:
Нарушения канала
Синхронизация синхронизации
Синхронизация поставщика услуг
В конце симуляции пример отображает фазу синхронизации, частоту и оценки фазы как функция времени симуляции.
for p = 1:numFrames %------------------------------------------------------------------------ % Generate and modulate data %------------------------------------------------------------------------ txBits = randi([0 1],samplesPerFrame,1); txSym = modem(txBits); %------------------------------------------------------------------------ % Transmit through channel %------------------------------------------------------------------------ % % Add timing offset rxSigTimingOff = varDelay(txSym,timingOffset*samplesPerSymbol); % % Add carrier frequency and phase offset rxSigCFO = pfo(rxSigTimingOff); % % Pass the signal through an AWGN channel rxSig = chAWGN(rxSigCFO); % % Save the transmitted signal for plotting plot_rx = rxSig; % %------------------------------------------------------------------------ % Timing recovery %------------------------------------------------------------------------ if recoverTimingPhase % Recover symbol timing phase using fourth-order nonlinearity % method [rxSym,timEst] = timeSync(rxSig); % Calculate the timing delay estimate for each sample timEst = timEst(1)/samplesPerSymbol; else % Do not apply timing recovery and simply downsample the received % signal rxSym = downsample(rxSig,samplesPerSymbol); timEst = 0; end % Save the timing synchronized received signal for plotting plot_rxTimeSync = rxSym; %------------------------------------------------------------------------ % Carrier frequency and phase recovery %------------------------------------------------------------------------ if recoverCarrier % The following script applies carrier frequency and phase recovery % using a second order phase-locked loop (PLL), and removes phase ambiguity [rxSym,phEst] = phaseSync(rxSym); removePhaseAmbiguityMSKSignalRecoveryEx; freqShiftEst = mean(diff(phEst)/(Ts*2*pi)); phEst = mod(mean(phEst),360); % in degrees else freqShiftEst = 0; phEst = 0; end % Save the phase synchronized received signal for plotting plot_rxPhSync = rxSym; %------------------------------------------------------------------------ % Demodulate the received symbols %------------------------------------------------------------------------ rxBits = demod(rxSym); %------------------------------------------------------------------------ % Calculate the bit error rate %------------------------------------------------------------------------ errorStats = BERCalc(txBits,rxBits); %------------------------------------------------------------------------ % Plot results %------------------------------------------------------------------------ plotResultsMSKSignalRecoveryEx; end
Отобразите частоту ошибок по битам и общее количество символов, обработанных калькулятором коэффициента ошибок.
BitErrorRate = errorStats(1) TotalNumberOfSymbols = errorStats(3)
BitErrorRate = 4.0001e-06 TotalNumberOfSymbols = 499982
Алгоритмы восстановления продемонстрированы при помощи графиков совокупности, взятых после синхронизации, несущей частоты и синхронизации фазы поставщика услуг.
Откройте скрипт, чтобы создать перезаписываемую копию этого примера и его вспомогательных файлов. Затем чтобы показать эффекты алгоритмов восстановления, можно включить и отключить логические контрольные переменные recoverTimingPhase
и recoverCarrier
и повторно выполнить симуляцию.
Этот пример использует эти скрипты:
configureMSKSignalRecoveryEx
plotResultsMSKSignalRecoveryEx
removePhaseAmbiguityMSKSignalRecoveryEx