В этом примере показано, как измерить частоту битовых ошибок (BER) сквозной цепочки системы телеметрии (TM) Консультативного комитета по системам космических данных (CCSDS). Цепочка моделирования следует схемам кодирования и модуляции, которые определены этими двумя стандартами:
Данные от различных приборов генерируются на борту спутника. Эти данные вместе называются данными TM. CCSDS определяет схемы кодирования и модуляции для передачи данных TM со спутника на наземную станцию. В этом примере показано сквозное моделирование связи спутника с наземной станцией. Пример показывает, как генерировать сложную форму сигнала CCSDS TM основной полосы частот из случайно сформированных кадров передачи (TFs), вводить радиочастотные (RF) нарушения в сигнал основной полосы частот и добавлять аддитивный белый гауссовый шум (AWGN) к нарушенному сигналу. Затем в примере показана синхронизация, демодуляция и декодирование этого ослабленного шумного сигнала для получения конечных битов в виде TFs. Пример также показывает, как измерять ЧОК относительно отношения сигнал/шум (SNR) для одной конфигурации сигнала ТМ CCSDS. На этом рисунке показана цепочка сквозного моделирования.

В этом примере моделируются следующие RF-нарушения:
Смещение несущей частоты (финансовый директор)
Смещение фазы несущей (CPO)
Смещение синхронизации символа (STO)
На этом рисунке показаны операции на стороне приемника.

Этап обработки синхронизации кадров и декодирования канала выполняет эти три задачи.
Разрешение неоднозначности фазы
Корректная синхронизация кадра с запуском подключенного маркера синхронизации (ASM)
Выполните канальное декодирование синхронизированного кадра для получения восстановленного TF
На этом рисунке показаны эти три задачи. Для начала сформируйте банк последовательностей ASM. Каждая последовательность соответствует исходному значению ASM, в котором вводится фазовая неоднозначность. Коррелировать каждую из этих последовательностей с демодулированными символами. Выберите значение неоднозначности фазы, которое имеет наивысший пик корреляции. Выполните синхронизацию кадров с этим процессом корреляции. Процесс выполнения корреляции проиллюстрирован в разделе 9.3.7 в [3]. В этом примере используется упрощенный алгоритм Мэсси для синхронизации кадров. Разрешение фазовой неоднозначности на полном наборе демодулированных символов после завершения процесса кадровой синхронизации. Наконец, выполните канальное декодирование этих символов для получения восстановленных TFs.

В этом примере используется схема модуляции QPSK для генерирования и приема сигнала и схема сверточного кодирования со скоростью 1/2 для канального кодирования. Сквозная цепочка, показанная в этом примере, может также использоваться для схем канального кодирования, которые указаны в [1]: кодах Рида-Соломона (RS) и конкатенированных кодах. Для сверточных и конкатенированных кодов этот пример поддерживает скорости 1/2 и 2/3 вместе с импульсно-кодовой модуляцией (ИКМ) -форматом невозврата в нулевую линию (NRZ-L). Поддерживаемыми схемами модуляции в этом примере являются BPSK и QPSK.
seeConstellation = true; % Flag to toggle the visualization of constellation channelCoding = "convolutional"; % Channel coding scheme transferFrameLength = 1115; % In bytes corresponding to 223*5 modScheme = "QPSK"; % Modulation scheme alpha = 0.35; % Root raised cosine filter roll-off factor sps = 8; % Samples per symbol
Установите частоты, которые используются для генерации сигнала, и значения ухудшения ВЧ.
fSym = 2e6; % Symbol rate or Baud rate - this is useful while modeling RF impairments cfo = 2e5; % Percentage of symbol rate as CFO
Инициализируйте отношение энергии на бит к мощности шума (Eb/N0), которое используется для вычисления SNR с использованием системных параметров.
EbN0 = 10; % To see a BER curve, run the simulation for 3.2:0.2:5Инициализируйте параметры для завершения моделирования. Для получения быстрых результатов в этом примере устанавливаются небольшие значения параметров. Увеличьте значение этих параметров, чтобы получить более гладкую кривую BER.
maxNumErrors = 1e2; % Simulation stops after maxNumErrors bit errors maxNumBits = 1e5; % Simulation stops after processing maxNumBits irrespective of number of errors % Set maxNumBits = 1e8 for a smoother BER curve maxFramesLost = 1e2; % Simulation stops after maxFramesLost frames are lost
Инициализируйте все объекты, необходимые для правильного функционирования сквозной цепочки.
Создайте генератор формы сигнала CCSDS TM с этими параметрами с помощью ccsdsTMWaveformGenerator object™ системы. Отображение свойств объекта.
tmWaveGen = ccsdsTMWaveformGenerator("ChannelCoding",channelCoding, ... "NumBytesInTransferFrame",transferFrameLength, ... "Modulation",modScheme, ... "RolloffFactor",alpha, ... "SamplesPerSymbol",sps); disp(tmWaveGen)
ccsdsTMWaveformGenerator with properties:
WaveformSource: "synchronization and channel coding"
NumBytesInTransferFrame: 1115
HasRandomizer: true
HasASM: true
PCMFormat: "NRZ-L"
Channel coding properties:
ChannelCoding: "convolutional"
ConvolutionalCodeRate: "1/2"
Digital modulation and filter properties:
Modulation: "QPSK"
PulseShapingFilter: "root raised cosine"
RolloffFactor: 0.3500
FilterSpanInSymbols: 10
SamplesPerSymbol: 8
Use get to show all properties
Вычислите SNR из Eb/N0 и инициализируйте параметры, связанные с вычислением BER.
rate = tmWaveGen.info.ActualCodeRate; M = tmWaveGen.info.NumBitsPerSymbol; numBitsInTF = tmWaveGen.NumInputBits; snr = EbN0 + 10*log10(rate) + 10*log10(M) - 10*log10(sps); % As signal power is scaled to one while introducing noise, snr value should be reduced by a factor of SPS numSNR = length(snr); ber = zeros(numSNR,1); % Initialize the BER parameter bercalc = comm.ErrorRate;
Создание объекта фильтра приема с помощью comm.RaisedCosineReceiveFilter Системный объект.
b = rcosdesign(alpha,tmWaveGen.FilterSpanInSymbols,sps); % |H(f)| = 1 for |f| < fN(1-alpha) - Annex 1 in Section 2.4.17A in [2] Gain = sum(b); rxFilterDecimationFactor = sps/2; rxfilter = comm.RaisedCosineReceiveFilter("DecimationFactor",rxFilterDecimationFactor, ... "InputSamplesPerSymbol",sps, ... "RolloffFactor",alpha, ... "Gain",Gain);
Моделирование частотных и фазовых смещений с помощью comm.PhaseFrequencyOffset Системный объект. Скомпенсировать частоту и фазовый сдвиг в приемнике в два этапа.
Скомпенсировать грубый сдвиг частоты с помощью comm.CoarseFrequencyCompensator Системный объект.
Скомпенсировать точное смещение частоты и фазовое смещение с помощью comm.CarrierSynchronizer Системный объект.
phaseOffset = pi/8; fqyoffsetobj = comm.PhaseFrequencyOffset( ... "FrequencyOffset",cfo, ... "PhaseOffset",phaseOffset, ... "SampleRate",sps*fSym); coarseFreqSync = comm.CoarseFrequencyCompensator( ... "Modulation",modScheme, ... "FrequencyResolution",100, ... "SampleRate",sps*fSym); fineFreqSync = comm.CarrierSynchronizer("DampingFactor",1/sqrt(2), ... "NormalizedLoopBandwidth",0.0007, ... "SamplesPerSymbol",1, ... "Modulation",modScheme);
Создайте переменный объект дробной задержки с помощью dsp. Объект VariiveFracedDelay System, который вводит дробную задержку в передаваемую форму сигнала. Создайте объект синхронизации символов с помощью comm.SymbolSynchronizer Системный объект, выполняющий синхронизацию символов.
varDelay = dsp.VariableFractionalDelay("InterpolationMethod","Farrow"); fixedDelayVal = 10.2; Kp = 1/(pi*(1-((alpha^2)/4)))*cos(pi*alpha/2); symsyncobj = comm.SymbolSynchronizer( ... "DampingFactor",1/sqrt(2), ... "DetectorGain",Kp, ... "TimingErrorDetector","Gardner (non-data-aided)", ... "Modulation","PAM/PSK/QAM", ... "NormalizedLoopBandwidth",0.0001, ... "SamplesPerSymbol",sps/rxFilterDecimationFactor);
Демодулировать и декодировать принятый сигнал с помощью HelperCCSDSTMDemodulator и HelperCCSDSTMDecoder вспомогательные файлы, соответственно. Отображение свойств результирующих объектов.
demodobj = HelperCCSDSTMDemodulator("Modulation",modScheme,"ChannelCoding",channelCoding); decoderobj = HelperCCSDSTMDecoder("ChannelCoding",channelCoding, ... "NumBytesInTransferFrame",transferFrameLength, ... "Modulation",modScheme); disp(demodobj)
HelperCCSDSTMDemodulator with properties:
Modulation: "QPSK"
PCMFormat: "NRZ-L"
ChannelCoding: "convolutional"
disp(decoderobj)
HelperCCSDSTMDecoder with properties:
ChannelCoding: "convolutional"
HasRandomizer: true
HasASM: true
DisableFrameSynchronization: 0
DisablePhaseAmbiguityResolution: 0
NumBytesInTransferFrame: 1115
ConvolutionalCodeRate: "1/2"
ViterbiTraceBackDepth: 60
ViterbiTrellis: [1x1 struct]
ViterbiWordLength: 8
Modulation: "QPSK"
PCMFormat: "NRZ-L"
Инициализируйте объект диаграммы созвездий с помощью comm.ConstellationDiagram Системный объект для визуализации развития созвездия по мере схождения синхронизаторов.
costellationobj = comm.ConstellationDiagram; % Default view is for QPSK if strcmp(modScheme,'BPSK') costellationobj.ReferenceConstellation = [1, -1] end
Для моделирования сквозной цепочки и измерения BER системы CCSDS TM выполните следующие действия.
Генерировать случайные биты для формирования TF.
Генерация сигнала TM путем пропускания TF через ccsdsTMWaveformGenerator Системный объект.
Введите RF-обесценения, такие как финансовый директор и задержка символа.
Добавьте AWGN к нарушенному сигналу RF. Этот шумный сигнал считается принятым сигналом.
Пропускают принятый сигнал через грубую коррекцию частоты, которая выполняет начальную грубую синхронизацию несущей частоты. Грубая оценка частоты выполняется с использованием алгоритма «на основе БПФ».
Используйте согласованный фильтр (корневой косинусный фильтр) с той же конфигурацией, которая применяется на конце датчика. Поскольку модуль синхронизации синхронизации символов работает со скоростью дискретизации, которая выше, чем скорость передачи символов, комплексные выборки основной полосы частот не дискретизируются до скорости передачи символов после фильтрации. Она дискретизируется так, что существует по меньшей мере 2 выборки на символ.
Выполните синхронизацию синхронизации символов, используя детектор ошибок синхронизации Гарднера (TED) для удаления смещения синхронизации, которое присутствует в сигнале.
Выполните отслеживание несущей частоты и фазы с помощью comm.CarrierSynchronizer Системный объект, имеющий фазовую автоподстройку типа 2 (ФАПЧ). Этот объект System может отслеживать смещение стационарной несущей частоты. Объект System также вводит неоднозначность фазы, которая затем удаляется модулем синхронизации кадров.
Визуализация совокупности после завершения синхронизации символов и несущей частоты. Наблюдайте, как созвездие эволюционирует в течение нескольких итераций.
Демодулируйте принятый сигнал и убедитесь, что сигнал имеет скорость передачи символов (то есть выборки на символ равны 1).
Выполните синхронизацию кадров и канальное декодирование для разрешения фазовой неоднозначности, синхронизируйте кадр с началом ASM, а затем декодируйте синхронизированный кадр для восстановления TF.
numBitsForBER = 8; % For detecting which frame is synchronized numMessagesInBlock = 2^numBitsForBER; for isnr = 1:numSNR rng default; % Reset for every SNR value to get repeatable results reset(bercalc); % Reset the comm.ErrorRate object for every SNR point berinfo = bercalc(int8(1), int8(1)); % Initialize berinfo to be used before BER is calculated tfidx = 1; numFramesLost = 0; prevdectfidx = 0; inputBuffer = zeros(numBitsInTF, 256,"int8"); while((berinfo(2) < maxNumErrors) && (berinfo(3) < maxNumBits) && (numFramesLost < maxFramesLost)) seed = randi([0 2^32-1],1,1); % Generate seed and use in AWGN channel for repeatable simulation % Transmitter side processing bits = int8(randi([0 1],numBitsInTF-numBitsForBER,1)); % The first 8 bits correspond to the TF index modulo 256. When % synchronization modules are included, there can be few frames % where synchronization is lost temporarily and then locks again. % In such cases, to calculate the BER, these 8 bits aid in % identifying which TF is decoded. If an error in these 8 bits % exists, then this error is detected by looking at the difference % between consecutive decoded bits. If an error is detected, then % that frame is considered lost. Even though the data link layer is % out of scope of this example, the data link layer has a similar % mechanism. In this example, only for calculating the BER, this % mechanism is adopted. The mechanism that is adopted in this % example is not as specified in the data link layer of the CCSDS % standard. And this mechanism is not specified in the physical % layer of the CCSDS standard. msg = [de2bi(mod(tfidx-1,numMessagesInBlock),numBitsForBER,"left-msb").';bits]; inputBuffer(:,mod(tfidx-1,numMessagesInBlock)+1) = msg; tx = tmWaveGen(msg); % Introduce RF impairments cfoInroduced = fqyoffsetobj(tx); % Introduce CFO delayed = varDelay(cfoInroduced,fixedDelayVal); % Introduce timing offset rx = awgn(delayed, snr(isnr),'measured',seed); % Add AWGN % Receiver side processing coarseSynced = coarseFreqSync(rx); % Apply coarse frequency synchronization filtered = rxfilter(coarseSynced); % Filter received samples through RRC filter TimeSynced = symsyncobj(filtered); % Apply symbol timing synchronization fineSynced = fineFreqSync(TimeSynced); % Track Frequency and phase % Visualize constellation if seeConstellation % Plot constellation of first 1000 symbols in a TF so % that variable size of fineSynced does not impede the % requirement of constant input size for the % comm.ConstellationDiagram System object. costellationobj(fineSynced(1:1000)); end demodData = demodobj(fineSynced); % Demodulate decoded = decoderobj(demodData); % Perform phase ambiguity resolution, frame synchronization and channel decoding % Calculate BER and adjust all buffers accordingly dectfidx = bi2de(double(decoded(1:8).'),"left-msb")+1; % See the value of first 8 bits if tfidx > 30 % Consider to calculate BER only after 30 TFs are processed % As the value of first 8 bits is increased by one in each % iteration, if the difference between the current decoded % value of decimal value of first 8 bits is not equal to the % previous decoded one, then it indicates a frame loss. if dectfidx - prevdectfidx ~= 1 numFramesLost = numFramesLost + 1; disp(['Frame lost at tfidx: ' num2str(tfidx) '. Total frames lost: ' num2str(numFramesLost)]); else berinfo = bercalc(inputBuffer(:,dectfidx),decoded); if nnz(inputBuffer(:,dectfidx)-decoded) disp(['Errors occurred at tfidx: ' num2str(tfidx) '. Num errors: ' num2str(nnz(inputBuffer(:,dectfidx) - decoded))]) end end end prevdectfidx = dectfidx; % Update tfidx tfidx = tfidx + 1; end fprintf("\n"); currentBer = berinfo(1); ber(isnr) = currentBer; disp(['Eb/N0: ' num2str(EbN0(isnr)) '. BER: ' num2str(currentBer) '. Num frames lost: ' num2str(numFramesLost)]); % Reset objects reset(tmWaveGen); reset(fqyoffsetobj); reset(varDelay); reset(coarseFreqSync); reset(rxfilter); reset(symsyncobj); reset(fineFreqSync); reset(demodobj); reset(decoderobj); end

Eb/N0: 10. BER: 0. Num frames lost: 0
Этот пример демонстрирует моделирование BER для сверточных кодов с модуляцией QPSK при наличии нескольких РЧ-нарушений. Для наблюдения за цепочкой сквозного моделирования для различных сценариев измените свойства, связанные со схемами канального кодирования и модуляции. Схемами модуляции, которые поддерживаются приемником в этом примере, являются BPSK и QPSK. Схемы канального кодирования, которые поддерживаются приемником в этом примере, не являются никакими (то есть не являются канальным кодированием), RS, сверточными и конкатенированными кодами.
Выполните полное моделирование BER, установив Eb/N0 значение 3,2: 0,2: 5, и просмотрите BER путем установкиmaxNumBits до 1е8. Этот код используется для печати результатов BER.
% semilogy(EbN0,ber); % grid on; % xlabel('E_b/N_0 (dB)'); % ylabel('BER'); % title('BER plot');
Всегда резервируйте первые несколько TF для синхронизаторов (синхронизаторы синхронизации символов и частоты несущей) для синхронизации. В этом примере отбрасываются первые 30 TFs. Это число может изменяться в зависимости от SNR, в котором работает приемник, и параметров контуров синхронизации, таких как полоса пропускания контура и коэффициент демпфирования. Если вы работаете с приемником при низком SNR и наблюдаете большие ошибки в начальных значениях tfidx, то синхронизаторы еще не заблокированы. Для заданных параметров моделирования отбрасывайте начальные TF соответствующим образом. Второй выходной аргумент comm.CoarseFrequencyCompensator и comm.CarrierSynchronizer Системные объекты содержат информацию, относящуюся к расчетному финансовому директору, которая может использоваться для оценки того, заблокированы ли циклы синхронизации.
В примере используются следующие вспомогательные файлы:
HelperCCSDSTMDemodulator.m - Выполняет демодуляцию сигналов, указанных в CCSDS TM [2]
HelperCCSDSTMDecoder.m - Выполняет, разрешение фазовой неоднозначности, синхронизацию кадров и канальное декодирование кодов, указанных в [1]
[1] Синхронизация TM и канальное кодирование. Рекомендация по стандартам системы космических данных, CCSDS 131.0-B-3. Синяя книга. Выпуск 3. Вашингтон, округ Колумбия: CCSDS, сентябрь 2017 года.
[2] Системы радиочастоты и модуляции - Часть 1: Земные станции и космические аппараты. Рекомендация по стандартам системы космических данных, CCSDS 401.0-B-30. Синяя книга. Выпуск 30. Вашингтон, округ Колумбия: CCSDS, февраль 2020 года.
[3] Синхронизация TM и канальное кодирование - краткое описание концепции и обоснования. Доклад о стандартах системы космических данных, CCSDS 130.1-G-3. Зеленая книга. Выпуск 3. Вашингтон, округ Колумбия: CCSDS, июнь 2020 года.