主要内容

刺破的卷积编码

这个例子展示了如何使用卷积编码器和维特比解码器系统对象来模拟穿孔编码系统。维特比译码器的复杂度随着码率的增加而迅速增加。穿刺术是一种允许使用标准速率1/2编码器和解码器对更高速率码进行编码和解码的技术。

介绍

本示例演示了由随机二进制源、卷积编码器、BPSK调制器、加性高斯白噪声(AWGN)信道和维特比译码器组成的通信系统的仿真。该示例演示了如何运行仿真来获得误码率(BER)曲线,并将这些曲线与理论界限进行比较。

初始化

带有穿刺的卷积编码

创建速率1/2,约束长度7comm.conolulyalencoder.系统对象。该编码器采用1位符号作为输入,生成2位符号作为输出。如果您假定3位消息字作为输入,那么编码器将生成6位码字输出。

召集人= 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位输出。

要在卷积编码器System对象中设置所需的穿刺模式,HCONVENC.,设置PuncturePatternSource财产财产PuncturePattern财产[1; 1; 0; 1; 1; 0]

convencododer.puncturepatternsource =“属性”;convEncoder。PuncturePattern = [1; 1, 0, 1, 1, 0];

调制器和通道

创建一个comm.BPSKModulator系统对象在信道上使用二进制相移键控调制来发送编码数据。

bpskMod = comm.BPSKModulator;

创建一个comm.awgnchannel.系统对象。设定NoiseMethod属性信噪比(EB / NO)使用每个位的能量指定噪声水平噪声功率谱密度比(EB / NO)。运行仿真时,通过更改eB / No比率的不同值测试编码系统EbNo通道对象的属性。BPSK调制器的输出产生单元电源信号;设定SignalPower财产到1瓦特。手头的系统以符号率;设定samplespersymbol.属性为1。

频道= comm.AWGNChannel ('noisemethod''信噪比(EB / NO)'......“SignalPower”,1,'samplespersymbol'1);

维特比用Pupunctuch解码

配置A.comm.ViterbiDecoder系统对象,因此它会对为卷积编码器指定的打孔代码进行解码。此示例假定对Viterbi解码器的输入无关,因此设置了InputFormat财产Unquantized

vitdecoder = comm.viterbidoder(poly2trellis(7,[[171 133]),......“InputFormat”“Unquantized”);

一般来说,卷积编码器和维特比解码器使用的穿刺模式向量必须相同。要指定穿刺模式,设置PuncturePatternSource维特比解码器的属性hVitDec,财产.设定PuncturePattern属性到您用于卷积编码器的相同刺穿模式矢量。

因为被刺穿的比特没有被传输,所以没有信息来表示它们的值。因此,解码过程会忽略它们。

vitDecoder。PuncturePatternSource =“属性”;vitDecoder。PuncturePattern = convEncoder.PuncturePattern;

对于速率1/2代码而没有打孔,通常将Viterbi解码器的回溯深度设置为接近40的值。解码刻划代码需要更高的值,以便为解码器提供足够的数据来解决含糊的含量穿刺介绍。此示例使用96的回溯深度。使用该值使用该值tracebackdepth.维特比解码器对象的属性,hVitDec

vitDecoder。TracebackDepth = 96;

计算错误率

创建一个comm.ErrorRate计算器系统对象将解码位与原始发送位进行比较。误差率计算器对象的输出是包含计算的比特错误率(BER)的三元素向量,观察到的错误数以及处理的比特数。Viterbi解码器在等于回溯长度的输出解码比特流中创建延迟。要考虑此延迟设置收纳错误率计算器系统对象的属性为96。

errercalc = comm.errorrate(“ReceiveDelay”,vitdecoder.tracebackdepth);

流处理循环

分析了不同噪声水平下穿孔编码系统的误码率性能。

未编码和编码Eb/No比率值

通常,您根据信道编码器输入处可用的每位能量与噪声功率谱密度比(Eb/No)的值来衡量系统性能。原因是这个量是由系统工程师直接控制的。分析了2 ~ 5db的Eb/No编码系统的性能。

EBNOENCODERINPUT = 2:0.5:5;DB中的%

进入AWGN信道的信号是编码信号。转换Eb/No值,使它们与编码器输出的能量比相对应。如果输入3位编码器,得到4位输出,则能量关系按3/4速率给出如下:

EBNOENCODEROUTPUT = EBNOENCODERINPUT + 10 * log10(3/4);

仿真环路

为了获得BER性能结果,通过通信系统传输3000位的帧。对于每个EB / NO值,在达到特定数量的错误或传输时停止模拟。为了提高结果的准确性,增加目标误差的数量或最大传输次数。

frameLength = 3000;%该值必须是3的整数倍targetErrors = 300;maxNumTransmissions = 5 e6;

循环经过编码的Eb/No值(模拟将花费几秒钟完成)。

Bervec = Zeros(3,长度(eBnoencoderOutput));%分配内存来存储结果为了n=1:length(EbNoEncoderOutput) reset(errorCalc) reset(召集人编码器)reset(vitDecoder) channel。EbNo = EbNoEncoderOutput (n);%设置频道EBNO值进行仿真(Bervec(2,n)%生成由frameLength变量指定大小的二进制帧数据= randi([0 1], frameLength, 1);对数据进行卷积编码encData = convEncoder(数据);%调制编码数据moddata = bpskmod(EncData);%通过AWGN通道通过调制信号channelOutput =通道(modData);%通过通道复输出的实部作为未量化输入到维特比解码器。decdata = vitdecoder(真实的(channelOutput));%计算和累积错误Bervec(:,n)= errercalc(数据,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:));%曲线拟合仿真结果抓住;半机((2:.02:5),绑定,‘g’);%理论结果传奇(“经验系统”“适合模拟误码率”“误码率的理论界限”轴([1 6 10^-5 1])

图包含轴。具有最佳曲线拟合的标题BER与EB / NO的轴包含3个类型的线。这些物体代表经验BER,适合模拟BER,BER的理论束缚。

在某些情况下,在较低的误码率下,模拟结果似乎表明误码率略高于界限。这是由模拟方差(如果观察到小于500位错误)或译码器中有限的回溯深度造成的。

总结

我们利用了几个系统对象来模拟具有卷积编码和打孔的通信系统。我们模拟系统获得BER性能与不同的EB / NO比率值。将BER结果与理论界进行比较。

选定的参考书目

  1. Yasuda,Y.,K. Kashiki和Y.Hirata,“软决策卷积卷积规范”viterbi解码的高利率被卷积的卷积码,“通信中的交易,Vol。COM-32,1984年3月,PP。315-319

  2. Begin, G., Haccoun, D., and Paquin, C.,“用于维特比和顺序解码的高速率穿透卷积码的进一步结果”,《IEEE通信汇刊》,第38卷,第11期,1990年11月,p. 1923