主要内容

解密和解码流样本

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

通过编码随机数据、BPSK调制样本、应用信道模型、解调样本并创建接收到的软判决位,在MATLAB®中生成输入样本。然后,将软判决位导入Simulink®模型中,以分离和解码样本。将Simulink模拟结果导出回MATLAB并编译与原始输入样本进行对比。万博1manbetx

示例模型支持为HDL解码和解码子系统万博1manbetx生成HDL代码。

modelname =“ltehdlViterbiDecoderModel”;open_system (modelname);

设置码率参数

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

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

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

IEEE 802.11 WLAN为不同的码率和用途指定了不同的调制类型“终止”模式此示例对所有速率使用BPSK调制,并且可以使用“终止”“截断”操作模式。模块还支持万博1manbetx“连续的”模式,但本示例中不包括它。

constraintLength = 7;codeGenerator = [133 171];opMode =“终止”;回溯深度=10*constraintLength;网格=poly2trellis(constraintLength,...codeGenerator);%IEEE 802.11n-2009无线局域网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;如果(codeRate==2/3)puncVector=logical([1;1;1;0]);frameSize=1728;elseif([1;1; 0;0]); / / /frameSize = 1944;elseif(codeRate==5/6)puncVector=logical([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(代码生成器));numFrames=5;numSoftBits=4;txMessages=单元(1,numFrames);rxSoftMessages=单元(1,numFrames);No=10^((-EcNo)/10);quantStepSize=sqrt(无/2^numSoftBits);调制器=comm.BPSK调制器;信道=通信AWGN信道(“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仿真设置变量万博1manbetx

Simu万博1manbetxlink模型需要流式采样和伴随的控制信号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万博1manbetxnk模型

调用Simulin万博1manbetxk模型对样本进行解孔和解码。该模型将解码后的样本输出到MATLAB工作空间。destab和Viterbi Decoder块参数是使用工作区变量配置的。因为运行方式是一个列表参数,请使用设置参数以分配工作区值。

将流式采样转换回帧数据进行比较。

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已编码的样本\n”);ii=1:numFrames numBitsErr=sum(xor(txMessages{ii},rxMessages{ii}));fprintf('帧#%d:%d位不匹配\n'第二,numBitsErr);结束
解码样本帧#1:0位不匹配帧#2:0位不匹配帧#3:0位不匹配帧#4:0位不匹配帧#5:0位不匹配

另请参阅

阻碍