主要内容

用MATLAB系统对象和fpga在环验证Viterbi解码器

本示例向您展示如何使用MATLAB®系统对象和FPGA-in- loop来模拟在FPGA上用VHDL®实现的Viterbi解码器。

设置FPGA设计软件环境

在使用FPGA-in- loop之前,请确保您的系统环境已正确设置为访问FPGA设计软件。你可以使用这个函数hdlsetuptoolpath将FPGA设计软件添加到当前MATLAB会话的系统路径中。

发射FilWizard

单击打开脚本按钮。然后,启动预先填充了Viterbi示例信息的FIL向导。在第一步中输入您的FPGA板信息,遵循向导的每一步并生成FPGA编程文件和FIL System对象。

filWizard (“viterbi_hdlsrc / viterbi_sysobj_fil.mat”);

FPGA程序

使用生成的编程文件对FPGA进行编程。在继续之前,请确保FIL向导已经完成FPGA编程文件的生成。此外,请确保您的FPGA板已打开并连接正确。

运行(“viterbi_block_fil / viterbi_block_programFPGA”);

设置仿真参数和实例化通信系统对象

下面的代码设置仿真参数并实例化表示信道编码器、BPSK调制器、AWGN信道、BPSK解调器和错误率计算器的系统对象。这些对象组成了围绕Viterbi解码器的系统,可以认为是Viterbi HDL实现的测试平台。

EsNo = 0;%每个符号能量与噪声功率谱密度之比,单位为dBFrameSize = 1024;%每帧的比特数
%卷积编码器hConEnc = com . convolutionalencoder;调制器hMod = com . bpskmodulator;% AWGN频道hChan = com . awgnchannel (“NoiseMethod”...信噪比(Es/No)...“SamplesPerSymbol”,1,...“EsNo”, EsNo);% BPSK解调器hDemod = com . bpsk解调器(“DecisionMethod”的“对数似然比...“方差”0.5 * 10 ^ (-EsNo / 10));%错误率计算器error = com . errorrate (“ComputationDelay”, 100,“ReceiveDelay”58岁);

实例化FPGA-in-the-Loop系统对象

viterbi_block_fil是一个定制的FILSimulation System对象,它表示在这个仿真系统中运行在FPGA上的Viterbi解码器的HDL实现。

hDec = viterbi_block_fil;

运行模拟

本例在MATLAB中模拟BPSK通信系统,通过fpga -in- loop system对象结合Viterbi解码器HDL实现。这部分代码调用处理循环来逐帧处理数据,每个数据帧中有1024位。

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);%发送/接收1帧到/从FPGA上的HDL viterbi解码器[ce_out, receivedBits] = step(hDec,input1, input2);errors = step(error, data, double(receivedBits));结束

显示误码率

Viterbi解码器显示“误码率”。

sprintf ('误码率%d\n'、错误(1))

“使用MATLAB系统对象和fpga在环验证Viterbi解码器”示例就此结束。