主要内容

解除和解码流样本

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

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

示例模型支持HDL de穿刺和Dec金宝appode子系统的HDL代码生成。

modelname =“ltehdlViterbiDecoderModel”;open_system (modelname);

设置码率参数

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

选择范围[3,128]中的回溯深度。对于未穿孔的样品,建议深度为5倍constraintLength.对于穿孔样品,建议深度为10倍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, [133 171])最大帧尺寸% 1/2 [1;1;1;1] 2592% 2/3 [1;1;1;0] 1728% 3/4 [1;1;1;0;0;1] 1944% 5/6 [1;1;1;0;0;1;1;0; 1] 2160codeRate = 3/4;如果(codeRate == 2/3) pointvector = logical([1;1;1;0]);frameSize = 1728;elseif(codeRate == 3/4) puncVector = logical([1;1;1;0;0;1]);frameSize = 1944;elseif(codeRate = = 5/6) puncVector =逻辑([1,1,1,0,0,1,1,0,0,1]);frameSize = 2160;其他的% codeRate == 1/2puncVector = logical([1;1;1]);frameSize = 2592;结束如果strcmpi (opMode“终止”在帧结束时终止状态tailLen = constraintLength-1;其他的%截断模式tailLen = 0;结束

生成解码样本

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

EbNo = 10;EcNo = EbNo - 10*log10(数字(代码生成器));numFrames = 5;numSoftBits = 4;txMessages = cell(1,numFrames);rxSoftMessages = cell(1,numFrames);No = 10^((-EcNo)/10);quantStepSize = sqrt(No/2^numSoftBits);调制器= com . bpskmodulator;通道= com . awgnchannel (“EbNo”, EcNo);解调器(“DecisionMethod”的“对数似然比);ii = 1:numFrames txMessages{ii} = [randn(frameSize - tailLen,1) zeros(tailLen,1)]>0;%卷积编码和穿刺txCodeword = convc (txMessages{ii},trellis,puncVector);%调制modOut = modulator.step(txCodeword);%的通道chanOut = channel.step(modOut);%解调demodOut = -解调器。step(chanOut)/4;转换为软决策值rxSoftMessagesDouble = demodOut./quantStepSize;rxSoftMessages{ii} = fi(rxSoftMessagesDouble,1,numSoftBits,0);结束

为Simulink仿真设置变量金宝app

Simu金宝applink模型需要带控制信号的流样本。使用whdlFramesToSamples函数转换框架rxSoftMessages对样本进行流式处理,生成匹配的控制信号。

根据解除穿刺和解码器块的延迟计算所需的模拟时间。

samplesizeIn = 1;Idlecyclesbetweensamples = 0;Idlecyclesbetweenframes = 0;如果strcmpi (opMode“截断”截断模式要求帧之间的间隔至少为constraintLength-1idlecyclesbetweenframes = constraintLength - 1;结束[sampleIn,ctrlIn] = whdlFramesToSamples(rxSoftMessages,...idlecyclesbetweensamples、idlecyclesbetweenframes samplesizeIn);depunLatency = 6;vitLatency = 4*tracebackDepth + constraintLength + 13;延迟= vitLatency + depunLatency;simTime = size(ctrlIn,1) +延迟;Sampletime = 1;

运行Simuli金宝appnk模型

调用Simulin金宝appk模型来解除和解码样本。该模型将解码后的样本导出到MATLAB工作区。depierce和Viterbi Decoder块参数使用工作区变量配置。因为操作模式是列表参数,使用set_param要分配工作空间值。

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

set_param ([modelname'/HDL de穿刺和解码'),“开放”“上”);set_param ([modelname'/HDL de穿刺和解码/维特比解码器'),...“TerminationMethod”, opMode);sim (modelname);sampleOut = squeeze(sampleOut . 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位失配

另请参阅