Проверка декодера Витерби Используя системный объект MATLAB и FPGA в цикле

Этот пример показывает вам, как использовать Системные объекты MATLAB® и FPGA в цикле, чтобы моделировать Декодер Витерби, реализованный в VHDL на FPGA.

Установите программную среду проекта FPGA

Перед использованием FPGA в цикле убедитесь, что ваша системная среда настраивается правильно для доступа к программному обеспечению проекта FPGA. Можно использовать функцию hdlsetuptoolpath, чтобы добавить ISE или Куарта II к системному пути для текущего сеанса работы с MATLAB.

Для плат FPGA Xilinx, выполнения

>>hdlsetuptoolpath('ToolName', 'Xilinx ISE', 'ToolPath', 'C:\Xilinx\13.1\ISE_DS\ISE\bin\nt64\ise.exe');

Этот пример принимает, что исполняемый файл ISE Xilinx является C:\Xilinx\13.1\ISE_DS\ISE\bin\nt64\ise.exe. Займите место со своим фактическим исполняемым файлом, если это отличается.

Для плат Altera, выполнения

>>hdlsetuptoolpath('ToolName','Altera Quartus II','ToolPath','C:\altera\11.0\quartus\bin\quartus.exe');

Этот пример принимает, что исполняемый файл Куарта II Altera является C:\altera\11.0\quartus\bin\quartus.exe. Займите место со своим фактическим исполняемым файлом, если это отличается.

Скопируйте файлы HDL Viterbi

Скопируйте файлы HDL для примера Viterbi в вашу локальную директорию

copyFILDemoFiles('viterbi');

Запустите FilWizard

Запустите Мастер FIL, предварительно заполненный с информацией о примере Viterbi. Введите свою информацию о плате FPGA в первый шаг, выполните каждый шаг Мастера и сгенерируйте файл программирования FPGA и Системный объект FIL.

filWizard('viterbi_hdlsrc/viterbi_sysobj_fil.mat');

FPGA программы

Программируйте FPGA со сгенерированным файлом программирования. Перед продолжением убедитесь, что Мастер FIL закончил FPGA, программируя генерацию файла. Также убедитесь, что ваша плата FPGA включена и соединена правильно.

run('viterbi_block_fil/viterbi_block_programFPGA');
### Generating iMPACT command file
### Checking iMPACT tool
### Start loading bitstream "S:\MATLAB\demo00\viterbi_block_fil\viterbi_block_fil.bit"
### Loading bitstream "S:\MATLAB\demo00\viterbi_block_fil\viterbi_block_fil.bit" completed successfully

Установите параметры симуляции и инстанцируйте объектов системы связи

Следующие кодовые наборы параметры симуляции и инстанцируют системных объектов, которые представляют энкодер канала, модулятор BPSK, канал AWGN, демодулятор BPSK и калькулятор коэффициента ошибок. Те объекты включают систему вокруг Декодера Витерби и могут считаться испытательным стендом для реализации HDL Viterbi.

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, который представляет реализацию HDL Декодера Витерби, работающего на FPGA в этой системе симуляции.

hDec    = viterbi_block_fil;

Запустите симуляцию

Этот пример моделирует систему связи BPSK в MATLAB, включающем реализацию HDL Декодера Витерби через FPGA в Системном объекте цикла. Этот раздел кода вызывает цикл обработки, чтобы обработать данные, покадровые с 1 024 битами в каждом кадре данных.

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))

% This concludes the "Verifying Viterbi Decoder Using MATLAB System Object
% and FPGA-in-the-Loop" example.
ans =

Bit Error Rate is 5.511269e-03