Этот пример показывает, как измерить вероятность битовой ошибки (BER) и количество блоков передачи линии связи (CLTU), потерянных в линии связи Консультативного комитета по системам космических данных (CCSDS). Пример добавляет радиочастотные (RF) эффекты переднего конца и аддитивный белый гауссов шум (AWGN) к ссылке.
CCSDS TC обычно используется для отправки команд от наземной станции к космическому аппарату. Приемники CCSDS TC подвергаются большим частотным ошибкам из-за неопределенности частоты в приемниках космических аппаратов и доплеровского сдвига частоты. Чтобы компенсировать большие смещения частоты, наземные станции выполняют развертку несущей по частоте или используют сбор на основе FFT в космическом аппарате во время сбора спутника. Этот пример показывает, как добавить смещение частоты 200 кГц к сигналу и использовать сбор на основе FFT для коррекции.
Для каждой точки отношения сигнал/шум (ОСШ) формы TC CCSDS, которые генерируются с CLTU и последовательностью приема, искажаются искажениями RF и передаются через канал AWGN. Пример показывает, как смоделировать эти искажения RF:
Несущая частота и смещение фазы
Смещение частоты и фазы поднесущей
Смещение фазы синхронизации
Приемник TC CCSDS компенсирует ослабления, и передаточные системы координат (TF) в CLTU восстанавливаются. Этот пример поддерживает схемы модуляции BPSK, PCM/PM/biphase-L и PCM/PSK/PM. Нарушения поднесущей применяются только со схемой модуляции PCM/PSK/PM. Эти схемы модуляции [8] используются, чтобы сгенерировать сигнал TC CCSDS в форме синфазной квадратурной (IQ) выборки основной полосы частот.
PCM/PSK/PM: Линейный закодированный сигнал в соответствии с форматом импульсно-кодовой модуляции (PCM) является фазовой манипуляцией (PSK), модулированной на поднесущей синусоидальной волны, а затем фазовой модуляции (PM) на остаточной несущей.
Кодированные данные PCM/PM/biphase-L: Biphase-L (Manchester) модулируются по фазе на остаточной несущей.
BPSK: Подавлена модуляция несущей при помощи данных без возврата к нулю (NRZ) на несущей.
Этот рисунок показывает шаги обработки, участвующие в восстановлении систем координат передачи.
Этот рисунок показывает операции приемника, которые включают компенсацию искажений RF, демодуляцию системы координат синхронизацию и декодирование передаточных систем координат.
Чтобы восстановить TF из полученной формы волны, выполните следующие шаги.
Коррекция грубой частоты: Используйте основанный на БПФ алгоритм, чтобы оценить смещение частоты.
Несущая частота и отслеживание фазы: Используйте цикл фазовой автоподстройки второго порядка (ФАП) [1] для отслеживания несущей.
Поднесущая частота и отслеживание фазы: Используйте схему Костаса второго порядка [1] для отслеживания поднесущей.
Отслеживание и демодуляция временных параметров символов: Используйте цикл отслеживания переходов данных второго порядка (DTTL) [3] для временной синхронизации и демодуляции символов [1].
Кадровая синхронизация и декодирование: Используйте алгоритм, основанный на жестких символах, для кода Бозе Чаудхури Хокквенгема (BCH) и алгоритм, основанный на мягких символах, для кода с низкой плотностью проверки четности (LDPC).
Этот рисунок показывает шаги обработки, которые участвуют в системе координат синхронизации и декодировании TF [4].
Поиск начальной последовательности: Когда канальное кодирование является BCH, входящий битовый поток просматривается по битам для шаблона начальной последовательности. Когда канальным кодированием является LDPC, входящий поток мягких символов просматривается с помощью мягкого коррелятора для шаблона начальной последовательности. Для BCH допустимое количество ошибок в начальной последовательности составляет 0 или 1 (в зависимости от режима декодирования). В режиме обнаружения ошибок допустимое количество ошибок в начальной последовательности составляет 0. В режиме исправления ошибок допустимое количество ошибок в начальной последовательности равняется 1.
Декодирование: Когда обнаруживается стартовая последовательность, начинается операция декодирования. Кодовые слова (CW) декодируются и опционально удаляются.
Отклонение CW или обнаружение хвостовой последовательности: Если у декодера есть какой-либо отказ декодирования или какие-либо некорректированные ошибки в декодированном выходе, данные из этого неудачного CW не передаются в операции подслоя ссылки передачи данных. CW отклоняется, и поиск начальной последовательности перезапускается. Если присутствует хвостовая последовательность, найдите хвостовую последовательность, чтобы обнаружить конец CLTU. Для декодирования BCH используется способ отбраковки CW. Для LDPC используйте корреляцию хвостовой последовательности или отказ CW. Когда хвостовая последовательность не используется, поиск начальной последовательности должен возобновиться в начале некорректированного CW. Когда используется хвостовая последовательность, поиск может возобновиться в конце некорректированного CW.
Сконфигурируйте количество выборок на символ и частоту дискретизации.
% Samples per symbol % Due to the low symbol rate and 200 KHz frequency offset, a large value of % 200 samples per symbol must be used as a default value with % PCM/PSK/PM modulation. For BPSK and PCM/PM/biphase-L modulation, a % default value of 20 samples per symbol is used (due to medium and high % symbol rates). sps = 20; % Symbol rate % The symbol rates specified in TC for each modulation are: % - For PCM/PSK/PM modulation, the coded symbol rates are 4000, 2000, 1000, % 500, 250, 125, 62.5, 31.25, 15.625, or 7.8125 symbols/s (as specified in % CCSDS TC recommendation [6]). % - For PCM/PM/biphase-L modulation, the coded symbol rates are 8000, 16000, % 32000, 64000, 128000, or 256000 symbols/s. % - For BPSK modulation, the coded symbol rates are 1000, 2000, 4000, 8000, % 16000, 32000, 64000, 128000, 256000, 512000, 1024000, or 2048000 % symbols/s. symbolRate = 2048000;
DTTL для синхронизации символов работает лучше с четным количеством выборок на символ. Для нечетного количества выборок на символ оценка ошибки синхронизации ненулевая при идеальном отслеживании смещения синхронизации. Ненулевая ошибка синхронизации уводит DTTL от идеального условия отслеживания.
Сконфигурируйте и отобразите параметры передачи TC CCSDS.
cfg = ccsdsTCConfig; cfg.ChannelCoding = "BCH"; cfg.Modulation = "BPSK"; cfg.ModulationIndex = 1.2; % Applicable with PCM/PSK/PM and PCM/PM/biphase-L. Supported range in this example is [0.2 1.5]. if strcmpi(cfg.Modulation,"PCM/PSK/PM") cfg.SymbolRate = symbolRate; end cfg.SamplesPerSymbol = sps
cfg = ccsdsTCConfig with properties: DataFormat: "CLTU" ChannelCoding: "BCH" HasRandomizer: 1 Modulation: "BPSK"
Сконфигурируйте параметры приемника.
normLoopBWCarrier = 0.005; % Normalized loop bandwidth for carrier synchronizer normLoopBWSubcarrier = 0.00005; % Normalized loop bandwidth for subcarrier synchronizer normLoopBWSymbol = 0.005; % Normalized loop bandwidth for symbol synchronizer
Чтобы уменьшить вклад шума в цикле, уменьшите шумовую полосу. Получение по запросу-в области значений смещения частоты также уменьшается из-за уменьшения полосы пропускания цикла. Когда вы используете небольшой цикл полосу пропускания в модулях синхронизации, приобретение занимает больше времени, чтобы сходиться. Чтобы улучшить эффективность при низких ОСШ, уменьшите цикл полосу пропускания и используйте более высокое значение для длины последовательности сбора. Если циклы не отслеживают смещения, рассмотрите увеличение полосы пропускания цикла, чтобы увеличить область значений получения по запросу-в.
Этот пример выполняет две передачи пакетов для количества энергии на символ в точки отношения спектральной плотности степени шума (Es/No). Es/No может быть вектором или скаляром. Для статистически допустимых результатов BER запустите симуляцию для по крайней мере 1000 количества передач.
numBurst = 2; % Number of burst transmissions EsNodB = [8 8.5]; % Es/No in dB SNRIn = EsNodB - 10*log10(sps); % SNR in dB from Es/No
Искаженный сигнал TC CCSDS с последовательностью приема и одним CLTU обрабатывается за раз. Чтобы синхронизировать полученные данные и восстановить TF, эти шаги обработки происходят.
Сгенерируйте биты в TC TF.
Сгенерируйте сигнал TC для последовательности приема с переменными таковыми и нулями.
Сгенерируйте сигнал TC CCSDS для TF со случайными битами.
Применить формирование импульсов с помощью квадратного корня фильтра приподнятого косинуса (применимо только с модуляцией BPSK).
Примените частоту поднесущей и смещение фазы (применимо только с модуляцией PCM/PSK/PM).
Примените несущую частоту и смещение фазы.
Примените смещение фазы синхронизации.
Пропустите переданный сигнал через канал AWGN.
Исправьте грубую частоту и смещение фазы.
Фильтрация принимаемого сигнала.
Исправьте частоту несущей и смещение фазы.
Исправьте частоту поднесущей и смещение фазы (применимо только с модуляцией PCM/PSK/PM).
Исправьте смещение синхронизации и демодуляцию символов.
Обнаружение запуска CLTU и декодирование TF.
% Initialization of variables to store BER and number of CLTUs lost bitsErr = zeros(length(SNRIn),1); cltuErr = zeros(length(SNRIn),1); % Square root raised cosine (SRRC) transmit and receive filter objects for BPSK if strcmpi(cfg.Modulation,"BPSK") % SRRC transmit filter object txfilter = comm.RaisedCosineTransmitFilter; txfilter.RolloffFactor = 0.35; % Filter rolloff txfilter.FilterSpanInSymbols = 6; % Filter span txfilter.OutputSamplesPerSymbol = sps; % SRRC receive filter object rxfilter = comm.RaisedCosineReceiveFilter; rxfilter.RolloffFactor = 0.35; % Filter rolloff rxfilter.FilterSpanInSymbols = 6; % Filter span rxfilter.DecimationFactor = 1; rxfilter.InputSamplesPerSymbol = sps; end % Sample rate if strcmpi(cfg.Modulation,"PCM/PM/biphase-L") % In CCSDS TC recommendation [6] section 2.2.7, coded symbol rates are % defined prior to biphase-L encoding. fs = 2*sps*symbolRate; % Biphase-L encoding has 2 symbols for each bit else fs = sps*symbolRate; end for iSNR = 1:length(SNRIn) % Set the random number generator to default rng default % SNR value in the loop SNRdB = SNRIn(iSNR); % Initialization of error computing parameters totNumErrs = 0; numErr = 0; totNumBits = 0; cltuLost = 0; for iBurst = 1:numBurst % Acquisition sequence with 800 octets acqSeqLength = 6400; acqBits = repmat([0;1], 0.5*acqSeqLength, 1); % Alternating ones and zeros with zero as starting bit, starting bit can be either zero or one % CCSDS TC Waveform for acquisition sequence % Maximum subcarrier frequency offset specified in CCSDS TC is % ±(2*1e-4)*fsc, where fsc is the subcarrier frequency subFreqOffset = 3.2; % Subcarrier frequency offset in Hz subPhaseOffset = 4; % Subcarrier phase offset in degrees % Frequency offset in Hz if strcmpi(cfg.Modulation,'PCM/PSK/PM') % Signal modulation along with subcarrier frequency and phase offset acqSymb = HelperCCSDSTCSubCarrierModulation(acqBits,cfg,subFreqOffset,subPhaseOffset); else % Signal modulation as per the specified scheme in CCSDS telecommmand % Subcarrier impairments are not applicable with BPSK and PCM/PM/biphase-L cfg.DataFormat = 'acquisition sequence'; acqSymb = ccsdsTCWaveform(acqBits,cfg); cfg.DataFormat = 'CLTU'; end % CCSDS TC waveform for CLTU transferFramesLength = 640; % Number of octets in the transfer frame inBits = randi([0 1],transferFramesLength,1); % Bits in the TC transfer frame if strcmpi(cfg.Modulation,'PCM/PSK/PM') % Encoded bits after TC synchronization and channel coding sublayer operations [~,encBits] = ccsdsTCWaveform(inBits,cfg); % Signal modulation along with subcarrier frequency and phase offset waveSymb = HelperCCSDSTCSubCarrierModulation(encBits,cfg,subFreqOffset,subPhaseOffset); else waveSymb = ccsdsTCWaveform(inBits,cfg); end % CCSDS TC waveform with acquisition sequence and CLTU waveform = [acqSymb;waveSymb]; % Transmit filtering for BPSK if strcmpi(cfg.Modulation,'BPSK') % Pulse shaping using SRRC filter data = [waveform;zeros(txfilter.FilterSpanInSymbols,1)]; txSig = txfilter(data); else txSig = waveform; end % Add carrier frequency and phase offset freqOffset = 200000; % Frequency offset in Hz phaseOffset = 20; % Phase offset in degrees if fs <= (2*(freqOffset+cfg.SubcarrierFrequency)) && strcmpi(cfg.Modulation,'PCM/PSK/PM') error('Sample rate must be greater than twice the sum of frequency offset and subcarrier frequency'); elseif fs <= (2*freqOffset) error('Sample rate must be greater than twice the frequency offset'); end pfo = comm.PhaseFrequencyOffset('FrequencyOffset',freqOffset, ... 'PhaseOffset',phaseOffset,'SampleRate',fs); txSigOffset = pfo(txSig); % Timing offset as an integer number of samples timingErr = 5; % Timing error must be <= 0.4*sps delayedSig = [zeros(timingErr,1);txSigOffset]; % Pass the signal through an AWGN channel rxSig = awgn(complex(delayedSig),SNRdB,'measured',iBurst); % Coarse carrier frequency synchronization if strcmpi(cfg.Modulation,'PCM/PSK/PM') % Coarse carrier frequency synchronization for PCM/PSK/PM coarseSync = HelperCCSDSTCCoarseFrequencyCompensator('FrequencyResolution',100,... 'SampleRate',fs); else % Coarse carrier frequency synchronization for BPSK and PCM/PSK/biphase-L coarseSync = comm.CoarseFrequencyCompensator( ... 'Modulation','BPSK','FrequencyResolution',100, ... 'SampleRate',fs); end % Compensation for coarse frequency offset [rxCoarse,estCoarseFreqOffset] = coarseSync(rxSig); % Receive filtering if strcmpi(cfg.Modulation,'BPSK') % SRRC receive filtering for BPSK rxFiltDelayed = rxfilter(rxCoarse); rxFilt = rxFiltDelayed(rxfilter.FilterSpanInSymbols*sps+1:end); else % Low-pass filtering for PCM/PSK/PM and PCM/PSK/biphase-L % Filtering is done with a lowpass filter to reduce the effect of % noise to the carrier phase tracking loop b = fir1(40,0.3); % Coefficients for 40th-order lowpass filter with cutoff frequency = 0.3*fs/2 rxFiltDelayed = filter(b,1,[rxCoarse;zeros(0.5*(length(b)-1),1)]); % Removal of filter delay rxFilt = rxFiltDelayed(0.5*(length(b)-1)+1:end); end % Fine frequency and phase correction if strcmpi(cfg.Modulation,'BPSK') fineSync = comm.CarrierSynchronizer('SamplesPerSymbol',sps, ... 'Modulation','BPSK','NormalizedLoopBandwidth',normLoopBWCarrier); else fineSync = HelperCCSDSTCCarrierSynchronizer('SamplesPerSymbol', ... cfg.SamplesPerSymbol,'NormalizedLoopBandwidth',normLoopBWCarrier); end [rxFine,phErr] = fineSync(rxFilt); % Subcarrier frequency and phase correction if strcmpi(cfg.Modulation,'PCM/PSK/PM') subSync = HelperCCSDSTCSubCarrierSynchronizer('SamplesPerSymbol',sps, ... 'NormalizedLoopBandwidth',normLoopBWSubcarrier); [rxSub,subCarPhErr] = subSync(real(rxFine)); else rxSub = real(rxFine); end % Timing synchronization and symbol demodulation timeSync = HelperCCSDSTCSymbolSynchronizer('SamplesPerSymbol',sps, ... 'NormalizedLoopBandwidth',normLoopBWSymbol); [rxSym,timingErr] = timeSync(rxSub); % Search for start sequence and bit recovery bits = HelperCCSDSTCCLTUBitRecover(rxSym,cfg,'Error Correcting',0.8); bits = bits(~cellfun('isempty',bits)); % Removal of empty cell array contents % Length of transfer frames with fill bits if strcmpi(cfg.ChannelCoding,'BCH') messageLength = 56; else messageLength = 0.5*cfg.LDPCCodewordLength; end frameLength = messageLength*ceil(length(inBits)/messageLength); if (isempty(bits)) || (length(bits{1})~= frameLength) ||(length(bits)>1) cltuLost = cltuLost + 1; else numErr = sum(abs(double(bits{1}(1:length(inBits)))-inBits)); totNumErrs = totNumErrs + numErr; totNumBits = totNumBits + length(inBits); end end bitsErr(iSNR) = totNumErrs/totNumBits; cltuErr(iSNR) = cltuLost; % Display of bit error rate and number of CLTUs lost fprintf([['\nBER with ', num2str(SNRdB+10*log10(sps)) ],' dB Es/No : %1.2e\n'],bitsErr(iSNR)); fprintf([['\nNumber of CLTUs lost with ', num2str(SNRdB+10*log10(sps)) ],' dB Es/No : %d\n'],cltuErr(iSNR)); end
BER with 8 dB Es/No : 0.00e+00
Number of CLTUs lost with 8 dB Es/No : 0
BER with 8.5 dB Es/No : 0.00e+00
Number of CLTUs lost with 8.5 dB Es/No : 0
Когда каждая точка Es/No завершена, результаты BER для симуляции строятся. bitsErr
- массив с измеренным BER для всех моделируемых точек Es/No. Рисунок показывает результат симуляции, которые получаются с 10 000 количеством передач и точками Es/No в области значений [4 7.5].
Этот пример использует большое значение длины последовательности приема (800 октетов), чтобы улучшить эффективность синхронизаторов при низких значениях ОСШ. Эта таблица показывает нормированные значения полосы пропускания цикла и выборки на символ, используемые в симуляции с каждой схемой модуляции, для последовательности приема 800 октетов.
T = table({'BPSK';'PCM/PSK/PM';'PCM/PM/biphase-L'},[0.005; 0.0002; 0.0003], ... {'Not Applicable';0.00005;'Not Applicable'},[0.005; 0.0005; 0.0005], ... [20; 200; 20],[2048000; 4000; 256000],'VariableNames',{'Modulation','Carrier Synchronizer',... 'Subcarrier Synchronizer','Symbol Synchronizer','Samples per symbol','Symbol rate'})
T=3×6 table
Modulation Carrier Synchronizer Subcarrier Synchronizer Symbol Synchronizer Samples per symbol Symbol rate
____________________ ____________________ _______________________ ___________________ __________________ ___________
{'BPSK' } 0.005 {'Not Applicable'} 0.005 20 2.048e+06
{'PCM/PSK/PM' } 0.0002 {[ 5.0000e-05]} 0.0005 200 4000
{'PCM/PM/biphase-L'} 0.0003 {'Not Applicable'} 0.0005 20 2.56e+05
Этот пример можно использовать для дальнейшего изучения этих модулей синхронизации.
Синхронизация поставщика услуг: Чтобы улучшить точность оценки фазы, можно уменьшить шумовой вклад в циклы отслеживания, уменьшив нормализованную полосу пропускания. Уменьшение полосы пропускания цикла уменьшает область значений получения по запросу-в, и для сходимости захвата требуется больше времени.
Синхронизация поднесущей: Можно построить график предполагаемого смещения поднесущей, чтобы идентифицировать более точный цикл полосу пропускания. Чтобы помочь улучшить точность оценки частоты поднесущей, можно увеличить частоту дискретизации и ОСШ.
Синхронизация символов: DTTL для синхронизации символов хорошо работает при большем количестве выборок на символ. Когда вы увеличиваете выборки на символ, разрешение увеличивается, и эффективность DTTL улучшается. Слишком много выборок на символ может уменьшить ОСШ и повлиять на эффективность. Если ОСШ меньше -15 дБ (из-за большого количества выборок на символ), эффективность циклов отслеживания затронута.
Для любого цикла на основе PLL, чтобы работать с очень низким ОСШ, шумовая полоса должна быть очень низкой. Эта низкая полоса цикла уменьшает получение по запросу-в области значений. Для CLTU с кодированием канала LDPC, если количество потерянных CLTU велико, можно уменьшить threshold
значение для обнаружения начальной последовательности в вспомогательной функции HelperCCSDSTCCLTUBitRecover
. Можно также попробовать улучшить результаты BER, выбрав только CLTU с очень высокой нормализованной метрикой корреляции с начальной последовательностью. Чтобы максимизировать обнаружение системы координат и минимизировать ложное предупреждение, в этом примере в качестве порога обнаружения используется 0,8. Чтобы уменьшить ложное предупреждение, можно увеличить пороговое значение обнаружения. Если вы увеличиваете пороговое значение обнаружения, скорость обнаружения системы координат уменьшается.
Максимальное смещение частоты поднесущей, заданное в рекомендации CCSDS TC [6], является , где - частота телекоммуникационной поднесущей. Необходимо учитывать смещение частоты максимум 3,2 Гц или 1,6 Гц с поднесущей синусоиды 16 кГц или 8 кГц, соответственно. Можно построить график предполагаемого смещения частоты поднесущей, чтобы проанализировать эффективность отслеживания поднесущей. Когда синхронизатор сходится, среднее значение оценки приблизительно равно значению смещения входной поднесущей частоты 3,2 Гц.
if strcmpi(cfg.Modulation,'PCM/PSK/PM') estSubCarFreqOffset = diff(subCarPhErr)*fs/(2*pi); rmean = cumsum(estSubCarFreqOffset)./(1:length(estSubCarFreqOffset))'; plot(rmean) xlabel('Symbols') ylabel('Estimated Subcarrier Frequency Offset (Hz)') title('PCM/PSK/PM: Subcarrier Frequency Offset') grid on end
В примере используются следующие вспомогательные функции:
HelperCCSDSTCCoarseFrequencyCompensator: Выполните грубую синхронизацию несущей частоты
HelperCCSDSTCCarrierSynchronizer: Выполните точную синхронизацию поставщика услуг
HelperCCSDSTCSubCarrierSynchronizer: Выполните синхронизацию поднесущей
HelperCCSDSTCSymbolSynchronizer: Выполните временную синхронизацию символов и демодуляцию
HelperCCSDSTCSubCarrierModulation: Выполните модуляцию поднесущей со смещением частоты и фазы
HelperCCSDSTCCLTUBitRecover: Поиск начальной последовательности и восстановления битов
Дж. Виля-Вальс, М. Наварро, П. Клозас и М. Бертинелли, «Проблемы синхронизации в дальней космической связи», журнал IEEE Aerospace and Electronic Systems Magazine, vol. 34, no. 1, pp. 16-27, Jan. 2019.
M. Baldi et al., «The State-of-the-art space mission telecommand receivers», IEEE Aerospace and Electronic Systems Magazine, vol. 32, no. 6, pp. 4-15, June 2017.
S. Million and S. Hinedi, «Эффекты плотности перехода символов на эффективность цикла отслеживания перехода данных при низких коэффициентах сигнал-шум», IEEE International Conference on Communications ICC '95, Сиэтл, WA, USA, 1995, pp. 1036-1040 vol.2.
Синхронизация TC и кодирование канала. Рекомендация по стандартам системы космических данных, CCSDS 231.0-B-3. Синяя книга. Выпуск 3. Вашингтон, округ Колумбия: CCSDS, Сентябрь 2017 года.
Синхронизация TC и кодирование канала. Сводные данные концепции и обоснования. CCSDS 230.1-G-2. Зеленая книга. Выпуск 2. Вашингтон, округ Колумбия: CCSDS, ноябрь 2012 года.
Системы радиочастоты и модуляции - Часть 1. Земные станции и космические аппараты. CCSDS 401.0-B-29. Синяя книга. Выпуск 29. Вашингтон, округ Колумбия: CCSDS, март 2019.
Майкл Райс, цифровые коммуникации - подход в дискретном времени. Нью-Йорк: Prentice Hall, 2008.
Нгуен, Т. М., У. Л. Мартин и Хен-Гул Йе. «Необходимая полоса пропускания, нежелательная эмиссия и Степень данной Эффективности для Невязки и подавленных несущих систем - сравнительное исследование». Транзакции IEEE по электромагнитной совместимости 37, № 1 (февраль 1995 года): 34-50. https://doi.org/10.1109/15.350238.