主要内容

解密和解码流样本

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

通过编码随机数据,BPSK调制样本,应用渠道模型,解调样本并创建接收的软判决比特,在MATLAB®中生成输入样本。然后,将软判决位导入Simulink®模型以进行实例和解码样品。金宝app将Simulink仿真的结果导出回MATLAB,并金宝app将其与原始输入样本进行比较。

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

modelname =“ltehdlViterbiDecoderModel”;open_system (modelname);

设置码率参数

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

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

从1/2的代码率开始,IEEE 802.11 WLAN指定三个打孔模式,以生成三个额外的代码率。选择其中一个代码率,然后根据该速率设置帧大小和打孔模式。您还可以选择未拔除的1/2码。

IEEE 802.11 WLAN指定不同代码率和使用的不同调制类型“终止”模式。此示例使用BPSK调制所有费率,并可运行“终止”或者“截断”操作模式。块也支持金宝app'连续'模式,但不包括在此示例中。

constraintLength = 7;codeGenerator = [133 171];opMode =“终止”;tracebackdepth = 10 * constraintLength;trellis = 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; 1; 0; 0; 1] 1944% 5/6 [1;1;1;0codeRate = 3/4;如果(Codeate == 2/3)puncvector =逻辑([1; 1; 1; 0]);框架= 1728;elseif([1;1; 0;0]); / / /frameSize = 1944;elseif(Codeate == 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 =约束长度-1;其他的%截断模式tailLen = 0;结束

生成解码样本

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

EBNO = 10;ECNO = EBNO  -  10 * log10(Numel(Codegenerator));numframes = 5;numsoftbits = 4;txmessages = cell(1,numframes);rxsoftmessages = cell(1,numframes);no = 10 ^(( -  ECNO)/ 10);quantstepsize = sqrt(no / 2 ^ numsoftbits);调制器= Comm.bpskmodulator;channel = comm.awgnchannel(“EbNo”, EcNo);解调器= comm.BPSKDemodulator (“决策方法”的“对数似然比);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模型需要具有伴随控制信号的流式样本。使用Whdlflamestosamples.函数转换框架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 punizut和decode'],“开放”“上”);set_param ([modelname'/ HDL Pupluture和Decode / Viterbi Decoder'],...“TerminationMethod”, opMode);sim (modelname);sampleOut =挤压(sampleOutTS.Data);ctrlOut =[挤压(ctrlOutTS.start.Data)...挤压(ctrlOutTS.end.Data)...挤压(ctrlOutTS.valid.Data)];rxMessages = whdlSamplesToFrames (sampleOut ctrlOut);
最大帧尺寸计算为1944个样本。

验证结果

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

流('\ ndecoded样本\ n');II = 1:numframes numbitserr = sum(xor(txmessages {ii},rxmessages {ii}));流('框架#%d:%d比特不匹配\ n'第二,numBitsErr);结束
解码样本帧#1:0位不匹配帧#2:0位不匹配帧#3:0位错配框架#4:0位不匹配帧#5:0位不匹配

另请参阅