このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
DOCSIS 上流 TDMA リンクのシミュレーション
この例では、Data Over Cable Service Interface Specification (DOCSIS®) の物理レイヤー (PHY) を上流 TDMA 操作モードで実装する方法を示します [1][2]。
はじめに
DOCSIS では、高速データオーバーケーブル システムの国際標準を定義し、さまざまな操作モードを規定しています。この例では、上流時分割多元接続 (TDMA) モードを中心に説明します。この場合、単一搬送波直交振幅変調 (SC-QAM) が使用されます。このアクセス モードは 4.0 を含むすべてのバージョンの DOCSIS と互換性があります。この例では、多数の構成可能パラメーターを指定する構成オブジェクトを組み込むことにより、柔軟な PHY 信号処理チェーンを実装します。また、メディア アクセス制御 (MAC) 層ヘッダー形式を組み込み、MAC 構成パラメーターと適合したデータ パケットをシミュレーションします。
Communications Toolbox™ と Signal Processing Toolbox™ で使用できる機能の使用例:
DOCSIS 通信システムのベースバンド PHY をモデル化する
オブジェクトを構成する補助関数を組み込み、構成パラメーターを指定、検証、編成するためにこのオブジェクトを使用する
モデルのエラー レート性能を理論上の結果と比較するため、統計情報を生成する
システム モデル
この図はシミュレーション フローの概要を示したものです。個々のブロックの詳細については後続する段落で説明します。
MAC フレーム構造
この図に示す MAC ヘッダー形式は DOCSIS に準拠しています [2]。フレーム構造の拡張ヘッダーとパケット プロトコル データ ユニット (パケット PDU) フィールドでは、ランダムなビットが使用されます。
拡張ヘッダー On フィールドが 1 の場合、MAC パラメーターは拡張ヘッダーの長さをバイト単位で指定します。それ以外の場合、MAC パラメーターは他の用途のために予約されています。
送信機信号処理
この図では、送信機信号処理チェーンを示します。入力データ ビットには、リード・ソロモン符号化、インターリーブ、スクランブル、先頭へのプリアンブルの付加、SC-QAM、プリイコライズ (送信プリイコライザーの効果の節を参照)、および送信フィルター処理が行われます。
チャネル モデル
補助関数 helperDocsisChannel
は、静的チャネル応答と確率的加法性ホワイト ガウス ノイズ (AWGN) を使用してマルチパス チャネルをモデル化し、[3] の図 40-42 に示す実用ケーブル チャネルを再現します。このコードは、モデル化したチャネルを使用して単位インパルスをフィルター処理し、チャネル タップと周波数応答をプロットします。振幅応答は図 40 に示すものと一致します。
% Probe channel with a unit impulse. Pad zeros at the beginning and end to % account for channel delay. probeSignal = [zeros(1,12),1,zeros(1,12)]; sampsPerSymbol = 1; chanTaps = helperDocsisChannel(probeSignal,sampsPerSymbol); % Remove zero values chanTaps = nonzeros(chanTaps); % Time domain tap values figure subplot(2,1,1) stem(abs(chanTaps)) title('Channel Taps') xlabel('Taps') ylabel('Amplitude') legend('Magnitude') subplot(2,1,2) stem(real(chanTaps)) hold on stem(imag(chanTaps)) legend('Real','Imag') xlabel('Taps') ylabel('Amplitude') hold off
% Frequency domain response
freqz(chanTaps,1,-pi:pi/1024:pi)
受信機信号処理
この図では、完全同期を想定した理想的な受信機信号処理チェーンを示します。入力受信ベースバンド シンボルには、送信機操作と逆の処理が行われ、送信データ ビットが復元されて、ビット エラー レート (BER) が計算されます。
送信プリイコライザーの効果
DOCSIS 標準では、マルチパス チャネルから発生する符号間干渉 (ISI) を無効にするための、送信機シンボルのプリイコライズが規定されています。静的チャネル周波数応答が使用されるため、シミュレーション期間は送信機でのプリイコライザーのタップ数は固定です。
このコードでは、プリイコライズありの、およびプリイコライズなしの QPSK 変調信号の伝送を示します。どちらの信号も、AWGN を追加せずに関数 helperDocsisChannel
を使用してフィルター処理します。プリイコライズを適用していないシンボルのコンスタレーション ダイアグラムでは、チャネル フィルター処理後に符号間干渉による歪みが示されています。プリイコライズを適用したシンボルのコンスタレーション ダイアグラムでは、チャネル フィルター処理後に歪みは示されていません。
実際、チャネルにノイズがないため、イコライズしたシンボルは基準コンスタレーションと非常によく整合します。これにより、確認が難しくなる場合があります。コンスタレーション ダイアグラムにおける 2 セットのシンボルは、凡例で対応するラベルをクリックすることにより、表示を切り替えて確認しやすくできます。
% Create a DOCSIS configuration object with the specified parameters. Do % not use Reed-Solomon encoding or append any preamble bits. 500 bytes of % data are transmitted in total. docsisCfg = docsisConfig( ... 'NumBytes',500, ... 'RSEnabled',false, ... 'PreambleLength',0, ... 'SamplesPerSymbol',1); % Validate configuration parameters after they're all set validateConfig(docsisCfg); % Generate random data bits manually srcData = randi([0 1],docsisCfg.NumBytes*8,1); % Get the output from the modulator and pre-equalizer [~,~,modOut,eqOut] = helperDocsisTx(srcData,[],docsisCfg); % Pass both signals through the example channel uneqChanOut = helperDocsisChannel(modOut,docsisCfg.SamplesPerSymbol); eqChanOut = helperDocsisChannel(eqOut,docsisCfg.SamplesPerSymbol); % Show received symbols in constellation diagram constDiagram0 = comm.ConstellationDiagram( ... 'NumInputPorts',2, ... 'Title','Zero-noise Channel Output', ... 'ChannelNames',{'Unequalized','Equalized'}, ... 'ShowLegend',true, ... 'XLimits',[-18 18], ... 'YLimits',[-18 18], ... 'ShowReferenceConstellation',false); constDiagram0(uneqChanOut,eqChanOut)
エンドツーエンド リンクのシミュレーション
シミュレーションされたエンドツーエンド通信リンクは、DOCSIS が規定する伝送に準拠しています。次の補助関数およびオブジェクトが使用されます。
docsisConfig
: 波形生成に影響するすべてのパラメーターを取得する構成オブジェクトdocsisMACFrameConfig
:docsisConfig
のサブコンポーネントで、MAC フレーム構造を指定する構成オブジェクトhelperDocsisConstellation
: 指定された変調名の変調次数 (コンスタレーション点の合計数) とシンボル マッピングを返しますhelperDocsisGenerateSourceData
: 構成オブジェクトで指定されたパラメーターに従って、MAC フレーム構成を含むデータ ビットのランダム バーストを生成しますhelperDocsisTx
: 送信機信号処理チェーンを実装し、バースト データとプリアンブル ビットを入力として受け入れ、ベースバンド送信機サンプルとその他の中間ブロック出力の両方を返します (送信機ブロック線図を参照)helperDocsisChannel
: 以前に定義された静的タップ値をサンプル ケーブル チャネルに適用しますhelperDocsisRx
: 受信機信号処理チェーンを実装し、チャネル出力を入力として受け取り、復号化されたデータ ビットとその他の中間ブロック出力を返します (受信機ブロック線図を参照)
さまざまな Eb/No 値でリンク シミュレーションを実行します。各 Eb/No に対して、ランダムなソース データを生成し、これを送信機とチャネルを介して渡し、受信機でビットを取得します。その後、これらのビットはソース データと比較されてビット誤りがチェックされます。収集されたビット誤りの数または送信されたビット総数が、指定されたしきい値を超えた場合は、次の Eb/No 値に進みます。
構成オブジェクトを作成し、すべてのパラメーターをリストします。
docsisCfg = docsisConfig( ... 'PayloadModulation','16-QAM', ... 'RSMessageLength',251, ... 'RSCodewordLength',255)
docsisCfg = docsisConfig with properties: MACFrame: [1x1 docsisMACFrameConfig] NumBytes: 2000 ModulationRate: 1280000 RSEnabled: 1 RSMessageLength: 251 RSCodewordLength: 255 InterleaverNumRows: 4 ScramblerSeed: [1 1 0 1 1 1 1 1 0 0 1 1 0 0 1] PreambleLength: 1536 PreambleModulation: 'QPSK0' PayloadModulation: '16-QAM' PreEqualizerTaps: [24x1 double] RaisedCosineSpan: 10 SamplesPerSymbol: 2 SampleRate: 2560000 Read-only properties: PreEqualizerDelay: 7 PreambleModulationOrder: 4 PreambleModulationBitsPerSymbol: 2 PreambleModulationSymbolMap: [-8.0000 - 8.0000i -8.0000 + 8.0000i 8.0000 - 8.0000i 8.0000 + 8.0000i] PayloadModulationOrder: 16 PayloadModulationBitsPerSymbol: 4 PayloadModulationSymbolMap: [-4.0000 - 4.0000i -4.0000 -12.0000i -12.0000 - 4.0000i -12.0000 -12.0000i -4.0000 + 4.0000i -4.0000 +12.0000i -12.0000 + 4.0000i -12.0000 +12.0000i 4.0000 - 4.0000i 4.0000 -12.0000i ... ] (1x16 double) SignalPowerPerSample: 80
% Validate configuration parameters after they're all set
validateConfig(docsisCfg);
プリアンブル シーケンスの例では、[4] の付録 I で規定されたシーケンスを再現します。
load('docsisExamplePreamble.mat')
prmbBits = examplePreamble(end-docsisCfg.PreambleLength+1:end);
他の関連変数と可視化スコープを初期化します。
% Max number of bit errors to collect and max number of bits to send maxErr = 1e3; maxBits = 1e6; % Use an Eb/No range that results in meaningful BERs EbNoRange = helperDocsisEbNoRange(docsisCfg.PayloadModulationOrder); ber = zeros(size(EbNoRange)); berUncoded = zeros(size(EbNoRange)); % Initialize spectrum analyzer scope and constellation diagram scope [specAnalyzer,constDiagram] = helperInitializeScopes(docsisCfg); % Initialize AWGN channel awgnChan = comm.AWGNChannel( ... 'BitsPerSymbol',docsisCfg.PayloadModulationBitsPerSymbol, ... 'SignalPower',docsisCfg.SignalPowerPerSample, ... 'SamplesPerSymbol',docsisCfg.SamplesPerSymbol);
メイン ループを実行します。
for i = 1:length(EbNoRange) awgnChan.EbNo = EbNoRange(i); totalErr = 0; totalBits = 0; totalErrUncoded = 0; totalBitsUncoded = 0; while totalErr < maxErr && totalBits < maxBits % Generate source data bits srcData = helperDocsisGenerateSourceData(docsisCfg); % Transmitter signal processing [txrcOut,modIndexOut] = helperDocsisTx(srcData,prmbBits,docsisCfg); % Apply example cable channel and add Gaussian noise chanOut = helperDocsisChannel(txrcOut,docsisCfg.SamplesPerSymbol); awgnOut = awgnChan(chanOut); % Receiver signal processing [decoderOut,rxrcOut,demodOut] = helperDocsisRx(awgnOut,docsisCfg); % Helper function to show visualization on the scopes helperShowScopes(specAnalyzer,constDiagram,txrcOut,rxrcOut,awgnOut, ... EbNoRange(i),docsisCfg) % Tally bit errors and total bits sent [nErr,nBits,nErrUncoded,nBitsUncoded] = helperBitErrors( ... srcData,decoderOut,modIndexOut,demodOut,docsisCfg); totalErr = totalErr + nErr; totalBits = totalBits + nBits; totalErrUncoded = totalErrUncoded + nErrUncoded; totalBitsUncoded = totalBitsUncoded + nBitsUncoded; end % Compute BER ber(i) = totalErr / totalBits; berUncoded(i) = totalErrUncoded / totalBitsUncoded; end
スペクトル アナライザーは、送信フィルター出力およびケーブル チャネル出力での信号のパワー スペクトル密度を表示します。送信フィルター出力信号はプリイコライズされているので、そのスペクトルはメイン ローブのチャネル応答を反転した形状になります (チャネル モデルを参照)。サイド ローブとノッチはレイズド コサイン フィルター処理によるものです。チャネル フィルター処理後、チャネル出力信号はその帯域幅でフラットなスペクトルであり、帯域外信号強度は AWGN のため増加します。
コンスタレーション ダイアグラムは 3 セットのシンボル (チャネル出力、受信フィルター出力プリアンブル シンボル、受信フィルター出力ペイロード シンボル) を示します。受信機レイズド コサイン フィルター処理後、チャネル出力シンボルは基準コンスタレーションと整合しません。基準コンスタレーション点を中心とするクラスターに分離します。プリアンブル シンボルは常に QPSK で変調され、ペイロード シンボルの変調とは異なる可能性があります。DOCSIS のサンプル プリアンブル ビットは独立した一様分布ではありません。結果として、左上のクラスターのコンスタレーション シンボルは他の 3 つのクラスターよりも少なくなることに注意してください。一方、ペイロード ビットはほぼランダムに生成されるので、結果としてクラスターの点は均等に分布します。
BER を Eb/No に対してプロットする
経験的に検出される BER を Eb/No 値に対してプロットし、理論上の結果と比較します。図では、変調次数が 2 の奇数乗の理論的曲線を省略しています。これは、DOCSIS 標準では関数 bercoding
および berawgn
で想定されるものとは異なるシンボル コンスタレーションを使用しているためです。2 の偶数乗の場合、関数ではシミュレーションと同じコンスタレーションであると想定するので、シミュレーションは理論と同様になります。
BER 曲線は、符号化されたエラー レートと符号化されていないエラー レートの両方が、理論とある程度一致します。リード・ソロモン符号の (n,k) の一部の組み合わせでは、符号化ゲインは高い範囲の Eb/No でのみ出現する可能性があり、場合によっては低い Eb/No でも符号化 BER のほうが符号化されていない BER より高くなる可能性があります。これは R-S 符号の想定どおりの動作です。
誤りが非常にまれな高い Eb/No で、より正確にシミュレーションされた BER を取得するには、前節の maxErr
および maxBits
の値を増やしてシミュレーションを再実行します。これにより、システムでは各 Eb/No に対してより多くのビット誤りを収集できます。ある Eb/No 値でエラーが発生しない場合、BER 曲線ではそのデータ点は省略されます。
% Find theoretical uncoded and coded BER berUncodedTheoretical = berawgn(EbNoRange, ... 'qam',docsisCfg.PayloadModulationOrder); % Theoretical BER with R-S coding is only available when the codeword % length is of the form 2^m-1. if mod(log2(docsisCfg.RSCodewordLength+1),1) == 0 berTheoretical = bercoding(EbNoRange,'RS','hard', ... docsisCfg.RSCodewordLength,docsisCfg.RSMessageLength, ... 'qam',docsisCfg.PayloadModulationOrder); else berTheoretical = []; end % Plot the curves figure semilogy(EbNoRange,berUncoded,'*-') hold on semilogy(EbNoRange,ber,'o-') legendText = {'Uncoded simulation','Coded simulation'}; if mod(docsisCfg.PayloadModulationBitsPerSymbol,2) == 0 semilogy(EbNoRange,berUncodedTheoretical,'--') legendText{end+1} = 'Uncoded theoretical'; if ~isempty(berTheoretical) semilogy(EbNoRange,berTheoretical,'--') legendText{end+1} = 'Coded theoretical'; end end grid on if docsisCfg.RSEnabled title(sprintf('DOCSIS BER - Upstream TDMA, %s, R-S (%d,%d)', ... docsisCfg.PayloadModulation, ... docsisCfg.RSCodewordLength,docsisCfg.RSMessageLength)) else title(sprintf('DOCSIS BER - Upstream TDMA, %s, uncoded', ... docsisCfg.PayloadModulation)) end xlabel('Eb/No (dB)') ylabel('BER') legend(legendText,'Location','southwest')
その他の調査
docsisCfg
のパラメーターを変更して、出力への影響を確認します。たとえば、変調と符号化率を変更してシミュレーションを再実行し、システムの BER 性能への影響を確認します。レイズド コサイン フィルター スパン、シンボルあたりのサンプル数、およびサンプル レートを変更して、可視化への影響を確認します。
参考文献
[1] CM-SP-PHYv4.0-I02-200429:Data-Over-Cable Service Interface Specifications DOCSIS® 4.0; Physical Layer Specification.Cable Television Laboratories, Inc., 2019-2020.
[2] CM-SP-MULPIv4.0-I02-200429:Data-Over-Cable Service Interface Specifications DOCSIS® 4.0; MAC and Upper Layer Protocols Interface Specification.Cable Television Laboratories, Inc., 2019-2020.
[3] CM-GL-PNMP-V03-160725:DOCSIS® Best Practices and Guidelines; PNM Best Practices:HFC Networks (DOCSIS 3.0).Cable Television Laboratories, Inc., 2010-2016.
[4] CM-SP-PHYv3.0-C01-171207:Data-Over-Cable Service Interface Specifications DOCSIS® 3.0; Physical Layer Specification.Cable Television Laboratories, Inc., 2006-2017.