В этом примере показано, как измерить частоту битовых ошибок (BER) и количество блоков передачи линии связи (CLTU), потерянных в линии связи Консультативного комитета по системам космических данных (CCSDS). Пример добавляет к каналу радиочастотные (RF) внешние нарушения и аддитивный белый гауссовый шум (AWGN).
CCSDS TC обычно используется для передачи команд с наземной станции на космический аппарат. Приемники CCSDS TC подвергаются большим частотным ошибкам из-за неопределенностей частоты в приемниках космического аппарата и доплеровского сдвига частоты. Для компенсации больших сдвигов частоты наземные станции выполняют развертку несущей по частоте или используют обнаружение на основе БПФ на космическом аппарате во время обнаружения спутника. В этом примере показано, как добавить сдвиг частоты 200 кГц к сигналу и использовать для коррекции обнаружение на основе БПФ.
Для каждой точки отношения сигнал/шум (SNR) формы сигналов TC CCSDS, которые генерируются с помощью CLTU, и последовательность обнаружения искажаются с помощью нарушений RF и проходят через канал AWGN. В примере показано, как моделировать эти RF-обесценения:
Несущая частота и фазовый сдвиг
Частота поднесущей и фазовое смещение
Сдвиг фазы синхронизации
Приемник TC CCSDS компенсирует нарушения, и кадры передачи (TF) в CLTU восстанавливаются. В этом примере поддерживаются схемы модуляции BPSK, PCM/PM/biphase-L и PCM/PSK/PM. Нарушения поднесущих применимы только со схемой модуляции ИКМ/PSK/PM. Эти схемы модуляции [8] используются для генерации сигнала TC CCSDS в виде отсчетов синфазной квадратуры (IQ) основной полосы частот.
PCM/PSK/PM: Линейный кодированный сигнал в соответствии с форматом импульсно-кодовой модуляции (ИКМ) является фазовой манипуляцией (PSK), модулированной на синусоидальной поднесущей, а затем фазомодулированной (PM) на остаточной несущей.
Кодированные PCM/PM/biphase-L: Biphase-L (Manchester) данные модулируются фазой на остаточной несущей.
BPSK: Подавленная модуляция несущей посредством использования данных без возврата к нулю (NRZ) на несущей.
На этом рисунке показаны этапы обработки, связанные с восстановлением кадров передачи.

На этом рисунке показаны операции приемника, которые включают в себя компенсацию РЧ-нарушений, демодуляцию, синхронизацию кадров и декодирование кадров передачи.

Чтобы восстановить TF из принятого сигнала, выполните следующие действия.
Грубая коррекция частоты: используйте алгоритм на основе БПФ для оценки сдвига частоты.
Частота несущей и отслеживание фазы: для отслеживания несущей используется система фазовой автоподстройки частоты второго порядка (PLL) [1].
Частота поднесущих и отслеживание фазы: используйте цикл Costas [1] второго порядка для отслеживания поднесущих.
Отслеживание выбора времени символа и демодуляция: Используйте петлю отслеживания перехода данных (DTTL) второго порядка [3] модуль для выбора времени синхронизации и демодуляции символа [1].
Синхронизация и декодирование кадров: Используйте алгоритм на основе жестких символов для кода Bose Chaudhuri Hocquenghem (BCH) и алгоритм на основе мягких символов для кода с низкой плотностью контроля четности (LDPC).
На этом рисунке показаны этапы обработки, которые участвуют в синхронизации кадров и декодировании TFs [4].

Поиск начальной последовательности: Когда кодированием канала является BCH, входящий битовый поток ищет шаблон начальной последовательности bit by bit. Когда кодированием канала является LDPC, входящий поток мягких символов ищут с помощью мягкого коррелятора для шаблона начальной последовательности. Для BCH допустимое количество ошибок в начальной последовательности равно 0 или 1 (в зависимости от режима декодирования). В режиме обнаружения ошибок допустимое количество ошибок в начальной последовательности равно 0. В режиме исправления ошибок допустимое количество ошибок в последовательности запуска равно 1.
Декодирование: При обнаружении начальной последовательности начинается операция декодирования. Кодовые слова (CW) декодируются и дополнительно деандомизируются.
Если декодер имеет какой-либо сбой декодирования или какие-либо нескорректированные ошибки в декодированном выходе, данные из этого отказавшего CW не передаются в операции подуровня канала передачи данных. CW отклоняется, и поиск начальной последовательности перезапускается. Если присутствует хвостовая последовательность, выполните поиск хвостовой последовательности для обнаружения конца CLTU. Для декодирования ВСН используется способ отклонения 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 обрабатывается одновременно. Для синхронизации принятых данных и восстановления TFs выполняются эти этапы обработки.
Создайте биты в TC TF.
Генерация сигнала TC для последовательности обнаружения с чередующимися единицами и нулями.
Формирование формы сигнала TC CCSDS для TF со случайными битами.
Применение формирования импульсов с использованием квадратного корня с увеличенным косинусным фильтром (применимо только при модуляции BPSK).
Примените частоту поднесущей и фазовое смещение (применимо только для модуляции ИКМ/PSK/PM).
Примените частоту несущей и фазовое смещение.
Примените сдвиг фазы синхронизации.
Передача передаваемого сигнала по каналу AWGN.
Скорректируйте грубую частоту и фазовое смещение.
Фильтрация принятого сигнала.
Скорректируйте частоту несущей и фазовое смещение.
Исправьте частоту поднесущей и фазовое смещение (применимо только для модуляции ИКМ/PSK/PM).
Скорректируйте сдвиг синхронизации и демодуляцию символов.
Определите начало CLTU и декодируйте TFs.
% 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. На рисунке показан результат моделирования, полученный с 10000 передач и точками Es/No в диапазоне [4 7.5].

В этом примере используется большое значение длины последовательности сбора данных (800 октетов) для улучшения рабочих характеристик синхронизаторов при низких значениях SNR. Эта таблица показывает нормализованные значения полосы пропускания контура и выборки на символ, используемые при моделировании с каждой схемой модуляции, для последовательности обнаружения 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
Этот пример можно использовать для дальнейшего изучения этих модулей синхронизации.
Синхронизация несущей: Для повышения точности фазовой оценки можно уменьшить вклад шума в контуры слежения, уменьшив нормализованную полосу пропускания. Уменьшение полосы пропускания шлейфа сокращает диапазон втягивания, и сбор данных занимает больше времени, чтобы сойтись.
Синхронизация поднесущих: можно построить график предполагаемого смещения поднесущей для определения более точной полосы пропускания цикла. Чтобы повысить точность оценки частоты поднесущих, можно увеличить частоту дискретизации и SNR.
Синхронизация символов: DTTL для синхронизации символов хорошо работает при большем количестве выборок на символ. При увеличении выборок на символ разрешение увеличивается, а производительность DTTL повышается. Слишком много выборок на символ может уменьшить SNR и повлиять на производительность. Если SNR меньше -15 дБ (из-за большого количества выборок на символ), это влияет на производительность контуров слежения.
Для любой петли на основе PLL, чтобы работать при очень низком SNR, полоса пропускания петли должна быть очень низкой. Эта низкая пропускная способность цикла уменьшает диапазон втягивания. Для плат CLTU с кодированием каналов LDPC, если количество потерянных плат CLTU велико, можно уменьшить threshold значение для определения начальной последовательности в функции помощника HelperCCSDSTCCLTUBitRecover. Можно также попытаться улучшить результаты BER, выбрав только CLTU с очень высокой нормализованной метрикой корреляции с начальной последовательностью. Для максимизации обнаружения кадра и минимизации ложного аварийного сигнала в этом примере в качестве порога обнаружения используется значение 0,8. Для уменьшения ложного аварийного сигнала можно увеличить пороговое значение обнаружения. При увеличении порогового значения обнаружения снижается частота обнаружения кадров.
Максимальное смещение частоты поднесущей, указанное в рекомендации CCSDS TC [6], равно fsc, fsc - частота телекомпандной поднесущей. Следует учитывать максимальный сдвиг частоты 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: Выполнение точной синхронизации несущей
HelperCCSDSTCSubSynchronizer: Выполнение синхронизации поднесущих
HelperCCSDSTCSymbolSynchronizer: Выполнение синхронизации и демодуляции символов
HelperCCSDSTCSubModulation: Выполнить модуляцию поднесущей со смещением частоты и фазы
HelperCCSDSTCCLTUbitRecover: Поиск начальной последовательности и восстановление битов
J. Vilà-Valls, М. Наварро, П. Клозас и М. Бертинелли, «Проблемы синхронизации в дальней космической связи», IEEE Aerospace and Electronic Systems Magazine, vol. 34, no. 1, pp. 16-27, Jan. 2019.
M. Baldi et al., «Новейшие телекоммуникационные приемники космических полетов», IEEE Aerospace and Electronic Systems Magazine, vol. 32, no. 6, pp. 4-15, June 2017.
S. Million и S. Hinedi, «Влияние плотности перехода символов на производительность контура отслеживания перехода данных при низких соотношениях сигнал-шум», Proceedings IEEE International Conference on Communications ICC '95, Сиэтл, Вашингтон, США, 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 года.
Майкл Райс, Digital Communications - дискретный подход времени. Нью-Йорк: Прентис Холл, 2008.
Нгуен, Т.М., В.Л. Мартин и Хен-Гёль Йех. «Требуемая полоса пропускания, нежелательная эмиссия и энергоэффективность данных для остаточных и подавленных систем несущих - сравнительное исследование». Сделки IEEE по электромагнитной совместимости 37, № 1 (февраль 1995 года): 34-50. https://doi.org/10.1109/15.350238.