《2022年2022年卷积码的维特比译码原理及仿真 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年卷积码的维特比译码原理及仿真 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、卷积码的维特比译码原理及仿真摘要本课程设计主要解决对一个卷积码序列进行维特比(Viterbi) 译码输出 ,并通过 Matlab 软件进行设计与仿真,并进行误码率分析。实验原理QPSK :QPSK 是英文 QuadraturePhaseShiftKeying的缩略语简称,意为正交相移键控,是一种数字调制方式。四相相移键控信号简称“ QPSK ” 。它分为绝对相移和相对相移两种。卷积码 :又称连环码,是由伊莱亚斯(P.elias) 于 1955 年提出来的一种非分组码。积码将 k 个信息比特编成n个比特, 但 k 和 n 通常很小, 特别适合以串行形式进行传输,时延小。卷积码是在一个滑动的数据比
2、特序列上进行模2 和操作,从而生成一个比特码流。 卷积码和分组码的根本区别在于,它不是把信息序列分组后再进行单独编码,而是由连续输入的信息序列得到连续输出的已编码序列。卷积码具有误码纠错的能力, 首先被引入卫星和太空的通信中。NASA 标准(2,1,6)卷积码生成多项式为:346134562()1()1gDDDDDgDDDDD其卷积编码器为:输入序列+输出c1输出c2图 1.1 K=7,码率为 1/2 的卷积码编码器名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页
3、- - - - - - - - - 维特比译码 :采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。如果接收到L 组信息比特,每个符号包括 v 个比特。接收到的 Lv 比特序列与 2L条路径进行比较,汉明距离最近的那一条路径被选择为最有可能被传输的路劲。当L 较大时,使得译码器难以实现。 维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。它并不是在网格图上一次比较所有可能的2kL条路径 (序列),而是接收一段, 计算和比较一段, 选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。下面以图 2.1 的(
4、2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。为了能说明解码过程,这里给出该码的状态图,如图2.2 所示。维特比译码需要利用图来说明移码过程。根据卷积码画网格的方法, 我们可以画出该码的网格图,如图2.3 所示。该图设接收到的序列长度为8,所以画 8个时间单位,图中分别标以0 至 7。这里设编码器从 a状态开始运作。该网格图的每一条路径都对应着不同的输入信息序列。由于所有可能输入信息序列共有2kL个,因而网格图中所有可能的路径也为2L条。这里节点 a=00,b=10,c=01,d=11。mjmj-1mj-2输出序列m1,m2,mj,y1jy2j输入序列00 a d
5、10c b 11 00 11 01 01 10 图 2.1 (2,1,3)卷积码编码器图 2.2 (2,1,3)卷积码状态图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 设输入编码器的信息序列为(11011000) ,则由编码器对应输出的序列为Y=(1101010001011100) 。若收到的序列 R=(0101011001011100), 对照网格图来说明维特比译码的方法。首先选择接收序列的前6 位序列 R1=(01010
6、1)同到达第 3 时刻的可能的 8 个码序列 (即 8 条路径 )进行比较,并计算出码距。该例中到达第3 时刻 a 点的路径序列是 (000000)和(111011),他们与 R1的距离分别为 3 和 4;到达第 3 时刻 b 点的路径序列是 (000011)和(111000),他们与 R1的距离分别为 3 和 4;到达第 3 时刻 c 点的路径序列是 (001110)和(110101),他们与 R1的距离分别为 4 和 1;到达第 3 时刻 d 点的路径序列是 (001101)和(110110), 他们与 R1的距离分别为 2 和 3。上述每个节点都保留码距较小的路径作为幸存路径,所以幸存路
7、径码序列是(000000)、(000011)、(1101001)和(001101),如图 2.4 所示。用于上面类似的方法可以得到第 4、5、6、7 时刻的幸存路径。a b c d 节点号0 1 2 3 4 5 6 7 00 00 00 00 00 00 00 11 11 11 11 11 11 11 11 00 00 01 01 01 01 01 01 01 01 01 01 01 11 11 10 10 10 10 图 2.3 (2,1,3)卷积码网格图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
8、 - - - - 第 3 页,共 8 页 - - - - - - - - - 需要指出的是, 对于某个节点, 如果比较两条路径与接收序列的累计码距值相等时, 则可以任意选者一条路径作为幸存路径,此时不会影响最终的译码结果。在码的终了时刻 a状态,得到一条幸存路径。如果2.5 所示。由此可看到译码器输出是 R =(1101010001011100) ,即可变换成序列 (11011000),恢复了发端原始信息。比较 R 和 R 序列,可以看到在译码过程中已纠正了在码序列第1 和第 7 位上的差错。 当然如果差错出现太频繁, 以致超出卷积码的纠错能力,还是会发生纠误的。a b c d 节点号0 1
9、2 3 00 00 00 11 11 11 01 01 01 a b c d 节点号0 1 2 3 11 01 01 4 5 6 7 8 00 01 01 11 00 图 2.4维特比译码第 3 时刻幸存路径图 2.5第 8 时刻幸存路径名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 仿真分析本实验用 matlab 仿真一个简单的 OFDM 系统中,观察在不同信噪比下的卷积码和 Viterbi 算法软判决译码的性能,并与没有编码
10、的接收信号的误码率进行比较。主要调用函数的介绍:1. trellis = poly2trellis(7,155 117); 产生约束长度为 7,一输入两输出的卷积码,比特连接向量分别为:1101101,1001111; 2. code = convenc(Signal,trellis); 将原始信号进行卷积编码,编码器由上式产生; 3. REdata=awgn(TrData,SNR(i),measured); 加性高斯白噪声信道 ; 4. d m p in =vitdec(ReSig,trellis,tblen,cont,soft,1); 利用 Viterbi 算法译卷积码。 ReSig为 p
11、oly2trellis 函数或 istrellis 函数定义的格形 trellis 结构的卷积码。 参数 tblen 取正整数,表示记忆 (traceback)深度。参数cont代表解码操作模型,假设编码器在全零状态开始。soft表示软判决,参数nsdec做信道量化。仿真结果:下图显示的是在不同信噪比下, 通过卷积编码和维特比译码与未编码的接收端误码率的对比。在低信噪比时(小于等于7dB 时) ,未编码的误码率要低于编码的误码率。 这是因为在低信噪比的情况下, 卷积码的纠错能力范围超过纠错门限后,纠错码就不是纠错了,而是加错了。当信噪比比较高时,编码的误码率要好于未编码的误码率。名师资料总结
12、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 图 2 卷积编码和原始信号在不同信噪比下的接收端的误码率名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 程序代码 :SNR=1:0.5:15; %信噪比取值;单位为db Ns=10; datalength=256; %每个数据符号
13、中可用子载波error_bit_rata_code=0; %经卷积编码后解调出的数据的误比特率error_bit_rata_nocode=0; % 未经卷积编码后解调出的数据的误比特率for i=1:1:29 Signal=double(rand(1,datalength*Ns)0.5); trel = poly2trellis(7,155 117); code = convenc(Signal,trel); %进行串并转化Para=reshape(code,datalength,2*Ns); %进行 QPSK 数据调制,将数据分为两个通道,SigPara 为 datalength 行 2Ns
14、 列for j=1:Ns s1(:,j)=Para(:,2*j-1);%ich为 datalength 行 Ns 列s2(:,j)=Para(:,2*j); end kmod=1./sqrt(2); s1=s1.*kmod; s2=s2.*kmod; x=s1+s2.*sqrt(-1); % 产生复信号y=ifft(x); %通过傅立叶反变换,将频域数据转换为时域数据ich2=real(y); %I 信道取变换后的实部qch2=imag(y); %Q 信道取变换后的虚部ich4=reshape(ich2,1,datalength*Ns); qch4=reshape(qch2,1,datalen
15、gth*Ns); TrData=ich4+qch4.*sqrt(-1); % 加入高斯白噪声ReData=awgn(TrData,SNR(i),measured); idata=real(ReData); qdata=imag(ReData); %进行串并转化idata1=reshape(idata,datalength,Ns); qdata1=reshape(qdata,datalength,Ns); Rex=idata1+qdata1.*sqrt(-1); ry=fft(Rex); ReIChan=real(ry); ReQChan=imag(ry); ReIChan=ReIChan/km
16、od; ReQChan=ReQChan/kmod; for j=1:Ns RePara(:,2*j-1)=ReIChan(:,j); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - RePara(:,2*j)=ReQChan(:,j); end ReSig=reshape(RePara,1,datalength*Ns*2); %符号抽样判决ReSig=double(ReSig0.5); %维特比译码tblen= log2(tre
17、l.numInputSymbols) d m p in =vitdec(ReSig,trel,tblen,cont,soft,1); %统计错误比特数,并计算误比特率error_bit_code=sum(abs(d(2:datalength*Ns)-Signal(1:datalength*Ns-1) ; error_bit_nocode(i)=sum(abs(ReSig-code); error_bit_rata_code1=error_bit_code/length(Signal); error_bit_rata_code(i)=error_bit_rata_code1; error_bit_rata_nocode(i)=error_bit_nocode(i)/2/length(Signal); end figure(1); plot(SNR,error_bit_rata_nocode,-ro,SNR,error_bit_rata_code,-.b); h=legend(没有卷积 ,卷积 ,1); grid on; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -
限制150内