Main Content

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

MATLAB システム オブジェクトと FPGA インザループを使用して Viterbi デコーダを検証する

この例では、MATLAB® System object と FPGA インザループを使用して、FPGA 上で VHDL® で実装された Viterbi デコーダーをシミュレートする方法を示します。

FPGA設計ソフトウェア環境の設定

FPGA インザループを使用する前に、FPGA 設計ソフトウェアにアクセスするためのシステム環境が適切に設定されていることを確認してください。関数 hdlsetuptoolpath を使用して、現在の MATLAB セッションのシステム パスに FPGA 設計ソフトウェアを追加できます。

FilWizardを起動する

スクリプトを開くボタンをクリックします。次に、Viterbi の例の情報が事前に入力された FIL ウィザードを起動します。最初のステップで FPGA ボード情報を入力し、ウィザードの各ステップに従って FPGA プログラミング ファイルと FIL System object を生成します。

filWizard('viterbi_hdlsrc/viterbi_sysobj_fil.mat');

FPGAをプログラムする

生成されたプログラミング ファイルを使用して FPGA をプログラムします。続行する前に、FIL ウィザードが FPGA プログラミング ファイルの生成を完了していることを確認してください。また、FPGA ボードがオンになっていて、正しく接続されていることを確認してください。

run('viterbi_block_fil/viterbi_block_programFPGA');

シミュレーションパラメータを設定し、通信システムオブジェクトをインスタンス化する

次のコードは、シミュレーション パラメータを設定し、チャネル エンコーダー、BPSK 変調器、AWGN チャネル、BPSK 復調器、およびエラー レート計算機を表すシステム オブジェクトをインスタンス化します。これらのオブジェクトは、Viterbi デコーダーの周囲のシステムを構成し、Viterbi HDL 実装のテスト ベッドと考えることができます。

EsNo = 0;	% Energy per symbol to noise power spectrum density ratio in dB
FrameSize = 1024;  % Number of bits in each frame
% Convolution Encoder
hConEnc = comm.ConvolutionalEncoder;
% BPSK Modulator
hMod    = comm.BPSKModulator;
% AWGN channel
hChan   = comm.AWGNChannel('NoiseMethod', ...
                           'Signal to noise ratio (Es/No)',...
                           'SamplesPerSymbol',1,...
                           'EsNo',EsNo);
% BPSK demodulator
hDemod  = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio',...
                               'Variance',0.5*10^(-EsNo/10));
% Error Rate Calculator
hError  = comm.ErrorRate('ComputationDelay',100,'ReceiveDelay', 58);

FPGAインザループシステムオブジェクトのインスタンス化

viterbi_block_fil はカスタマイズされた FILSimulation System object であり、このシミュレーション システムの FPGA 上で実行される Viterbi デコーダーの HDL 実装を表します。

hDec    = viterbi_block_fil;

シミュレーションの実行

この例では、FPGA インザループSystem object を介して Viterbi デコーダー HDL 実装を組み込んだ MATLAB の BPSK 通信システムをシミュレートします。このコードのセクションでは、処理ループを呼び出して、各データ フレームに 1024 ビットが含まれるデータをフレームごとに処理します。

for counter = 1:20480/FrameSize
    data            = randi([0 1],FrameSize,1);
    encodedData     = step(hConEnc, data);
    modSignal       = step(hMod, encodedData);
    receivedSignal  = step(hChan, modSignal);
    demodSignalSD   = step(hDemod, receivedSignal);
    quantizedValue  = fi(4-demodSignalSD,0,3,0);
    input1          = quantizedValue(1:2:2*FrameSize);
    input2          = quantizedValue(2:2:2*FrameSize);
    % Send/receive 1 frame to/from the HDL viterbi decoder on the FPGA
    [ce_out, receivedBits] = step(hDec,input1, input2);
    errors          = step(hError, data, double(receivedBits));
end

ビットエラー率を表示する

ビタビデコーダーのビットエラー率が表示されます。

sprintf('Bit Error Rate is %d\n',errors(1))

これで、「MATLAB システム オブジェクトと FPGA インザループを使用した Viterbi デコーダの検証」の例は終了です。