Main Content

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

MATLAB System Object と FPGA インザループを使用したビタビ デコーダーの検証

この例では、 MATLAB® System object と FPGA-in-the-Loop を使用して、FPGA 上の VHDL® で実装されたビタビ デコーダをシミュレートする方法を示します。

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

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

フィルウィザードを起動する

「スクリプトを開く」ボタンをクリックします。次に、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 復調器、および誤り率計算器を表すシステム オブジェクトをインスタンス化します。これらのオブジェクトは、ビタビ デコーダ周辺のシステムを構成し、ビタビ 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 上で実行されるビタビ デコーダーの HDL 実装を表します。

hDec    = viterbi_block_fil;

シミュレーションを実行する

この例では、FPGA インザループSystem objectを介してビタビ デコーダー 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 System Object と FPGA インザループを使用したビタビ デコーダーの検証」の例は終了です。