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

Этот пример показывает вам, как использовать Системные объекты MATLAB® и Наставника Graphics® ModelSim®/QuestaSim® или Cadence® Incisive®/Xcelium® к cosimulate Декодер Витерби, реализованный в VHDL.

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

Если вы используете Incisive/Xcelium, переменную средства моделирования набора к 'Острому'

Simulator = 'Incisive';

или если вы используете ModelSim/QuestaSim, переменную средства моделирования набора к 'ModelSim'

Simulator = 'ModelSim';

Следующие кодовые наборы параметры симуляции и инстанцируют системных объектов, которые представляют энкодер канала, модулятор 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

Энкодер свертки

hConEnc = comm.ConvolutionalEncoder;

Модулятор BPSK

hMod    = comm.BPSKModulator;

Канал AWGN

hChan   = comm.AWGNChannel('NoiseMethod', ...
                           'Signal to noise ratio (Es/No)',...
                           'SamplesPerSymbol',1,...
                           'EsNo',EsNo);

Демодулятор BPSK

hDemod  = comm.BPSKDemodulator('DecisionMethod','Log-likelihood ratio',...
                               'Variance',0.5*10^(-EsNo/10));

Калькулятор коэффициента ошибок

hError  = comm.ErrorRate('ComputationDelay',100,'ReceiveDelay', 58);

Инстанцируйте системного объекта Cosimulation

hdlcosim функция возвращает HDL cosimulation Системный объект, который представляет реализацию HDL Декодера Витерби в этой системе симуляции. Интерфейс объекта характерен для всех средств моделирования. Как удобство постараться не писать некоторый код испытательного стенда HDL, мы генерируем формы волны для часов и сброса с помощью специфичного для средства моделирования кода Tcl.

hDec = hdlcosim('InputSignals', {'/viterbi_block/In1','/viterbi_block/In2'}, ...
                'OutputSignals', {'/viterbi_block/Out1'}, ...
                'OutputSigned', false, ...
                'OutputFractionLengths', 0, ...
                'TCLPostSimulationCommand', 'echo "done";', ...
                'PreRunTime', {10,'ns'}, ...
                'Connection', {'Shared'}, ...
                'SampleTime', {10,'ns'});
switch Simulator
    case 'ModelSim'
        hDec.TCLPreSimulationCommand = ...
            'force /viterbi_block/clk_enable 1 0; force /viterbi_block/clk 0 0 ns, 1 5 ns -repeat 10 ns; force /viterbi_block/reset 1 0 ns, 0 8 ns; ';
    case 'Incisive'
        hDec.TCLPreSimulationCommand = ...
            'force :clk B"0" -after 0ns B"1" -after 5ns -repeat 10ns; force reset B"1" -after 0ns B"0" -after 8ns; force :clk_enable B"1" -after 0ns';
end

Запустите симулятор HDL

vsim и nclaunch команда запускают симулятор HDL. Запущенный сеанс симулятора HDL компилирует проект HDL и загружает симуляцию HDL. Вы готовы выполнить cosimulation, когда симуляция HDL полностью загружается в средстве моделирования.

disp('Launching HDL simulator...');
switch Simulator
    case 'ModelSim'
        vsim('tclstart',viterbi_cosimulation_tclcmds('vsimmatlabsysobj'));
    case 'Incisive'
        nclaunch('tclstart',viterbi_cosimulation_tclcmds('hdlsimmatlabsysobj'));
end
Timeout=30;
processid = pingHdlSim(Timeout);
% Check if HDL simulator is ready for Cosimulation.
assert(ischar(processid),['Timeout: HDL simulator took more than ', num2str(Timeout),' seconds to setup,please increase the timeout in ''pingHdlSim''']);
disp('...Simulator is ready for cosimulation.');
Launching HDL simulator...
...Simulator is ready for cosimulation.

Запустите Cosimulation

Этот пример симулирует систему связи BPSK в MATLAB, включающем реализацию HDL Декодера Витерби через cosimulation Системный объект. Этот раздел кода вызывает цикл обработки, чтобы обработать данные, покадровые с 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);
    receivedBits    = step(hDec,input1, input2);
    errors          = step(hError, data, double(receivedBits));
end

Отобразите частоту ошибок по битам

Частота ошибок по битам отображена для Декодера Витерби.

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

    'Bit Error Rate is 5.511269e-03
     '

Уничтожьте системный объект Cosimulation, чтобы выпустить симулятор HDL

Симулятор HDL разблокируется, когда HDL cosimulation системный объект уничтожается в MATLAB. Закройте сеанс симулятора HDL вручную.

clear hDec;

Это завершает, "Проверяют Декодер Витерби Используя Системный объект MATLAB и симулятор HDL".

Для просмотра документации необходимо авторизоваться на сайте