主要内容

验证Turbo译码器与流数据从MATLAB

这个例子展示了如何验证一个硬件目标Turbo译码器设计使用流数据从MATLAB®。

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

LTE Toolbox™和5G Toolbox™对框架数据、浮点数据和整数数据进行建模操作,并提供卓越的行为参考。硬件设计必须使用流布尔或定点数据。本例在MATLAB中将帧转换为样本,并将样本流导入Simulink®进行硬件算法设计。万博1manbetx在Simulink中的硬件算法和MATLAB中的行为算法中都应用了相同的数据。万博1manbetxSimulink仿真的输出样本流被导出到MATLAB,然后转换回帧数万博1manbetx据进行比较。

Simulink中的硬件目标万博1manbetx

Simulink®中针对硬件的模型的关键特征是:万博1manbetx

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

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

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

你可以使用VerifyLTEHDLTurboDecoderStreamingData.mMATLAB脚本运行MATLAB行为代码,建立、导入数据并运行Simulink™模型,导出数据,并比较行为和Simulink输出。万博1manbetx

MATLAB脚本包含六个部分:

  1. Turbo译码器的行为模拟

  2. 输入帧到样本的转换

  3. 建立硬件设计的Simu万博1manbetxlink模型

  4. 运行仿真万博1manbetx软件模型

  5. 将输出样本转换为帧

  6. 验证Simulink模型的输出万博1manbetx

Turbo译码器的行为模拟

对于设计的行为模拟,使用lteTurboDecode功能从LTE工具箱。这个函数的输入,softBits,也是针对HDL设计的输入。行为输出lteTurboDecode函数,rxBits可用于与HDL目标设计的输出进行比较。这两个softBitsrxBits是浮点数据的帧。

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

输入帧到样本的转换

首先,将输入帧转换为定点。

inframes = fi(softBits, 1, 5, 2);

接下来,使用。将帧数据转换为采样和控制信号流whdlFramesToSamples函数。此函数还将无效样本添加到样本流中,以模拟流硬件数据。这个函数的输出就是Simulink模型的输入。万博1manbetx

在这个例子中whdlFramesToSamples功能配置为在Simulink模型中提供LTE Turbo Decoder块的输入。万博1manbetx有效样本之间没有插入无效样本。

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

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

inframesize = 18444;%软位大小
%样品之间没有无效循环idlecyclesbetweensamples = 0;
Turbo译码器输出帧的额外延迟numTurboIterations = 6;每半迭代Turbo译码块的延迟%tdlatency =(装天花板(turboFrameSize / 32) + 4) * 32;Turbo译码器输出帧延迟%algframedelay = (2*numTurboIterations + 2)*(cell (tdlatency/turboFrameSize)));idlecyclesbetweenframes = (inframesize / insamplesize) * algframedelay;
%输出由交错输入样本组成% input: S_1 S_2…S_n P1_1 P1_2…P1_n P2_1 P2_2…P2_n% output: S_1 P1_1 P2_1 S2 P1_2 P2_2…Sn P1_n P2_n
interleaveSamples = true;
[sampleIn, ctrlIn] = whdlframestsamples (inframes, ctrlIn,...idlecyclesbetweensamples,...idlecyclesbetweenframes,...insamplesize,...interleaveSamples);

建立硬件设计的Simu万博1manbetxlink模型

该模型从MATLAB工作空间中导入基于样本的数据和控件以及帧大小。

modelname =“TurboDecoderStreamingDataHDLExample”

LTE Turbo译码器子系统包括LTE Turbo译码器块。此块被设置为运行6次解码迭代。

MATLAB代码定义了输入大小的设置,Simulink模型的采样时间,并计算所需的仿真时间。万博1manbetx

来自工作区的信号块的设置samplesizeIn = 3;%编码率为1/3
sampletime = 1;
simTime =大小(ctrl, 1);

运行仿真万博1manbetx软件模型

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

sim (modelname);

将输出样本转换为帧

运行模型会产生流样本和控制信号,这些信号来自变量中的模型sampleOut_tsctrlOut_ts.样本和控制数据被转换为帧使用whdlSamplesToFrames函数。

%重新格式化记录的数据,以形成样本和控件输出sampleOut =挤压(sampleOut_ts.Data);ctrlOut =[挤压(ctrlOut_ts.start.Data)...挤压(ctrlOut_ts.end.Data)...挤压(ctrlOut_ts.valid.Data)];%从输出样本和控制数据形成框架outframes = whdlSamplesToFrames(sampleOut, ctrlOut);%收集所有的位-期望只有一帧rxBits_hdl = outframes {:};

验证Simulink模型的输出万博1manbetx

比较HDL仿真的输出和行为仿真的输出,以发现行为代码和硬件目标模型之间的位不匹配数。

这种模拟不会产生比特错误。增加添加到样本中的噪声量或减少迭代次数都可能导致比特错误。

%检查位不匹配的个数numBitsDiff = sum(rxBits_hdl ~= rxBits);流([“nLTE Turbo Decoder: Behavioral and”...“HDL模拟相差%d位\n\n”), numBitsDiff);

生成HDL代码并验证其行为

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

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

另请参阅

功能

相关的例子

更多关于