主要内容

卷积编码和穿刺流样品

这个例子展示了如何使用hardware-friendly卷积编码器和穿刺在WLAN编码样本代码块率。

  1. 生成随机输入样本与帧控制信号通过whdlFramesToSamples在MATLAB®。

  2. 这些样本导入一个仿真软件®模型和运行模型编码和穿刺样本。金宝app

  3. 出口回到MATLAB仿真软件模拟的结果。金宝app

  4. 生成参考样品使用convencMATLAB函数启用了刺穿。

  5. 比较模型结果与参考样本。金宝app

示例模型支持HDL代码生成的金宝appEncodeAndPuncture子系统,包含卷积编码器和穿刺块。

modelname =“GenConvEncPuncturerModel”;open_system (modelname);

设置工作空间变量描述编码速率。卷积编码器块支持约束长度范围内(3、9)和多项式长度范围内(2、金宝app7)。

从代码的1/2,IEEE 802.11 WLAN指定三个刺穿模式生成三个额外的代码。选择其中一个代码,然后设置帧大小和穿孔模式基于编码速率。你也可以选择不代码的1/2。

IEEE 802.11 WLAN指定不同的码率和使用“终止”模式。块也支持金宝app“连续”模式和“截断”模式,但是他们并不包含在这个例子。

constraintLength = 7;codeGenerator = (133 - 171);格子= poly2trellis (constraintLength,codeGenerator);% IEEE 802.11 n - 2009 WLAN 1/2 (7, 171 [133])%的速度穿刺模式最大帧大小% 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,0,1]2160codeRate = 3/4;如果(codeRate = = 2/3) puncVector =逻辑([1;1;1。0]);frameSize = 1728;elseif(codeRate = = 3/4) puncVector =逻辑([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 =逻辑([1;1;1;1]);frameSize = 2592;结束

生成的输入样本帧编码和刺穿用通信工具箱™系统对象生成编码样本。

numFrames = 5;txMessages =细胞(1、numFrames);txCodeword =细胞(1、numFrames);2 = 1:numFrames txMessages{2} =逻辑(randn (frameSize-constraintLength + 1, - 1));结束

设置仿真软件仿真的变量。金宝app仿真软件金宝app模型需要与相应控制信号流样品。计算所需的仿真时间延迟的卷积编码器和穿刺块。

samplesizeIn = 1;idlecyclesbetweensamples = 0;idlecyclesbetweenframes = constraintLength-1;[sampleIn, ctrlIn] = whdlFramesToSamples (txMessages,idlecyclesbetweensamples、idlecyclesbetweenframes samplesizeIn);startIn = ctrlIn (: 1);endIn = ctrlIn (:, 2);validIn = ctrlIn (: 3);simTime =大小(ctrlIn 1) + 6;sampletime = 1;

运行仿真软件模型金宝app。

set_param ([modelname' / EncodeAndPuncture '),“开放”,“上”);sim (modelname);

流模型块样本的输出转换为框架的数据比较。金宝app

sampleOut =挤压(sampleOut);startOut = ctrlOut (: 1);endOut = ctrlOut (:, 2);validOut = ctrlOut (: 3);idxStart =找到(startOut。* validOut);idxEnd =找到(endOut。* validOut);

生成参考样品使用convencMATLAB函数。

2 = 1:numFrames txCodeword {2} = convenc ([txMessages{2};假(constraintLength-1 1)]。格子,puncVector);结束

比较输出样本对生成的输入样本。

流(“\ n \ nEncoded样本”);2 = 1:numFrames idx = idxStart (ii): idxEnd (ii);idxValid = (validOut (idx));dataOut = sampleOut (:, idx);hdlTxCoded = dataOut (:, idxValid);numBitsErr =总和(xor (txCodeword {2}, hdlTxCoded (:)));流(样品的数量不匹配的帧# % d: % d位\ n '第二,numBitsErr);结束
帧编码样本的样本数量不匹配的# 1:0位样本数量不匹配的帧# 2:0位样本数量不匹配的帧# 3:0位样本数量不匹配的帧# 4:0位样本数量不匹配的帧# 5:0位

另请参阅