主要内容

解除穿刺和解码流样本

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

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

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

modelname =“ltehdlViterbiDecoderModel”;open_system (modelname);

设置码率参数

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

选择范围[3128]的回溯深度。对于未穿孔的样品,建议深度为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] 2592% 2/3 [1;1;1;0] 1728% 3/4 [1;1; 0;0;1] 1944% 5/6 [1;1; 0;0;1;1; 1;0; 1] 2160codeRate = 3/4;如果(codeRate == 2/3)穿孔矢量=逻辑([1;1;1;0]);frameSize = 1728;elseif(codeRate == 3/4)穿孔矢量=逻辑([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 =逻辑([1;1;1;1]);frameSize = 2592;结束如果strcmpi (opMode“终止”在帧结束时终止状态tailLen = constraintLength-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 (“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“截断”截断模式要求帧之间的间隔至少为constraintLength-1idlecyclesbetweenframes = constraintLength - 1;结束[sampleIn, ctrlIn] = whdlFramesToSamples (rxSoftMessages,...idlecyclesbetweensamples、idlecyclesbetweenframes samplesizeIn);depunLatency = 6;vitLatency = 4*tracebackDepth + constraintLength + 13;latency = vitLatency + depunLatency;simTime = size(ctrlIn,1) +延迟;sampletime = 1;

运行Simuli金宝appnk模型

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

将流示例转换回框架数据以进行比较。

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

另请参阅