主要内容

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

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

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

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

Simulink中的硬件目标金宝app

Simulink®中硬件目标模型的主要功能包括:金宝app

  • 流式采样接口:LTE Toolbox和5G Toolbox函数处理帧,而无线HDL Toolbox中的块使用流式采样接口。串行处理对于硬件设计非常有效。有关更多信息,请参阅流式采样接口。您可以在Simulink中使用金宝app帧到样本块或在MATLAB中使用whdlFramesToSamples函数。在这个例子中,我们在MATLAB中使用whdlFramesToSamples函数。

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

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

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

MATLAB脚本包含六个部分:

  1. Turbo译码器的行为模拟

  2. 输入帧到样本的转换

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

  4. 运行仿真金宝app软件模型

  5. 将输出样本转换为帧

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

Turbo译码器的行为模拟

对于设计的行为模拟,请使用lteTurboDecodeLTE工具箱中的函数。此函数的输入,软比特,也是HDL目标设计的输入lteTurboDecode作用rxBits可用于与HDL目标设计的输出进行比较。这两个软比特rxBits是浮点数据的帧。

%噪声星座中软比特的Turbo译码turboFrameSize = 6144;txBits = randi([0 1],turboFrameSize,1);codedData = lteTurboEncode (txBits);txSymbols = lteSymbolModulate (codedData,“正交相移编码”); 噪声=0.5*复数(randn(大小(txSymbols)),randn(大小(txSymbols));rxSymbols=txSymbols+噪声;散射(实(rxSymbols)、imag(rxSymbols),“有限公司”);持有;散射(实(txSymbols)、imag(txSymbols),“rx”)传奇(“Rx星座”,“Tx星座”)软位=lteSymbolDemodulate(rxSymbols,“正交相移编码”,“软的”);rxBits=LTE涡轮解码(软位);

输入帧到样本的转换

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

inframes=fi(软位,1、5、2);

接下来,使用whdlFramesToSamples函数。此函数还将无效样本添加到样本流中,以模拟流硬件数据。这个函数的输出就是Simulink模型的输入。金宝app

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

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

turbo encoder函数首先返回系统位,然后返回第一组奇偶校验位,最后返回第二组奇偶校验位。但是,LTE turbo解码器要求将每组系统位和2个奇偶校验位一起发送。要相应地重塑turbo解码器块的输入数据,我们选择组合选项输出样本来自交错输入样本。

inframesize=18444;%软位大小
%样本之间没有无效循环idlecyclesbetweensamples = 0;
%Turbo解码器输出的额外帧延迟numTurboIterations=6;每半迭代Turbo译码块的延迟%tdlatency=(ceil(turboFrameSize/32)+4)*32;%Turbo解码器输出的帧延迟algframedelay = (2*numTurboIterations + 2)*(cell (tdlatency/turboFrameSize)));idlecyclesbetweenframes = (inframesize / insamplesize) * algframedelay;
%输出由交错输入样本组成%输入: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]=whdlFramesToSamples(inframes,...样本之间的IDLECYCLES,...帧之间的IDLECYCLES,...抽样,...interleaveSamples);

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

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

型号名称=“TurboDecoderStreamingDataHDLExample”;

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

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

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

运行仿真金宝app软件模型

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

sim (modelname);

将输出样本转换为帧

运行模型将导致流式采样和控制信号从变量中的模型记录抽样ctrlOut_ts.样本和控制数据被转换为帧使用whdlSamplesToFrames函数。

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

验证Simulink模型的输出金宝app

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

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

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

生成HDL代码并验证其行为

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

makehdl ([modelname“/LTE Turbo解码器”])%生成HDL代码makehdltb([modelname“/LTE Turbo解码器”])生成HDL测试平台

另见

功能

相关实例

更多关于