主要内容

屏蔽卷积编码

此示例演示如何使用卷积编码器和维特比解码器系统对象来模拟屏蔽编码系统。维特比解码器的复杂度随着码率的增加而迅速增加。屏蔽是一种允许使用标准速率1/2编码器和解码器对更高速率代码进行编码和解码的技术。

介绍

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

初始化

卷积编码刺穿

创建速率1/2,约束长度7公共卷积编码器系统对象。此编码器将单位符号作为输入,并生成2位符号作为输出。如果您假设3位消息单词作为输入,则编码器将生成6位码字输出。

Convencoder = Comm.convolulyAlencoder(Poly2trellis(7,[[171 133]));

指定穿刺模式以使用穿刺图案向量[1; 1; 0; 1; 1; 0]从上一级速率1/2码创建一个速率3/4代码。穿刺图案矢量中的那些表示位置1,2,4和5中的位,而零指示位置3和6中的位被从发送的信号被打孔或移除。打孔的效果是,对于每3位输入,穿刺码产生4位输出(与穿孔之前产生的6位相对)。这导致速率3/4代码。在手头的示例中,穿刺图案矢量的长度必须是6的整数倍数,因为3位输入通过速率1/2卷积编码器转换为6位输出。

要在卷积编码器系统对象中设置所需的穿刺模式,hConvEnc,设置穿刺源财产财产粉刺薄膜财产[1;1;0;1;1;0].

convEncoder.PuncturePatternSource='财产';convEncoder.PuncturePattern=[1;1;0;1;1;0];

调制器和通道

创建一个Comm.bpskmodulator.系统对象使用二进制相移键控调制在信道上传输编码数据。

bpskmod = comm.bpskmodulator;

创建一个通信信道系统对象。设置噪声法通道的属性信噪比(Eb/No)使用每比特能量与噪声功率谱密度比(Eb/No)指定噪声级。运行模拟时,通过更改eBno.信道对象的属性。BPSK调制器的输出生成单位功率信号;设置信号功率属性设置为1瓦。当前系统为符号速率;设置样本符号财产至1。

信道=通信AWGN信道(“噪音法”,‘信噪比(Eb/No)’,...“信号电源”1.“SamplesPerSymbol”,1);

带解钩的维特比译码

配置comm.viterbidecoder.系统对象,以便它解码为卷积编码器指定的屏蔽码。本例假设未量化输入到维特比解码器,因此设置InputFormat.财产缺点.

维特解码器=通信维特比特编码器(poly2trellis(7,[171 133]),...'InputFormat','缺乏尺寸');

通常,用于卷积编码器和维特比解码器的穿刺模式向量必须相同。要指定穿刺模式,请设置穿刺源Viterbi解码系统对象的属性,HVITDEC., 到财产. 设定粉刺薄膜属性设置为用于卷积编码器的相同穿刺模式向量。

因为未传输刺破的位,所以没有信息来指示它们的值。结果,解码过程忽略了它们。

vitdecoder.puncturepatternsource ='财产';vitdecoder.puncturepattern = convencoder.punctpattern;

对于没有穿孔的速率为1/2的代码,您通常将维特比解码器的回溯深度设置为接近40的值。解码穿孔代码需要更高的值,以便为解码器提供足够的数据来解决穿孔带来的歧义。此示例使用96的回溯深度。使用回溯深度Viterbi解码器对象的属性,HVITDEC..

vitdecoder.tracebackdepth = 96;

计算错误率

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

errorCalc=通信错误率('收纳'vitDecoder.TracebackDepth);

流处理循环

分析针对不同噪声水平的刺破编码系统的BER性能。

未编码和编码的EB / NO比值值

通常,您可以根据通道编码器的输入可用的每位的能量值为噪声功率谱密度比(EB / NO)来测量系统性能。为此的原因是该数量由系统工程师直接控制。分析2至5 dB之间的EB / NO值的编码系统的性能。

EbNoEncoderInput=2:0.5:5;%分贝

进入AWGN信道的信号是编码信号。转换Eb/No值,使其与编码器输出的能量比相对应。如果向编码器输入三位并获得四位输出,则能量关系由3/4速率给出,如下所示:

EbNoEncoderOutput=EbNoEncoderInput+10*log10(3/4);

模拟回路

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

帧长=3000;%此值必须是3的整数倍数targeterrors = 300;maxnumtransmissions = 5e6;

循环通过编码的EB / NO值(模拟需要几秒钟才能完成)。

BERVec=零(3,长度(EBNOENCODER输出));%分配内存以存储结果对于n=1:长度(EbNoEncoderOutput)复位(errorCalc)复位(convEncoder)复位(vitDecoder)通道。EbNo=EbNoEncoderOutput(n);%为模拟设置通道EbNo值尽管(BERVec(2,n)<目标者)&(BERVec(3,n)<最大传输量)%生成由FrameLength变量指定的大小的二进制帧数据=随机数([01],帧长,1);%卷积性编码数据ENCDATA = CONVENCODER(数据);%调制编码数据modData=bpskMod(encData);%通过AWGN信道传递调制信号信道输出=信道(modData);%通过频道复数输出的真实部分作为不调节的%输入到Viterbi解码器。decData=vitDecoder(实(信道输出));%计算并累积错误BERVec(:,n)=errorCalc(数据,decData);结尾结尾

比较结果到理论曲线

我们使用根据[1]的近似误差概率绑定的误码概率的近似来比较模拟结果。以下命令使用EB / NO值的求和的前七个术语计算近似值2:0.5:5.用于NERR的值是在[2]的表2中。

dist = 5:11;nerr = [42 2011492 10469 62935 379644 2253373];分数= 3/4;绑定= NERR *(1/6)* ERFC(SQRT(COMODE *(10.0。^((2:.02:5)/ 10))'* dist)';

打印结果。如果为模拟指定的目标错误数或最大传输数太小,则曲线拟合算法可能失败。

Berfit(EbnoencoderInput,Bervec(1,:));%曲线拟合仿真结果持有在…上符号学((2:02:5),界,'G');%理论结果传奇('经验BER',“适合模拟BER”,“误码率的理论界”)轴([1 6 10 ^ -5 1])

图中包含一个轴对象。标题为BER与Eb/No的轴对象(具有最佳曲线拟合)包含3个类型为line的对象。这些对象代表了经验误码率,适合于模拟误码率,是误码率的理论界。

在某些情况下,以较低的误码率,仿真结果似乎指示略高于绑定的错误率。这导致模拟方差(如果观察到少于500位错误)或来自解码器中的有限回溯深度。

总结

我们利用多个系统对象来模拟一个采用卷积编码和穿孔的通信系统。我们对该系统进行了仿真,以获得不同Eb/No比值下的误码率性能。将误码率结果与理论界进行了比较。

选定的书目

  1. Yasuda,Y.,K.Kashiki和Y.Hirata,“用于软判决Viterbi解码的高速屏蔽卷积码”,IEEE®通信交易,卷COM-321984年3月,第315-319页

  2. 开始,G.,HACCOUN,D.和PAQUIN,C.,“进一步取出了维特比和顺序解码的高速刺破卷积码,”通信的IEEE交易“,Vol。38,1990年11月11日,p。1923年