主要内容

用MATLAB的框架数据验证Turbo解码器

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

要运行此示例,请使用VerifyLTEHDLTurboDecoderFramedData.m脚本。

LTE Toolbox™和5G Toobox™功能对框架、浮点和整数数据进行建模操作,并提供出色的行为参考。硬件设计必须使用流布尔或定点数据。本例将框架数据导入Simulink®,然后将其转换为用于硬件算法设计的样金宝app本流。同样的数据应用于Simulink中的硬件算法和MATLAB中的行为算法。金宝appSimu金宝applink模型将输出的样本流转换为帧,并将帧导出到MATLAB中进行比较。

Simulink中的硬件定位金宝app

在Simulink®中,硬件目标模型的主要特性是:金宝app

  • 流式采样接口: LTE工具箱和5G工具箱功能处理帧,而无线HDL工具箱中的块使用流样本接口。串行处理是硬件设计的有效方法。有关详细信息,请参见流式采样接口.控件可以在Simulink中将帧转换为示例金宝app帧到样本块或在MATLAB中使用whdlFramesToSamples函数。在本例中,我们使用Frame to samples块将帧转换为Simulink中的样本流。金宝app

  • 针对HDL代码生成的子系统:设计一个硬件友好的样本流模型.设计中针对HDL代码生成的部分必须在一个单独的子系统中。

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

您可以使用VerifyLTEHDLTurboDecoderFramedData.mMATLAB脚本运行MATLAB行为代码,建立、导入数据并运行Simulink™模型,导出数据,并比较行为和Simulink输出结果。金宝app

MATLAB脚本包含四部分:

  1. Turbo译码器的行为仿真

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

  3. 运行Si金宝appmulink模型

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

Turbo译码器的行为仿真

对于设计的行为模拟,请使用lteTurboDecode功能从LTE工具箱。这段代码生成输入数据,softBits我们可以把它作为HDL目标设计的输入。的行为输出lteTurboDecode函数,rxBits可用于输出比较,以HDL为目标设计。这两个softBits而且rxBits是浮点数据的帧。

%从噪声星座获得的软位的Turbo解码turboFrameSize = 6144;txBits = randi([0 1],turboFrameSize,1);codedData = lteTurboEncode(txBits);txSymbols = ltesymbolmodululate (codedData,“正交相移编码”);噪声= 0.5*complex(randn(size(txSymbols)),randn(size(txSymbols))));rxSymbols = txSymbols +噪声;散射(真实(rxSymbols),图像放大(rxSymbols),“有限公司”);持有;散射(真实(txSymbols),图像放大(txSymbols),“处方”)传说(“Rx星座”“Tx星座”) softBits = lteSymbolDemodulate(rxSymbols,“正交相移编码”“软”);rxBits = lteTurboDecode(softBits);

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

该模型从MATLAB工作区导入基于帧的数据。在这种情况下,变量inframes而且blockSizeIn是模型的输入。

LTE Turbo译码器子系统由LTE Turbo译码器块。该块的帧大小设置为6144系统位,解码迭代6次。

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

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

在本例中,Frame To Samples块被配置为提供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 = length(softBits);
LTE Turbo Decoder块的%设置numTurboIterations = 6;
%设置帧到样本块Idlecyclesbetweensamples = 0;每半次迭代,来自LTE Turbo Decoder块的近似延迟%tdlatency = (ceil(turboFrameSize/32)+4)*32;% LTE Turbo解码器输出的帧近似延迟algframedelay = (2*numTurboIterations + 2)*(ceil(tdlatency/turboFrameSize));%速率1/3编码:系统+ 2奇偶校验Insamplesize = 3;Idlecyclesbetweenframes = (inframesize/insamplesize)*algframedelay;选择从交错输入样本组合输出的选项set_param ([modelname'/Frame To Samples'),“InterleaveSamples”“上”);
%设置样本帧块%精确设置,包括引入的空闲周期Totalframesize = ((inframesize/insamplesize)*(idlecyclesbetweensamples + 1)) + idlecyclesbetweenframes;%可选设置,与LTE Turbo Decoder输出帧大小相同% totalframesize = outframesize;Outsamplesize = 1;

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

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

运行Si金宝appmulink模型

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

sim (modelname);

验证Simulink模型输出金宝app

运行模型的结果是从变量中的Frame Output To Workspace块中记录的数据帧outframes_logdata.将数据与行为模拟的输出进行比较,以找到行为代码和硬件目标模型之间的位不匹配的数量。

该仿真结果无误码。增加添加到样本中的噪声量或减少迭代次数可能会导致比特误差。

处理HDL模型输出,并与行为仿真输出进行比较将所有已记录的数据收集到一个数组中rxBits_hdl = outframes_logdata(:);
检查位不匹配数numBitsDiff = sum(rxBits_hdl ~= rxBits);流([\nLTE Turbo解码器:行为和'HDL模拟相差%d位\n\n'), numBitsDiff);

生成HDL代码并验证其行为

一旦您的设计在模拟中工作,您可以使用HDL Coder™来实现生成HDL代码LTE Turbo译码器子系统。使用HDL验证器™生成一个SystemVerilog DPI测试台(高密度脂蛋白编码器)或运行FPGA-in-the-Loop

makehdl ([modelname'/LTE Turbo Decoder'])生成HDL代码makehdltb ([modelname'/LTE Turbo Decoder'])生成HDL测试台

另请参阅

功能

相关的例子

更多关于