comm.HDLRSEncoder
リード・ソロモン符号化器を使用したメッセージの符号化
説明
HDL 最適化 HDLRSEncoder
System object™ は、指定したメッセージ長とコードワード長でリード・ソロモン (RS) 符号を作成します。
リード・ソロモン符号を使用したメッセージを符号化するには、以下を行います。
comm.HDLRSEncoder
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
構文
説明
は、HDL に対してストリーミング方式でリード・ソロモン符号化を実行する、HDL 最適化ブロック符号化器 System object、RSEnc
= comm.HDLRSEncoderRSEnc
を作成します。
は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を一重引用符で囲みます。次に例を示します。 RSEnc
= comm.HDLRSEncoder(Name,Value
)
comm.HDLRSEncoder('BSource','Property','B',2)
は、RSEnc
= comm.HDLRSEncoder(N
,K
,Name,Value
)CodewordLength
プロパティを N
に、MessageLength
プロパティを K
に設定し、指定の他のプロパティ名は指定の値に設定しています。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
B
— 原始多項式の根の開始累乗
1
(既定値) | 正の整数
原始多項式の根の開始累乗。正の整数で指定します。
依存関係
BSource
を 'Property'
に設定する場合、オブジェクトはこの値を使用します。
BSource
— 原始多項式の根の開始累乗のソース
'Auto'
(既定値) | 'Property'
原始多項式の根の開始累乗のソース。'Property'
または 'Auto'
のいずれかで指定します。'Auto'
を設定すると、オブジェクトは B = 1
を使用します。
CodewordLength
— RS コードワードのシンボル数 N
7
(既定値) | 正の整数
RS コードワードのシンボル数 N。正の整数で指定します。この値は 2M-1 に丸められます。M は、原始多項式の次数です。PrimitivePolynomialSource
および PrimitivePolynomial
プロパティによって指定されます。差 (CodewordLength
– MessageLength
) は偶数でなければなりません。
このプロパティの値が 2M–1 未満の場合、オブジェクトは短縮された RS 符号とみなされます。
PrimitivePolynomialSource
を 'Auto'
に設定した場合、CodewordLength
は 3 < CodewordLength
≤ 216 –1 の範囲内でなければなりません。
PrimitivePolynomialSource
を 'Property'
に設定した場合、CodewordLength
は、3 ≤ CodewordLength
≤ 2M– 1 の間の値でなければなりません。M は 3 ≤ M ≤ 16 の間の値でなければなりません。
MessageLength
— Message length, K
3 (既定値) | 正の整数
メッセージの長さ K。正の整数で指定します。差 (CodewordLength
– MessageLength
) は偶数の整数でなければなりません。
PrimitivePolynomialSource
— 原始多項式のソース
'Auto'
(既定値) | 'Property'
原始多項式のソース。'Property'
または 'Auto'
のいずれかで指定します。
このプロパティを
'Auto'
に設定すると、オブジェクトは次数 M =ceil
(log2(CodewordLength
+1)) の原始多項式を使用します。これは、int2bit
(primpoly
(M),bpi)' の結果です。ここで、bpi は整数あたりのビット数です。このプロパティを
'Property'
に設定した場合は、PrimitivePolynomial
プロパティを使用して多項式を指定しなければなりません。
PrimitivePolynomial
— 原始多項式
[1 0 1 1]
(既定値) | バイナリ行ベクトル
原始多項式。次数 M の gf
(2) 上の原始多項式を降べきの順で表すバイナリ行ベクトルで指定します。多項式は、メッセージとコードワードを形成する整数に対応して、有限体 gf
(2M) を定義します。
依存関係
PrimitivePolynomialSource
を 'Property'
に設定する場合、オブジェクトはこの値を使用します。
PuncturePatternSource
— パンクチャ パターンのソース
'None'
(既定値) | 'Property'
パンクチャ パターンのソース。'None'
または 'Property'
のいずれかで指定します。このプロパティを 'None'
に設定すると、オブジェクトはコードにパンクチャを適用しません。このプロパティを 'Property'
に設定すると、オブジェクトは PuncturePattern
プロパティで指定したパンクチャ パターン ベクトルに基づいてコードをパンクチャします。
PuncturePattern
— 符号化されたデータをパンクチャするために使用されるパターン
[ones(2,1); zeros(2,1)]
(既定値) | バイナリ列ベクトル
符号化されたデータをパンクチャするために使用するパターン。長さ (CodewordLength
– MessageLength
) の倍精度のバイナリ列ベクトルで指定します。既定の設定は [ones(2,1); zeros(2,1)]
です。パンクチャ パターン ベクトルのゼロは、パンクチャされる、つまり各コードワードから除外されるパリティ シンボルの位置を示します。
依存関係
このプロパティは、PuncturePatternSource
プロパティを 'Property'
に設定した場合に適用されます。
使用法
説明
入力引数
X
— 入力メッセージ シンボル
整数
入力メッセージ データ。一度に 1 つのシンボルで、符号なし整数または 2 進小数点スケーリングの fi()
で指定します。各シンボルの語長は、ceil(log2(
でなければなりません。 CodewordLength
+1))
double
型は、シミュレーションでは許可されますが、HDL コード生成ではサポートされません。
データ型: double
| uint8
| uint16
| uint32
| fi
startIn
— 入力データ フレームの先頭
logical スカラー
入力データ フレームの先頭。logical スカラーで指定します。
データ型: logical
endIn
— 入力データ フレームの末尾
logical スカラー
入力データ フレームの末尾。logical スカラーで指定します。
データ型: logical
validIn
— 入力データの有効性
logical スカラー
入力データの有効性。logical スカラーで指定します。
データ型: logical
出力引数
Y
— 出力メッセージ データとパリティ シンボル
整数
メッセージ データとパリティ シンボル。入力メッセージ X
と同じデータ型をもつ整数として一度に 1 つのシンボルを返します。
データ型: double
| uint8
| uint16
| uint32
| fi
startOut
— 出力データ フレームの先頭
logical スカラー
出力データ フレームの先頭。logical スカラーとして返されます。
データ型: logical
endOut
— 出力データ フレームの末尾
logical スカラー
出力データ フレームの末尾。logical スカラーとして返されます。
データ型: logical
validOut
— 出力データの有効性
logical スカラー
出力データの有効性。logical スカラーとして返されます。
データ型: logical
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
HDL のリード・ソロモン符号化と誤り検出
リード・ソロモン符号化器と復号化器 System object を使用して信号を符号化および復号化します。この例では、HDL コード生成の関数に各オブジェクトを含める方法を説明します。
符号化するランダムなメッセージを作成します。オブジェクトの短縮符号をサポートする方法を表示するために、このメッセージはコードワード長より短くなっています。チェン サーチを含む復号化器のレイテンシに対応するように、メッセージにゼロを付加します。
messageLength = 188;
dataIn = [randi([0,255],1,messageLength,'uint8') zeros(1,1024-messageLength)];
符号が RS(255,239) の HDLRSEncoder
System object™ を作成して呼び出す関数を記述します。この符号は IEEE® 802.16 Broadband Wireless Access 規格で使用されます。B
は原始多項式の根の開始累乗です。この関数から HDL を生成できます。
function [dataOut,startOut,endOut,validOut] = HDLRSEnc80216(dataIn,startIn,endIn,validIn) %HDLRSEnc80216 % Processes one sample of data using the comm.HDLRSEncoder System object(TM) % dataIn is a uint8 scalar, representing 8 bits of binary data. % startIn, endIn, and validIn are logical scalar values. % You can generate HDL code from this function. persistent rsEnc80216; if isempty(rsEnc80216) rsEnc80216 = comm.HDLRSEncoder(255,239,'BSource','Property','B',0) end [dataOut,startOut,endOut,validOut] = rsEnc80216(dataIn,startIn,endIn,validIn); end % Copyright 2019-2022 The MathWorks, Inc.
関数を呼び出して、メッセージを符号化します。
for ii = 1:1024 messageStart = (ii==1); messageEnd = (ii==messageLength); validIn = (ii<=messageLength); [encOut(ii),startOut(ii),endOut(ii),validOut(ii)] = ... HDLRSEnc80216(dataIn(ii),messageStart,messageEnd,validIn); end
rsEnc80216 = comm.HDLRSEncoder with properties: CodewordLength: 255 MessageLength: 239 PrimitivePolynomialSource: 'Auto' PuncturePatternSource: 'None' BSource: 'Property' B: 0
符号化されたメッセージのランダムな位置に誤りを投入します。リード・ソロモンは、各 N シンボルの (N-K)/2 までの誤りを訂正できます。したがって、この例の誤り訂正能力は (255 – 239)/2=8 シンボルです。
numErrors = 8; loc = randperm(messageLength,numErrors); % encOut is qualified by validOut, use an offset for injecting errors vi = find(validOut==true,1); for i = 1:numErrors idx = loc(i)+vi; symbol = encOut(idx); encOut(idx) = randi([0 255],'uint8'); fprintf('Symbol(%d): was 0x%x, now 0x%x\n',loc(i),symbol,encOut(idx)) end
Symbol(147): was 0x1f, now 0x82 Symbol(16): was 0x6b, now 0x82 Symbol(173): was 0x3, now 0xd1 Symbol(144): was 0x66, now 0xcb Symbol(90): was 0x13, now 0xa4 Symbol(80): was 0x5a, now 0x60 Symbol(82): was 0x95, now 0xcf Symbol(56): was 0xf5, now 0x88
HDLRSDecoder
System object™ を作成および呼び出す関数を記述します。このオブジェクトの符号と多項式は符号化器と同じでなければなりません。この関数から HDL を生成できます。
function [dataOut,startOut,endOut,validOut,err] = HDLRSDec80216(dataIn,startIn,endIn,validIn) %HDLRSDec80216 % Processes one sample of data using the comm.HDLRSDecoder System object(TM) % dataIn is a uint8 scalar, representing 8 bits of binary data. % startIn, endIn, and validIn are logical scalar values. % You can generate HDL code from this function. persistent rsDec80216; if isempty(rsDec80216) rsDec80216 = comm.HDLRSDecoder(255,239,'BSource','Property','B',0) end [dataOut,startOut,endOut,validOut,err] = rsDec80216(dataIn,startIn,endIn,validIn); end % Copyright 2019-2022 The MathWorks, Inc.
関数を呼び出して、符号化されたメッセージ内の誤りを検出します。
for ii = 1:1024 [decOut(ii),decStartOut(ii),decEndOut(ii),decValidOut(ii),decErrOut(ii)] = ... HDLRSDec80216(encOut(ii),startOut(ii),endOut(ii),validOut(ii)); end
rsDec80216 = comm.HDLRSDecoder with properties: CodewordLength: 255 MessageLength: 239 PrimitivePolynomialSource: 'Auto' BSource: 'Property' B: 0 NumErrorsOutputPort: false
有効な復号化器出力を選択して、復号化されたシンボルを元のメッセージと比較します。
decOut = decOut(decValidOut==1); originalMessage = dataIn(1:messageLength); if all(originalMessage==decOut) fprintf('All %d message symbols were correctly decoded.\n',messageLength) else for jj = 1:messageLength if dataIn(jj)~=decOut(jj) fprintf('Error in decoded symbol(%d). Original 0x%x, Decoded 0x%x.\n',jj,dataIn(jj),decOut(jj)) end end end
All 188 message symbols were correctly decoded.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
この System object は、MATLAB® シミュレーションの高速化および DPI コンポーネントの生成を目的とした C/C++ コードの生成をサポートします。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
このソフトウェアは、double
および single
データ型をシミュレーションではサポートしますが、HDL コード生成ではサポートしません。
事前定義された System object からの HDL コードを生成するには、ビタビ復号化器 System object からの HDL コード生成 (HDL Coder)を参照してください。
バージョン履歴
R2012b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)