刺穿了卷积编码的
这个例子展示了如何使用卷积编码器和维特比译码器系统对象来模拟穿孔编码系统。维特比译码器的复杂度随着译码率的增加而迅速增加。穿孔是一种使用标准速率1/2编码器和解码器对更高速率代码进行编码和解码的技术。
简介
本例演示了一个由随机二进制源、卷积编码器、BPSK调制器、加性高斯白噪声(AWGN)通道和维特比解码器组成的通信系统的仿真。该示例演示了如何运行模拟以获得比特误码率(BER)曲线,并将这些曲线与理论边界进行比较。
初始化
带穿孔的卷积编码
创建comm.ConvolutionalEncoder
系统对象™,码率1/2,约束长度7。该编码器采用一比特符号作为输入,生成两比特符号作为输出。如果假设3位消息字作为输入,那么编码器将生成6位码字输出。
convcoder = comm.ConvolutionalEncoder(poly2trellis(7, [171 133]));
指定一个穿刺模式,使用穿刺模式向量[1;1;0;1;1;0]从之前的1/2率代码创建一个3/4率代码。穿刺模式向量中的1表示位置1、2、4和5的位被传输,而0表示位置3和6的位被穿透或从传输信号中删除。穿孔的效果是,现在,对于每3位的输入,穿孔的代码产生4位的输出(相对于穿孔之前产生的6位)。这将导致速率为3/4的代码。在本例中,穿刺模式向量的长度必须是6的整数倍,因为3位输入由1/2卷积编码器转换为6位输出。
要在卷积编码器系统对象中设置所需的穿刺模式,hConvEnc
,设置PuncturePatternSource
财产财产
和PuncturePattern
财产[1; 1, 0, 1, 1, 0]
.
convEncoder。PuncturePatternSource =“属性”;convEncoder。PuncturePattern = [1; 1, 0, 1, 1, 0];
调制器和通道
初始化调制顺序变量,米
,到2,以使用二进制相移键控调制在信道上传输所编码的数据。
M = 2;
创建一个comm.AWGNChannel
系统对象。设置NoiseMethod
的通道属性信噪比(Eb/No)
以每比特能量与噪声功率谱密度比(Eb/No)指定噪声级别。在运行模拟时,通过改变Eb/No比值的值来测试编码系统的不同值EbNo
属性。BPSK调制器的输出产生单位功率信号;设置SignalPower
1瓦特。手边的系统处于符号速率;设置SamplesPerSymbol
属性为1。
频道= comm.AWGNChannel (...NoiseMethod =信噪比(Eb/No),...SignalPower = 1,...SamplesPerSymbol = 1);
维特比解码与去刺
配置一个comm.ViterbiDecoder
对象,因此它解码为卷积编码器指定的穿孔代码。此示例假设对Viterbi解码器的输入是未量化的,因此设置InputFormat
财产Unquantized
.
vitDecoder = comm.ViterbiDecoder (...poly2trellis(7, 133年[171]),...InputFormat =“Unquantized”);
一般来说,用于卷积编码器和维特比解码器的穿刺模式向量必须相同。要指定穿刺模式,请设置PuncturePatternSource
财产财产
.设置PuncturePattern
属性设置为用于卷积编码器的相同穿刺模式向量。
由于穿孔位不被传输,因此没有信息来指示它们的值。结果,解码过程忽略了它们。
vitDecoder。PuncturePatternSource =“属性”;vitDecoder。PuncturePattern = convEncoder.PuncturePattern;
对于速率为1/2且没有穿孔的代码,通常将Viterbi解码器的回溯深度设置为接近40的值。解码穿孔码需要一个更高的值,以便给解码器提供足够的数据来解决穿孔引起的歧义。本例使用了96的回溯深度。方法设置此值TraceBackDepth
财产。
vitDecoder。TracebackDepth = 96;
计算错误率
创建一个comm.ErrorRate
比较已解码位与原始传输位的系统对象。错误率计算器对象的输出是一个三元素向量,包含计算的误码率(BER)、观察到的错误数量和处理的比特数量。维特比译码器在输出译码位流中创建一个等于回溯长度的延迟。考虑到这种延迟设置ReceiveDelay
属性将错误率计算器系统对象设置为96。
errorCalc = comm.ErrorRate (...ReceiveDelay = vitDecoder.TracebackDepth);
流处理循环
分析了不同噪声水平下穿孔编码系统的误码率性能。
未编码和已编码Eb/No比值值
通常,根据在通道编码器输入端可用的每比特能量与噪声功率谱密度比(Eb/No)的值来测量系统性能。这样做的原因是这个数量直接由系统工程师控制。分析Eb/No值在2到5 dB之间的编码系统的性能。
EbNoEncoderInput = 2:0.5:5;在dB %
进入AWGN信道的信号是经过编码的信号。转换Eb/No值,使其与编码器输出的能量比相对应。如果你向编码器输入3位,得到4位输出,那么能量关系由3/4速率给出如下:
EbNoEncoderOutput = EbNoEncoderInput + 10*log10(3/4);
模拟循环
为了获得误码率的性能结果,通过通信系统传输3000位帧。对于每个Eb/No值,在达到特定数量的错误或传输时停止模拟。为了提高结果的准确性,增加目标误差数或最大传输数。
frameLength = 3000;%此值必须是3的整数倍targetErrors = 300;maxNumTx = 5 e6;
分配内存来存储结果,然后遍历已编码的Eb/No值。模拟需要几秒钟时间才能完成。
BERVec = 0(3、长度(EbNoEncoderOutput));为n=1:length(EbNoEncoderOutput) reset(errorCalc) reset(召集人)reset(vitDecoder)通道。EbNo = EbNoEncoderOutput (n);而(BERVec(2,n) < targetErrors) && (BERVec(3,n) < maxNumTx) data = randi([0 1],frameLength,1);%生成二进制帧对数据进行卷积编码encData = convEncoder(数据);调制编码的数据modData = pskmod (encData 2);将调制信号通过AWGN通道channelOutput =通道(modData);%传递信道的实部%复输出为未量化的%输入维特比解码器。decData = vitDecoder(真正的(channelOutput));计算和累积错误BERVec (:, n) = errorCalc(数据,decData);结束结束
将结果与理论曲线进行比较
我们比较模拟结果使用近似的比特误码率为一个穿孔码为每个[1]。中的Eb/No值的和的前七项,下面的命令计算这个边界的近似值2:0.5:5
.用于nerr的值见[2]的表2。
dist = 11;Nerr = [42 201 1492 10469 62935 379644 2253373];codeRate = 3/4;绑定=...nerr *(1/6) *误差补函数(√codeRate *(10.0。^ ((2:.02:5)/ 10))* dist))的;
阴谋的结果。如果为模拟指定的目标错误数或最大传输数太小,曲线拟合算法可能会失败。
berfit (EbNoEncoderInput BERVec (1:));%曲线拟结果持有在;semilogy((2: .02:5)绑定,‘g’);%的理论结果传奇(...“经验系统”,...“适合模拟误码率”,...“误码率的理论界限”轴([1 6 10^-5 1])
在某些情况下,在较低的误码率下,模拟结果似乎表明误码率略高于界限。这是由模拟方差(如果观察到的错误少于500位)或解码器中有限的回溯深度造成的。
总结
我们利用几个System对象来模拟一个具有卷积编码和穿孔的通信系统。我们对系统进行了模拟,以获得不同Eb/No比值值下的误码率性能。将误码率结果与理论边界进行了比较。
选定的参考书目
Yasuda, Y., K. Kashiki和Y. Hirata,“用于软决策Viterbi解码的高速率穿孔卷积码”,IEEE®通信汇刊,COM-32卷,1984年3月,页315-319
Begin, G., Haccoun, D.和Paquin, C.,“Viterbi和顺序解码的高速率穿孔卷积码的进一步结果”,《IEEE通信汇刊》,第38卷,第11期,1990年11月,第1923页