主要内容

分离和解码流式采样

此示例演示如何使用硬件友好的解捕获器块和维特比解码器块对以WLAN编码速率编码的样本进行解码。

在MATLAB®中通过编码随机数据、bpsk调制样本、应用信道模型、解调样本和创建接收软判决比特来生成输入样本。然后,将软决策位导入Simulink®模型中去穿刺并解码样本。金宝app将Simulink仿真结果导出到MATLAB中,并金宝app与原始输入样本进行比较。

示例模型支持HDL解码子系统的HDL金宝app代码生成。

型号名称=“ltehdlViterbiDecoderModel”;开放式系统(型号名称);

设置代码速率参数

设置描述代码速率的工作区变量。维特比解码器块支持范围[3,9]内的约束长度和范围[2,7]内的多项式长度。金宝app

选择[3128]范围内的回溯深度。对于未穿透样本,建议深度为回溯深度的5倍constraintLength.对于穿孔样品,建议深度为constraintLength.

从1/2码率开始,IEEE 802.11 WLAN指定了三种穿刺模式来生成额外的三种码率。选择其中一个码率,然后根据该码率设置帧大小和穿刺模式。你也可以选择1/2的未穿孔码率。

IEEE 802.11 WLAN为不同的码率和用途指定了不同的调制类型“终止”模式。此示例使用BPSK调制的所有速率,并可以运行“终止”“截断”操作模式。这些方块还支持金宝app“连续”模式,但在本例中不包括它。

约束长度=7;代码生成器=[133 171];opMode=“终止”;tracebackDepth = 10 * constraintLength;格子= poly2trellis (constraintLength,...代码生成器);% IEEE 802.11n-2009 WLAN 1/2 (7, [133171])%率穿孔模式最大帧大小% 1/2 [1;1;1;1] 2592% 2/3 [1;1;1;0] 1728% 3/4 [1;1; 0;0;1] 1944% 5/6 [1;1;1;0;0;1;1;0;0;1] 2160编码率=3/4;如果(codeRate == 2/3); / / / /frameSize = 1728;埃尔塞夫(codeRate==3/4)puncVector=logical([1;1;1;0;0;1]);frameSize=1944;埃尔塞夫(codeRate = = 5/6) puncVector =逻辑([1,1,1,0,0,1,1,0,0,1]);frameSize = 2160;其他的%编码率==1/2puncVector=逻辑([1;1;1;1]);帧大小=2592;终止如果strcmpi (opMode“终止”)%在帧的末尾终止状态tailLen=约束长度-1;其他的%截断模式tailLen=0;终止

生成用于解码的样本

使用通讯工具箱™ 函数和系统对象生成编码样本并应用信道噪声。解调接收到的样本,并为每个样本创建软判决值。

EbNo = 10;EcNo = EbNo - 10*log10(numel(codeGenerator));numFrames = 5;numSoftBits = 4;txMessages =细胞(1、numFrames);rxSoftMessages =细胞(1、numFrames);没有= 10 ^ ((-EcNo) / 10);quantStepSize =√No / 2 ^ numSoftBits);调制器= comm.BPSKModulator;频道= comm.AWGNChannel (“埃布诺”,EcNo);解调器=comm.bpsk解调器(“DecisionMethod”,“对数似然比”);对于ii=1:numframestxmessages{ii}=[randn(frameSize-tailLen,1)零(tailLen,1)]>0;卷积编码和穿刺txCodeword=convenrc(txMessages{ii},网格,puncVector);%调制modOut=调制器步进(txCodeword);%渠道chanOut=通道步进(modOut);%解调解调器=-解调器。步骤(chanOut)/4;%转换为软决策值rxSoftMessagesDouble=demodmout./quantStepSize;rxSoftMessages{ii}=fi(rxSoftMessagesDouble,1,numSoftBits,0);终止

为Simulink仿真设置变量金宝app

Simu金宝applink模型需要带有控制信号的流样本。使用whdlFramesToSamples函数来转换帧rxSoftMessages流采样并生成匹配的控制信号。

从解穿和解码器块的延迟计算所需的模拟时间。

samplesizeIn=1;样本之间的IDLECYCLES=0;idlecyclesbetweenframes=0;如果strcmpi (opMode“截断”)%截断模式要求帧之间的间隔至少为constraintLength-1idlecyclesbetweenframes=约束长度-1;终止[sampleIn,ctrlIn]=whdlFramesToSamples(rxSoftMessages,...IdleCyclesBetween样本,IdleCyclesBetween框架,samplesizeIn);depunLatency=6;vitLatency=4*tracebackDepth+constraintLength+13;latency=vitLatency+depunLatency;simTime=size(Ctrin,1)+latency;sampletime=1;

运行Simuli金宝appnk模型

调用Simulin金宝appk模型以取消捕获并解码样本。该模型将解码样本导出到MATLAB工作区。使用工作区变量配置取消捕获和Viterbi解码器块参数。因为操作模式是列表参数,使用设置参数以指定工作空间值。

将流样本转换回框架数据进行比较。

设置参数([modelname“/HDL解码”],“开放式”,“开”);设置参数([modelname“/HDL解编解码/Viterbi解码器”],...“终止方法”,opMode);sim(型号名称);sampleOut=挤压(sampleOutTS.Data);ctrlOut=[挤压(ctrlOutTS.start.Data)...挤压(ctrlOutTS.end.Data)...挤压(ctrlOutTS.valid.Data)];rxMessages=whdlSamplesToFrames(采样输出,ctrlOut);
计算的最大帧大小为1944个样本。

验证结果

将输出样本与生成的输入样本进行比较。

fprintf(“\ n \ nDecoded样本”);对于ii=1:numFrames numBitsErr=sum(xor(txMessages{ii},rxMessages{ii}));fprintf('帧#%d: %d位不匹配\n',ii,numBitsErr);终止
解码样本帧1:0位不匹配帧2:0位不匹配帧3:0位不匹配帧4:0位不匹配帧5:0位不匹配

另见