メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

CCSDS光高光子効率テレメトリ波形生成

この例では、宇宙データシステム諮問委員会( CCSDS )142.0-B-1セクション3 [1] で定義されている自由空間光通信システムの高光子効率(HPE)波形を生成する方法を示しています。HPE光通信は、リンク設計において電力効率が主な考慮事項となるアプリケーションに必要です。この例では、光子不足の空間リンクを介して転送フレームを転送するためのデータリンクレイヤーのチャネル符号化および同期サブ層の機能について説明します。これらの光子不足のリンクでは、リンクの光子効率が主な懸念事項となります。この例では、データ リンク プロトコル サブ層によって生成されたCCSDS転送フレームのセットが与えられた場合に、物理レイヤーに提供されるバイナリ ベクトルを生成する方法を示します。バイナリ ベクトルは、パルス スロットの位置を示します。結果のバイナリ ベクトルの 10 は、それぞれ光伝送におけるパルス スロットおよび非パルス スロットを示します。

はじめに

この図は、送信側におけるテレメトリ(TM) 信号の符号化および同期サブレイヤーの内部構成を示しています。コーディングおよび同期サブレイヤーは、データリンクプロトコルサブレイヤーから一定のコードレートとデータ長のCCSDS転送フレームを受け取り、必要な機能を実行し、光パルスを含むスロットを示すバイナリベクトルを物理レイヤーに配信します。入力は、 CCSDS 132.0-B-2 [3] で定義されているCCSDS TM宇宙データリンクプロトコル、またはCCSDS 732.0-B-3 [4] で定義されているCCSDS先進軌道システム (AOS) プロトコル、またはCCSDS 732.1-B-1 [5] で定義されているCCSDSユニバーサル宇宙リンクプロトコル (USLP) から生成された固定長転送フレームのシーケンスです。

sendingEnd.png

HPEテレメトリ信号生成

この図は、コーディングおよび同期サブレイヤーによって実行される送信側の HPE TMシグナリングのアーキテクチャの機能ブロックを示しています。

workflow diagram.png

コーディングおよび同期サブレイヤーへの入力は、 CCSDS TM、AOS、または USLP 転送フレームのシーケンスです。CCSDS転送フレーム a0,a1,...,anumTF-1 について考えてみましょう。ここで、numTF はCCSDS転送フレームの数であり、各転送フレーム ai は 1024 バイトのデータで構成されます。ランダム化された転送フレームのセットを 15 個生成します。

% Generate transfer frames with random data
rng("default")
numTF = 15;
numBytesInTF = 1024;
dataTF = randi([0 1],numBytesInTF*8,numTF); % a_0,a_1,...,a_numTF-1

各転送フレームの先頭に、16 進表記の 32 ビットの添付同期マーカー (ASM) 1ACFFC1D を追加します。ASM と転送フレームで構成されるデータ ユニットは、同期マーク転送フレーム (SMTF) です。この図は SMTF の構造を示しています。

smtf.png

CCSDS転送フレームを対応する SMTF にマップします。

% Attach ASM (0x1ACFFC1D) to the transfer frames
ASM = [0 0 0 1 1 0 1 0 1 1 0 0 1 1 1, ...
    1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 1]';
SMTF = [repmat(ASM,1,size(dataTF,2)); dataTF]; % b_0,b_1,...,b_numTF-1

SMTF のシーケンスを長さ k の情報ブロックにスライスします。ここで、k はコード レート r によって決定されます。これは、セット {1/3、1/2、2/3} の値を持つ管理パラメーターです。この表には、サポートされている各コード レートとそれに対応する情報ブロック サイズに関する情報が示されています。最後の情報ブロックのサイズが k 未満の場合、スライサーは、ブロック サイズを k の倍数に増やすために必要な最小数の 0 (P)) でそのブロックを埋めます。スライス後の情報ブロックの数は numInfoBlocks (C) となり、numInfoBlocks= (numBytesInTF*8+length(ASM))*numTF)+Pk となります。このリストは、サポートされているコード レートごとに、スライス後のブロック サイズ (ビット単位) を示しています。

  • 符号化率 1/3 — 5006 ビット

  • 符号化率 1/2 — 7526 ビット

  • 符号化率 2/3 — 10046 ビット

この図は、SMTF のスライスとゼロ フィルを示しています。

Slicer output.png

ブロック サイズ (k) の値を選択します。コード レート (r) は、ブロック サイズ (k) の値に基づいて決定されます。

k = 7526;
P = k - rem(length(SMTF(:)),k);
slicerIn = [SMTF(:); zeros(P,1)];
slicerOut = reshape(slicerIn,k,[]); % c_0,c_1,...,c_C-1
numInfoBlocks = size(slicerOut,2);

スライサーからの各kビット情報ブロックは、 CCSDS 142.0-B-1セクション3.5 [1]に規定されているように、線形フィードバックシフトレジスタによって生成された疑似乱数シーケンスを使用して桁ごとのモジュロ2加算を実行することによって疑似乱数化されます。シフト レジスタは、スライスされた各情報ブロックの開始時にすべて 1 の状態に初期化されます。

% Initialize pseudonoise sequence generator System object
pnSequence = comm.PNSequence("SamplesPerFrame",k, ...
    Polynomial=[1 1 0 1 0 1 0 0 1], ...
    InitialConditions=ones(8,1));
% Perform pseudo randomization on SMTFs
psIn = repmat(pnSequence(),1,numInfoBlocks);
psOut = xor(psIn,slicerOut);                 % d_0,d_1,...,d_C-1

CCSDS 142.0-B-1 セクション 3.6 [1] に説明されているように、各疑似ランダム化情報ブロックの末尾に 32 個の巡回冗長検査 (CRC) ビットを追加します。CRC は、ブロック エラーの検出と、シリアル連結パルス位置変調(SCPPM) デコーダーの終了に使用されます。SCPPM エンコーダー内の外部畳み込みエンコーダーを終了させるために、CRC が付加された 2 つの 0 を各情報ブロックに追加します。CRC と終了ビットを合わせると、ランダム化された情報ブロックに 34 ビットが追加されます。この図は、CRC と終了ビットを含む疑似ランダム化情報ブロックの構造を示しています。

encoder input 2.png

結果の SCPPM エンコーダ入力ブロックを SCPPM エンコーダに渡します。SCPPM フォワード エラー訂正方式は、深宇宙リンクの効率的な運用に必要です。エンコーダーは、k + 34 ビットを S = 15120/mパルス位置変調(PPM) シンボル ( にマッピングします。ここで、m は [2, 8] の範囲の変調順序です。

% Perform SCPPM encoding
crc32Cfg = crcConfig(...
         Polynomial="x^32+x^29+x^18+x^14+x^3+1", ...
         InitialConditions=1,DirectMethod=true);
m = 6;
S = 15120/m;
encSym = zeros(S,numInfoBlocks);
for frmIdx=1:numInfoBlocks
    crcData = crcGenerate(psOut(:,frmIdx),crc32Cfg);       % Generate CRC
    scppmIn = [crcData; 0; 0];                             % f_0,f_1,...,f_C-1
    [encSym(:,frmIdx),info] = ccsdsSCPPMEncode(scppmIn,m); % q_0,q_1,...,q_C-1
end

CCSDS 142.0-B-1 セクション 3.9 [1] に説明されているように、畳み込みインターリーバを使用して PPM シンボルのシーケンスをチャネルインターリーブします。NB は管理されたパラメーターであり、B×NS の倍数になり、SN の倍数になるように選択されます。インターリーバーには N 行があり、i 番目の行には長さ i×B のシフト レジスタが含まれており、i×B PPM シンボルで構成されています。最後のシンボルを通過した後、最後のシンボルが出力に表示されるまで、インターリーバーはさらに B×N×(N-1) ステップ実行されます。したがって、出力には入力よりも B×N×(N-1) 多くのシンボルが含まれます。B×N×(N-1)S の倍数なので、最後のブロックには PPM シンボルが残りません。結果のシーケンス r には R = C+(B*N*(N-1))S ブロックが含まれ、各ブロックには S シンボルが含まれます。

% Channel interleaving
N = 18;     % Number of shift registers
B = 840;    % Register step length

% Validate channel interleaver parameters
if mod(N*B,S)~=0
    error("N*B must be a multiple of 15120/m");
elseif mod(S,N)~=0
    error("15120/m must be a multiple of N");
end

% Set random number generator to avoid generating different initial states
% each time
rng(1, "twister")
% Generate initial states for channel interleaving
M = 2^m;
reqInitStates = randi([0 M-1],S,N*(N-1)*B/S);
convIntrlvrObj = comm.ConvolutionalInterleaver(NumRegisters=N, ...
                    RegisterLengthStep=B);
for i = 1:size(reqInitStates,2)
    currIn = reqInitStates(:,i);
    convIntrlvrObj(currIn(1:S));
end
% Generate random additional symbols required for the last symbol to appear at the output
addSymTemp = randi([0 M-1],N*B*(N-1),1);
additionalSym = reshape(addSymTemp,S,[]);

% Channel interleaving
chIn = [encSym,additionalSym];
chOut = zeros(S,size(chIn,2));
for i= 1:size(chIn,2)
    chOut(:,i) = convIntrlvrObj(chIn(:,i)); % r_0,r_1,...,r_R-1
end

各インターリーブ コードワードに、m に基づいた W PPM シンボルのコード同期マーカー (CSM) を付加します。

 % CSM Specification
 if m == 2
     CSM = [0 3 1 2 1 3 2 0 0 3 2 1 0 2 1 3 1 0 3 2 3 2 1 0];
 elseif m == 3
     CSM = [0 3 1 2 5 4 7 6 6 7 4 5 2 1 3 0];
 else
     CSM = [0 2 7 14 1 2 15 5 8 4 10 2 14 3 14 11];
 end
 
 % Attach CSM to each S symbol block
 csmOut = [repmat(CSM',1,size(chOut,2)); chOut];    % s_0,s_1,...,s_R-1

各 PPM シンボルを qd 回繰り返します。ここで、qd は、{1、2、3、4、8、16、32} のセットからの値を持つ管理パラメーターです。繰り返し係数を使用して、デコーダーのソフト情報のレベルを上げ、スーパーシンボルの同期を支援します。リピーターの出力には numSym シンボルがあり、numSym = qd×R×(S+W) です。

% Repeat each PPM symbol
qd = 1;
repOut = repelem(csmOut(:),qd,1); % t_0,t_1,...,t_T-1

コード シンボルの値に基づいて、(M — 1) 個の 0 と 1 つの 1 を可能な位置の 1 つに配置することにより、各 PPM シンボルを長さ M (ただし M=2m) のバイナリ ベクトルにマップします。M-ary PPM は、深宇宙光学リンクの光子不足の動作モードにおいて優れた電力効率を提供します。M スロットの各セットの後に、M4 ガード スロットを挿入します。ガード スロットは、既存のレーザー テクノロジとの互換性を確保し、同期を支援するために使用されます。送信される各 PPM シンボルは、物理チャネルを介して送信される 5×M4 PPM スロットを占有します。この図は、スロット マッピングとガード スロットの挿入を示しています。

Guard slot insertion.png

スロット マッピングとガード スロットの挿入後、結果はスロット シーケンス v0,v1,...,vnumSym-1 になります。ここで、各 vj は長さ 5×M4 のベクトルです。

% Slot mapping and guard slot insertion
txOut = zeros(length(repOut)*5*M/4,1);
mapIdx = (0:length(repOut)-1)'*5*M/4 + repOut + 1;
txOut(mapIdx) = 1;                                 % v_0,v_1,...,v_T-1

この表は、HPEテレメトリシグナリングの管理対象パラメーターを示しています。

ccsdsHPEWaveformGenerator 機能を使用して、 CCSDS HPE TM波形をプログラムで構成します。

信号の可視化

オンオフ キーイング (OOK) を使用して、コーディングおよび同期サブレイヤーから受信したバイナリ ベクトルを変調します。

Rb = 1e9;                              % Bit rate
Tb = 1/Rb;                             % Bit duration
sps = 10;                              % Samples per symbol
fsamp = Rb*sps;                        % Sampling frequency
unrz = ones(1,sps);                    % Signal for unipolar Non-return-to-zero (NRZ)
sigLen = 1000;                         % Number of bits to visualize
binData = txOut(1:sigLen);             % Generate data of length sigLen
modSignal = upfirdn(binData,unrz,sps); % Modulate data using OOK

生成されたCCSDS光 HPE TM波形の周波数スペクトルを表示するための spectrumAnalyzer オブジェクトを作成します。

txAnalyzer = spectrumAnalyzer(SampleRate=fsamp,AveragingMethod="exponential");
txAnalyzer(modSignal)

変調された信号を深宇宙ポアソンチャネルに渡します。

ns = 3;                                                          % Average signal photons per pulsed slot
nb = 0.0001;                                                     % Average noise photons per slot

% Initialize Poisson channel System object
chanObj = dsocPoissonChannel(NumSignalPhotons=ns,NumNoisePhotons=nb);
% Pass modulated data through Poisson channel
receivedSlotCount = chanObj(modSignal);
% Calculate LLRs using received slot counts
receivedLLR = receivedSlotCount*log(1+(ns/nb))-ns;

受信したCCSDS光 HPE TM波形の周波数スペクトルを表示するための spectrumAnalyzer オブジェクトを作成します。

rxAnalyzer = spectrumAnalyzer(SampleRate=fsamp,AveragingMethod="exponential");
rxAnalyzer(receivedLLR)

参考文献

[1] 宇宙データシステム諮問委員会光通信符号化および同期、推奨標準、第 1 版。CCSDS 142.0-B-1.ワシントンD.C.:CCSDS、2019年8月。https://public.ccsds.org/Pubs/142x0b1.pdf

[2] 宇宙データシステム諮問委員会光通信物理レイヤー、推奨標準、第 1 版。CCSDS 141.0-B-1.ワシントンD.C.:CCSDS、2019年8月。https://public.ccsds.org/Pubs/141x0b1.pdf

[3] 宇宙データシステム諮問委員会TM 宇宙データリンクプロトコル。推奨標準、第 2 版 。CCSDS 132.0-B-2.ワシントンD.C.:CCSDS、2015年9月。https://public.ccsds.org/Pubs/132x0b3.pdf

[4] 宇宙データシステム諮問委員会AOS 宇宙データリンクプロトコル。推奨標準、第 3 版 。CCSDS 732.0-B-3.ワシントンD.C.:CCSDS、2015年9月。https://public.ccsds.org/Pubs/732x0b3e1s.pdf

[5] 宇宙データシステム諮問委員会統合宇宙データリンクプロトコル。推奨標準、第 1 版 。CCSDS 732.1-B-1.ワシントンD.C.:CCSDS、2018年10月。https://public.ccsds.org/Pubs/732x1b1s.pdf

参考

関数

オブジェクト

トピック