主要内容

用MATLAB中的流数据验证Turbo解码器

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

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

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

Simulink中的硬件定位金宝app

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

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

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

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

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

MATLAB脚本包含六个部分:

  1. Turbo译码器的行为仿真

  2. 输入帧到样本的转换

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

  4. 运行Si金宝appmulink模型

  5. 将输出样本转换为帧

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

Turbo译码器的行为仿真

对于设计的行为模拟,请使用LTE涡轮解码LTE工具箱中的函数。此函数的输入,软比特,也是HDL目标设计的输入LTE涡轮解码作用rxBits可用于与HDL目标设计的输出进行比较。二者都软比特rxBits是浮点数据的帧。

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

输入帧到样本的转换

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

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

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

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

这个LTE-Turbo解码器块接收一帧数据,一次一个样本,通过指定的迭代次数运行,然后可以接受另一个输入帧。为了允许块处理时间运行6次迭代,我们在帧之间包含无效样本。在本例中,我们将帧之间的无效样本数设置为7次迭代(或14个半迭代,每个迭代对应一个延迟帧)LTE-Turbo解码器.

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

inframesize=18444;%软位的大小
%样本之间没有无效循环样本之间的IDLECYCLES=0;
%Turbo解码器输出的额外帧延迟numTurboIterations=6;%每半次迭代Turbo解码器块的延迟tdlatency=(ceil(turboFrameSize/32)+4)*32;%Turbo解码器输出的帧延迟algframedelay=(2*numTurboIterations+2)*(ceil(tdlatency/turboFrameSize));帧间idleCycles=(inframesize/insamplesize)*algframedelay;
%输出由交错输入样本组成%输入:S_1 S_2…S_n P1_1 P1_2…P1_n P2_1 P2_2…P2_n%输出:S_1 P1_1 P2_1 S2 P1_2 P2_2。。。序号P1\n P2\n
交错采样=真;
[sampleIn,ctrlIn]=whdlFramesToSamples(inframes,...样本之间的IDLECYCLES,...帧之间的IDLECYCLES,...抽样,...交织样本);

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

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

型号名称=“TurboDecoderStreamingDataHdlexSample”;

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

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

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

运行Si金宝appmulink模型

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

sim(型号名称);

将输出样本转换为帧

运行模型将导致流式采样和控制信号从变量中的模型记录抽样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=外帧{:};

验证Simulink模型的输出金宝app

将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测试台

另见

阻碍

功能

相关实例

更多关于