主要内容

使用Matlab的流数据验证Turbo解码器

这个例子展示了如何使用来自MATLAB®的流数据来验证一个针对硬件的Turbo解码器设计。

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

LTE Toolbox™和5G Toolbox™功能在框架,浮点和整数数据上的模型操作,并提供出色的行为参考。硬件设计必须使用流式布尔或定点数据。此示例将帧转换为Matlab中的样本,并将样本流导入Simulink®以进行硬件算法设计。万博1manbetx应用相同的数据在Simulink中的硬件算法和MATLAB中的行为算法。万博1manbetx来自Simulink仿真的输出样本流将导出到MATLAB,然后转换回万博1manbetx帧数据进行比较。

Simulink中的硬件定位万博1manbetx

Simulink®中用于硬件目标的模型的关键特性是:万博1manbetx

  • 流示例接口LTE工具箱和5G工具箱功能处理帧,而无线HDL工具箱中的块使用流采样接口。串行处理是一种有效的硬件设计方法。有关更多信息,请参见流示例接口.在Simulink中,您可以使用万博1manbetx帧样本块或在matlab中使用Whdlflamestosamples.函数。在此示例中,我们将帧转换为Matlab中的样本使用Whdlflamestosamples.函数。

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

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

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

MATLAB脚本包含六个部分:

  1. Turbo解码器的行为仿真

  2. 输入帧到样本的转换

  3. 建立了硬件设计的Sim万博1manbetxulink模型

  4. 运行Si万博1manbetxmulink模型

  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,'QPSK');噪音= 0.5 *复杂(randn(大小(txSymbols)), randn(大小(txSymbols)));rxSymbols = txSymbols + noise;散射(真实(rxSymbols),图像放大(rxSymbols),'CO');抓住;散射(真实(txSymbols),图像放大(txSymbols),“处方”)传说(“Rx星座”“Tx星座”)软位= ltesymboldemomodulation (rxSymbols,'QPSK'“软”);rxBits = lteTurboDecode (softBits);

输入帧到样本的转换

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

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

然后,将帧数据转换为样本流和控制信号Whdlflamestosamples.函数。此功能还会向示例流添加无效的样本,以模拟流硬件数据。此功能的输出是Simulink模型的输入。万博1manbetx

在本例中,Whdlflamestosamples.功能被配置为在Simulink模型中向LTE Turbo解码器块提供输入。万博1manbetx在有效样本之间插入无效的样本。

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

turbo编码器函数首先返回系统位,然后是第一组奇偶校验位,最后是第二组奇偶校验位。LTE Turbo解码器需要每组系统和两个奇偶校验位一起发送。为了将输入数据相应地重构到Turbo Decoder块中,我们选择了由交错输入样本组成输出样本的选项。

inframesize = 18444;%steatbits的大小
样本之间无无效循环idlecyclesbetweensamples = 0;
增压器解码器输出帧的额外延迟numTurboIterations = 6;每半迭代涡轮解码器块的%延迟tdlatency =(装天花板(turboFrameSize / 32) + 4) * 32;用于Turbo解码器输出的帧延迟%ALGFRAMERDELAY =(2 * NUMTURBEITORATION + 2)*(CEIL(TDLATENY / TURBOMRAMESIZE));idlecyclesbetweenframes =(inframesize / insamplesize)* algframedelay;
%输出由交错输入样本组成% input: S_1 S_2…S_n P1_1…P1_n P2_1 P2_2…P2_n%输出: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,interleavesample);

建立了硬件设计的Sim万博1manbetxulink模型

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

modelname ='turbodecoderstreamingdatahdlexample'

LTE Turbo译码器子系统包括LTE Turbo译码器堵塞。该块设置为运行6个解码迭代。

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

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

运行Si万博1manbetxmulink模型

您可以通过单击播放按钮或在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);流(['\ nlteb turbo解码器:行为和''HDL模拟有%d位\n\n'), numBitsDiff);

生成HDL代码并验证其行为

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

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

另请参阅

功能

相关的例子

更多关于