主要内容

解密和解码流样本

这个例子展示了如何使用硬件友好的depuncter块和Viterbi Decoder块解码以WLAN码率编码的样本。

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

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

modelname =“ltehdlViterbiDecoderModel”;open_system (modelname);

设置码率参数

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

选择范围[3128]的回溯深度。对于未穿刺的样品,推荐深度为5倍constraintLength.对于被刺穿的样品,建议深度是constraintLength

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

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

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

生成解码样本

使用Communications Toolbox™函数和System对象生成编码样本并应用信道噪声。对接收到的样本进行解调,并为每个样本创建软判决值。

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 (“EbNo”, EcNo);解调器= comm.BPSKDemodulator (“DecisionMethod”的“对数似然比);ii = 1:numFrames txMessages{ii} = [randn(frameSize - tailLen,1) zeros(tailLen,1)]>0;卷积编码和穿刺txCodeword = convenc (txMessages{2},格子,puncVector);%调制modOut = modulator.step (txCodeword);%的通道chanOut = channel.step (modOut);%解调demodOut = -demodulator.step (chanOut) / 4;%转换为软决策值rxSoftMessagesDouble = demodOut. / quantStepSize;rxSoftMessages {2} = fi (rxSoftMessagesDouble 1 numSoftBits 0);结束

为Simulink仿真设置变量金宝app

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

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

samplesizeIn = 1;idlecyclesbetweensamples = 0;idlecyclesbetweenframes = 0;如果strcmpi (opMode“截断”% Truncated模式要求帧之间至少有一个constraintLength-1的间隙idlecyclesbetweenframes = constraintLength - 1;结束[sampleIn, ctrlIn] = whdlFramesToSamples (rxSoftMessages,...idlecyclesbetweensamples、idlecyclesbetweenframes samplesizeIn);depunLatency = 6;vitLatency = 4*tracebackDepth + constraintLength + 13;latency = vitLatency + depunLatency;simTime = size(ctrlIn,1) + latency;sampletime = 1;

运行Simuli金宝appnk模型

调用Simulin金宝appk模型对样本进行解孔和解码。该模型将解码后的样本输出到MATLAB工作空间。destab和Viterbi Decoder块参数是使用工作区变量配置的。因为操作模式是列表参数,使用set_param以分配工作区值。

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

set_param ([modelname“/HDL解码”],“开放”“上”);set_param ([modelname/HDL解码/Viterbi解码器],...“TerminationMethod”, opMode);sim (modelname);sampleOut =挤压(sampleOutTS.Data);ctrlOut =[挤压(ctrlOutTS.start.Data)...挤压(ctrlOutTS.end.Data)...挤压(ctrlOutTS.valid.Data)];rxMessages = whdlSamplesToFrames (sampleOut ctrlOut);
最大帧尺寸计算为1944个样本。

验证结果

将输出示例与生成的输入示例进行比较。

流(“\ n \ nDecoded样本”);ii = 1:numFrames numBitsErr = sum(xor(txMessages{ii},rxMessages{ii}));流('帧#%d: %d位不匹配\n'第二,numBitsErr);结束
解码样本帧1:0位不匹配帧2:0位不匹配帧3:0位不匹配帧4:0位不匹配帧5:0位不匹配

另请参阅