主要内容

用MATLAB中的帧数据验证Turbo译码器

此示例演示如何使用来自MATLAB®的数据帧验证以硬件为目标的LTE Turbo解码器设计。

要运行此示例,请使用验证LTEHDLTURBODeCoderFramedData.m脚本。

LTE工具箱™ 和5G Toobox™ 函数对帧、浮点和整数数据的操作进行建模,并提供出色的行为参考。硬件设计必须使用流布尔或定点数据。此示例将帧数据导入Simulink®中,然后转换为用于硬件算法设计的样本流。相同的数据应用于两种硬件算法Simulink中的m和MATLAB中的行为算法。Simulink模型将输出样本流转换为帧,并将帧导出到MATLAB进行比较。金宝app

Simulink中的硬件定位金宝app

Simulink®中针对硬件的模型的关键特征是:金宝app

  • 流示例接口LTE工具箱和5G工具箱功能处理帧,而无线HDL工具箱中的块使用流示例接口。串行处理对于硬件设计是有效的。有关更多信息,请参见流示例接口.可以在Simulink中使用金宝app帧样本在MATLAB中使用whdlFramesToSamples函数。在这个例子中,我们在Simulink中使用Frame to samples块将帧转换为样本流。金宝app

  • 面向HDL代码生成的子系统:设计一个硬件友好的采样流模型,从阻碍.针对HDL代码生成的设计部分必须位于单独的子系统中。

  • 将基于样本的输出转换为帧:为了验证,您可以将硬件兼容设计的结果导出到MATLAB®工作区。然后,您可以将此结果与MATLAB行为设计的输出进行比较。在本例中,我们使用金宝app样本到框架块。

你可以使用验证LTEHDLTURBODeCoderFramedData.mMATLAB脚本运行MATLAB行为代码,设置、导入数据并运行Simulink™ 建模、导出数据,并比较行为和Simulink输出。金宝app

MATLAB脚本包含四个部分:

  1. Turbo译码器的行为仿真

  2. 建立硬件设计的Simu金宝applink模型

  3. 运行Si金宝appmulink模型

  4. 验证Simulink模型的输出金宝app

Turbo译码器的行为仿真

对于设计的行为模拟,使用LTE涡轮解码来自LTE工具箱的函数。此代码生成输入数据,softBits我们可以将其用作HDL目标设计的输入LTE涡轮解码函数,rxBits可用于与HDL目标设计的输出进行比较softBitsrxBits是浮点数据的帧。

从噪声星座获得的软位的Turbo译码turboFrameSize = 6144;txBits = randi([0 1],turboFrameSize,1);codedData = lteTurboEncode (txBits);txSymbols = lteSymbolModulate (codedData,“QPSK”);噪音= 0.5 *复杂(randn(大小(txSymbols)), randn(大小(txSymbols)));rxSymbols = txSymbols + noise;散射(真实(rxSymbols),图像放大(rxSymbols),“co”);持有;散射(真实(txSymbols),图像放大(txSymbols),“rx”)传说(“Rx星座”“Tx星座”) softBits = lteSymbolDemodulate(rxSymbols,“QPSK”“软”); rxBits=LTE涡轮解码(软位);

建立硬件设计的Simu金宝applink模型

该模型从MATLAB工作空间导入基于框架的数据。这里是变量inframesblockSizeIn是模型的输入。

LTE Turbo译码器子系统包括LTE Turbo译码器块。这个块被设置为6144个系统位和6次解码的帧大小运行。

Simu金宝applink模型从MATLAB中导入数据帧,并在Simulink模型中将其转换为样本流。

“帧到采样”块将帧数据转换为采样和控制信号流。此块还向采样流添加无效采样,以模拟流硬件数据。此块向目标为HDL代码生成的子系统提供输入,但其本身不支持HDL代码生成。金宝app

在本例中,帧到样本块被配置为向LTE Turbo Decoder块提供输入。有效样本之间没有插入无效样本。

Simu金宝applink模型还从工作空间导入帧大小参数,并将其传递到LTE Turbo Decoder块的blockSize端口。此示例使用一个块大小,因此该端口保持在由turboFrameSize参数

LTE Turbo Decoder块接收一帧数据,运行指定的迭代次数,然后可以接受另一帧输入。为了允许块处理时间运行6次迭代,我们在帧之间发送无效的样本。在本例中,我们将帧间无效样本的数量设置为7次迭代(或14次半迭代,每一次对应一帧延迟)。要计算出加工一帧所需的精确周期,请看LTE Turbo译码器

turbo编码器功能先发送所有系统位,然后是第一组奇偶校验位,最后是第二组奇偶校验位。然而,LTE Turbo译码器要求每组系统和2个奇偶校验位一起发送。为了对LTE Turbo Decoder块的输入数据进行相应的整形,我们选择将交叉输入样本组成输出样本。

%打开模型modelname =“TurboDecoderFramedDataHDLExample”;open_system (modelname);
%从工作区块输入的帧的设置inframesize=长度(软位);
%LTE Turbo解码器块的设置numTurboIterations = 6;
%设置帧到样本块样本之间的IDLECYCLES=0;%每半次迭代LTE Turbo解码器块的近似延迟tdlatency=(ceil(turboFrameSize/32)+4)*32;LTE Turbo Decoder输出帧的近似延迟%algframedelay = (2*numTurboIterations + 2)*(cell (tdlatency/turboFrameSize)));%率1/3代码:系统+ 2奇偶校验insamplesize = 3;idlecyclesbetweenframes = (inframesize / insamplesize) * algframedelay;%选择从交错输入样本组成输出的选项设置参数([modelname“/帧样本”],...“交错样本”“上”);
采样帧块的设置%精确设置,包括引入的怠速循环totalframesize = ((inframesize / insamplesize) *...(样本之间的idlecycles+1))+框架之间的idlecycles;%可选设置,与LTE Turbo Decoder输出帧大小相同%totalframesize=outframesize;outsamplesize = 1;

MATLAB代码还将输入数据转换为定点,以便在硬件目标模型中使用,并计算所需的仿真时间。

%的仿真时间numFrames = 1;%要运行的帧数simTime=numFrames;
%为模型输入帧数据%使用与lteTurboDecode相同的数据,转换为固定点inframes=fi(软位,1、5、2);

运行Si金宝appmulink模型

您可以通过单击播放按钮或调用MATLAB命令行上的sim命令来运行模型。

sim(型号名称);

验证Simulink模型的输出金宝app

运行模型会导致从帧输出记录到变量中的工作区块的数据帧外框日志数据。将数据与行为模拟的输出进行比较,以找出行为代码与硬件目标模型之间的位不匹配数。

此模拟不会导致位错误。增加添加到样本的噪声量或减少迭代次数可能会导致位错误。

% HDL模型的过程输出,并与行为模拟输出进行比较%将所有记录的数据收集到一个阵列中rxBits_hdl=输出帧_日志数据(:);
%检查位不匹配的数量numBitsDiff=总和(rxBits_hdl~=rxBits);fprintf([“\nLTE Turbo解码器:行为和”...“HDL模拟相差%d位\n\n”), numBitsDiff);

生成HDL代码并验证其行为

一旦您的设计在模拟中工作,您就可以使用HDL编码器™ 到生成HDL代码LTE Turbo译码器子系统。使用HDL验证器™生成SystemVerilog DPI测试台(HDL编码器)或运行环路中的FPGA

makehdl([modelname' / LTE Turbo译码器的])生成HDL代码makehdltb ([modelname' / LTE Turbo译码器的])%生成HDL测试台

另请参阅

阻碍

功能

相关的例子

更多关于