卷积码实验报告.docx
《卷积码实验报告.docx》由会员分享,可在线阅读,更多相关《卷积码实验报告.docx(8页珍藏版)》请在冰点文库上搜索。
卷积码实验报告
卷积码实验报告
篇一:
卷积码实验报告
实验五信道编解码()
本章目标
掌握数字频带传输系统调制解调的仿真过程掌握数字频带传输系统误码率仿真分析方法5.1实验目的
1.使用MATLAB进行卷积码编/译码器的仿真。
2.熟练掌握MATLAB软件、语句。
3.了解卷积码编/译码器的原理、知识。
5.2实验要求
1.编写源程序、准备测试数据。
2.在MATLAB环境下完成程序的编辑、编译、运行,获得程序结果。
如果结果有误,
应找出原因,并设法更正之。
5.3实验原理
(一)卷积码编码器1.连接表示
卷积码由3个整数n,k,N描述。
k/n也表示编码效率(每编码比特所含的信
N称为约束长度,息量);但n与线性分组码中的含义不同,不再表示分组或码子长度;
表示在编码移位寄存器中k元组的级数。
卷积码不同于分组码的一个重要特征就是编码器的记忆性,即卷积码编码过程中产生的n元组,不仅是当前输入k元组的函数,而且还是前面N?
1个输入k元组的函数。
实际情况下,n和k经常取较小的值,而通过N的变化来控制编码的能力和复杂性。
下面以图1中的卷积码编码器为例介绍卷积码编码器。
该图表示一个约束长度
K?
3的(2,1)卷积译码器,模2加法器的数目为n?
2,因此,编码效率k/n?
1/2。
在每个输入比特时间上,1位信息比特移入寄存器最左端的一级,同时将寄存器中原有比特均右移一级,接着便交替采样两个模2加法器,得到的码元就是与该输入比特相对应的分支字。
对每一个输入信号比特都重复上述采样过程。
图1卷积码编码器(编码效率1/2,K?
3)
用于描述反馈移位寄存器实现循环码时所使用的生成多项式也可用户描述卷积码编码器的连接。
应用n个生成多项式描述编码的移位寄存器与模2加法器的连接方式,
n个生成多项式分别对应n个模2加法器,每个生成多项式不超过K?
1阶。
仍以图
1中的编码器为例,用生成多项式g1(X)代表上方连接,g2(X)代表下方连接,则有:
g1(X)?
1?
X?
X2g2(X)?
1?
X
2
多项式中的最低阶项对应于寄存器的输入级。
输出序列根据如下方式求得:
U(X)?
m(X)g1(X)与m(X)g2(X)交织
其中m表示输入的信息矢量。
2.状态图
卷积编码器属于有限状态机的器件。
“有限”表明状态机制只有有限个不同的状态。
有限状态机的状态可以用设备的当前输入和最少的信息量,来预测设备的输出。
状态提供了有关过去序列过程及一组将来可能输出序列的限制,下一状态总是受到前一状态的限制。
将编码器在时刻ti的状态定义为Xi?
mi?
1,mi?
2,...,mi?
K?
1。
01
图2状态转移图
如图2所示,方框内的状态表示寄存器最右端N?
1级的内容,状态间的路径表示由此状态转移时的输出分支字。
对应于两种可能的输入bit,从每个状态出发只有两种转移。
3.编码器网格图
a00
b10
c01
d11
输入比特0
输入比特1
虽然状态图完全地描述了编码器的特性,但由于没有表示时间过程,所以采用状态图跟踪编码器的状态转移很不方便。
树状图在状态图的基础上增加了时间尺度。
每个相继输入信息比特的编码过程可表述为从左向右经过树状图,每条数值代表一个输出分支字。
树状图上增加的时间尺度是我们可以动态地描述输入序列的编码过程。
但由于树状图的规模增长很快,因而只适于序列中分支子数目较小的情况。
我们采用移位寄存器的4种可能状态来标注树图的各个节点,
a?
00,b?
01,c?
10,d?
11。
树结构的第一次分支在时刻t1,产生一对节点,记为a,b;
在后继的各个分支处,节点数翻倍。
第二次分支在时刻t2,生成4个节点,记为a,b,c,d;第三次分支后共有8个节点。
网格图利用了结构上的重复性,从而能够更加方便地描述编码器。
(二)维特比译码算法
维特比译码算法由维特比在1967年提出。
维特比算法的实质是最大似然译码,但它利用了编码网格图的特殊结构,从而降低了计算的复杂性。
该算法包括计算网格图上在时刻ti到达各个状态的路径和接受序列之间的相似度,或者说距离。
维特比算法考虑的是,去除不可能成为最大似然选择对象的网格图上的路径,即如果有两条路径到达同一状态,则具有最佳量度的路径被选中,成为幸存路径。
对所有状态都将进行这样的选路操作,译码器不断在网格图上深入,通过去除可能性最小的路径实现判决。
网格图中每个时刻ti上有2
K?
1
条路径到达。
维特比译码包括计算到达每个状态的两条路径的路径量度,并舍弃其中一条路径。
在时刻ti,算法对2
K?
1
并重复上述过程。
在一个给定的时刻,各状态的幸存路径量度就是该状态在该时刻的状态量度。
图3编码器网格图
个状态,这里的K是约束长度,每种状态都可经两
个状态(节点)都进行上述计算,然后进入时刻ti?
1,
输入数据序列m:
发送序列U:
接受序列Z:
1111010101
a00
b10
c01
d11
输入比特0
输入比特1
图4译码器网格图
5.4实验内容
在MATLAB上设计一个(2,1,3)卷积编码器和对应的采用维特比译码算法的译码器。
编码器的生成多项式为:
g1(X)?
1?
X?
X2g2(X)?
1?
X
2
将编码器的输出经过一个高斯白噪声信道的结果作为译码器的输入,观察比较译码器输出和编码器输入,了解卷积码的容错性,并计算译码结果的误比特率。
基本流程如错误!
未找到引用源。
所示。
实验报告要求附加程序代码,并对代码中每个函数模块的实验方式和功能进行简要的说明。
输出编码结果
卷积码编码模块:
卷积码编码子程序:
functionout_put=conv_enc(msg)g1=[111];g2=[101];m1=conv(msg,g1);m2=conv(msg,g2);L1=length(m1);fori=1:
L1
out_put(2*i-1)=rem(m1([i]),2);
out_put(2*i)=rem(m2([i]),2);endend
该模块将对输入信息码子编码。
维特比算法解码器的实现函数:
functiondecoder_output=viterbi_hard(y,L)globalG;
G=[111;101];n=size(G,1);K=size(G,2);
number_of_states=2^(K-1);
%-------生成各分支的输出--------------------forj=0:
number_of_states-1fort=0:
1
[next_state,memory_contents]=next_state_fun(j,t,K);input(j+1,next_state+1)=t;
branch_output=rem(memory_contents*G',2);nextstate(j+1,t+1)=next_state;
output(j+1,t+1)=bin2deci(branch_output);endend
%------------------------------------------------
metric_of_states=zeros(1,number_of_states);%各状态的度量metricmetric_of_states_c=zeros(number_of_states,2);%各状态两个输入的度量
length_seq=length(y)/n;
%符号个数
decoder_output=zeros(1,length_seq-K+1);%解码输出
channel_output_matrix=reshape(y,n,length_seq);
%将解调输出的比特按符号排列
survivor_state=zeros(number_of_states,length_seq+1);%留存路径input_of_state=zeros(number_of_states,length_seq+1,2);
%汇聚到各状态的分支对应的输入
state_sequence=zeros(1,length_seq+1);count=zeros(1,number_of_states);
fori=1:
length_seq-K+1forj=0:
number_of_states-1fort=0:
1
binary_output=deci2bin(output(j+1,t+1),n);
篇二:
卷积码编译码实验报告
厦门理工学院
实验报告书
课程名称:
信息论与编码实验
实验名称:
卷积码编译码
1
2
中输入移位寄存器最多只有m?
k个有效的寄存器单元,而输出移位寄存器仅起一个并串转换作用。
因此称参量m为卷积吗的记忆长度(段)
2、维比特译码原理
它的基本思想是把接收到的矢量,和网格图上诸种可能的路径比较,删去距离大的路径,保留距离小的路径,以距离最小路径作为发码的估值
五、实验内容
在MATLAB环境下卷积码编/解码器的实现。
1、主函数main.m
clear;clc;
msg=randint(1,20,[0,1])
word=encode_conv213(msg)
word
(1)=~word
(1);%信道中存在污染,人为的模拟传输过word(10)=~word(10);%程中的出错码字
word(15)=~word(15);
word1=word
msg_1=decode_conv213(word1)
msg-msg_1
2、状态积state_machine.m
function[output,nextState]=state_machine(input,current_state)
output
(1)=mod(current_state
(1)+current_state(3),2);
output
(2)=mod(input+current_state
(2)+current_state
(1),2);
nextState
(1)=current_state
(2);
nextState
(2)=current_state(3);
nextState(3)=input;
3、汉明距离hamming_distance.m
functiondistance=hamming_distance(a,b)
temp=a+b;
temp=mod(temp,2);
distance=sum(temp);
4、213编码程序encode_conv213.m
functionword=encode_conv213(msg)
word=zeros(1,length(msg)*2);
current=[000];
fori=1:
length(msg)
[out,next]=state_machine(msg(i),current);
3
current=next;
word(2*i-1)=out
(1);
word(2*i)=out
(2);
End
5、213维比特译码decode_conv213.m
functionmsg=decode_conv213(word)
chip=10;%初始状态选十个信息
fori=1:
2^chip
M(i,:
)=de2bi(i-1,chip);%把所有可能性按二进制输出
W(i,:
)=encode_conv213(M(i,:
));
%得到相应的二进制编译后的码字
D(i)=hamming_distance(W(i,:
),word(1:
chip*2));
%与出错码字对比得到汉明距
end
[val,index]=sort(D);
%val中存汉明距从小到大排列,index中存对应val数据所在位置
ret_msg=zeros(1,length(word)/2);%开辟译出码字的存放空间
fori=1:
6
%1024种选择6种最小距离,并输出在ret_msg中,最小汉明距存于ret_dis
ret_msg(i,1:
chip)=M(index(i),:
);
ret_dis(i)=D(index(i));
end
iter=(length(word)-chip*2)/2;%剩余要译出的码字个数
fori=1:
iter%迭代过程
forj=1:
6
msg_temp1=[ret_msg(j,1:
chip+i-1)0];%下一状态出“0”
msg_temp2=[ret_msg(j,1:
chip+i-1)1];%下一状态出“1”
word_temp1=encode_conv213(msg_temp1);
%下一状态为“0”时的编码
word_temp2=encode_conv213(msg_temp2);
%下一状态为“1”时的编码
dis_temp1=hamming_distance(word_temp1,word(1:
chip*2+2*i));
dis_temp2=hamming_distance(word_temp2,word(1:
chip*2+2*i));%算两种汉明距if(dis_temp1 ret_msg(j,1:
chip+i)=msg_temp1;
ret_dis(j)=dis_temp1;
else
ret_msg(j,1:
chip+i)=msg_temp2;
ret_dis(j)=dis_temp2;
%选择较小汉明距的状态储存并输出在ret_msg中,最小汉明距存于ret_dis
end
end
4
5
篇三:
卷积码实验报告
现代编码理论
基于MATLAB的卷积码编码及译码仿真
姓名:
闫嘉川
学号:
1433170
所在院系:
电子与信息工程学院
实验名称:
基于MAATLAB的卷积码编码及译码仿真
实验目的:
卷积码是一种性能优越的信道编码。
它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。
随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。
本实验简明地介绍了卷积码的编码原理和Viterbi译码原理。
并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。
最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。
经过仿真和实测,并对测试结果作了分析。
实验原理:
1、卷积码编码原理
卷积码是一种性能优越的信道编码,它的编码器和解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。
卷积码一般表示为(n,k,K)的形式,即将k个信息比特编码为n个比特的码组,K为编码约束长度,说明编码过程中相互约束的码段个数。
卷积码编码后的n各码元不经与当前组的k个信息比特有关,还与前K-1个输入组的信息比特有关。
编码过程中相互关联的码元有K*n个。
R=k/n是编码效率。
编码效率和约束长度是衡量卷积码的两个重要参数。
典型的卷积码一般选n,k较小,K值可取较大(>10),但以获得简单而高性能的卷积码。
卷积码的编码描述方式有很多种:
冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。
2、卷积码Viterbi译码原理
卷积码概率译码的基本思路是:
以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。
概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正是最大似然的准则。
卷积码的最大似然译码与分组码的最大似然译码在原理上是一样的,但实现方法上略有不同。
主要区别在于:
分组码是孤立地求解单个码组的相似度,而卷积码是求码字序列之间的相似度。
基于网格图搜索的译码是实现最大似然判决的重要方法和途径。
用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。
如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。
这样一直进行到最后第L级(L为发送序列的长度)。
由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi译码正是基于这种想法。
对于(n,k,K)卷积码,其网格图中共2kL种状态。
由网格图的前K-1条连续支路构成的路径互不相交,即最初2k_1条路径各不相同,当接收到第K条支路时,每条路径都有2条支路延伸到第K级上,而第K级上的每两条支路又都汇聚在一个节点上。
在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第K级只留下2K条幸存路径。
选出的路径同它们的对数似然函数的累加值将一起被存储起来。
由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较它们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。
由此可见,上述译码过程中的基本操作是,“加-比-选”,
即每级求出对数似然函数的累加值,然后两两比较后作出选择。
有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作为“幸存”路径。
卷积码的编码器从全零状态出发,最后又回到全零状态时所输出的码序列,称为结尾卷积码。
因此,当序列发送完毕后,要在网格图的终结处加上(K-1)个己知的信息作为结束信息。
在结束信息到来时,由于每一状态中只有与已知发送信息相符的那条支路被延伸,因而在每级比较后,幸存路径减少一半。
因此,在接收到(K-1)个己知信息后,在整个网格图中就只有唯一的一条幸存路径保留下来,这就是译码所得的路径。
也就是说,在己知接收到的序列的情况下,这条译码路径和发送序列是最相似的。
3、MATLAB仿真
在本次实验中,主要是利用SIMULINK仿真模块对卷积码的编码及viterbi译码的全过程进行了设计,SIMULINK仿真框图如下:
图1卷积码的SIMULINK仿真框图
基本设计思路是:
先由BernoulliBinaryGenerator(贝努利二进制序列产生器)产生一个0,1等概序列,经过ConvolutionalEncoder(卷积编码器)对输入的二进制序列进行卷积编码,并用BPSK调制方式调制信号。
加入信道噪声(高斯白噪声)后再经过BPSK解调制后送入ViterbiDecoder(Viterbi译码器)进行硬判决译码。
最后经过ErrorRateCalculation(误码统计)后由Display(显示)输出。
然后通过Selector(数据选通器)将结果输出到Toworkspace(工作区间)。
该结果将由m文件中的程序调用以绘制不同信噪比及其他参数下系统误码率曲线。
实验结果:
1、不同的约束长度对卷积码误码率的影响
对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,本实验中以码率R=1/2的(2,1,3)和(2,1,7)卷积码为例展开分析。
仿真所用所用程序如下:
x=0:
5;
y=x;
fori=1:
length(x)
SNR=x(i);
sim('juanjima');
y(i)=mean(BitErrorRate);
end
semilogy(x,y,’
r’);
holdon;
fori=1:
length(x)
SNR=x(i);
sim('juanjima2');
y(i)=mean(BitErrorRate);
end
semilogy(x,y,’g’);
xlabel('SNR')
ylabel('BitErrorRate')
仿真结果:
图2约束长度对卷积码性能的影响
结果分析:
对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,我们以码率R=1/2的(2,1,3)和(2,1,7)卷积码为例展开分析。
上面的曲线是(2,1,3)卷积码的误码性能曲线。
下面的曲线是(2,1,
7)卷积码的误码性能曲线。
从图4-4中的误比特率曲线可以清楚地看到,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定时,增加约束长度可以降低系统的误比特率,但是随着约束长度的增加,译码设备的复杂性
也会随之增加,所以对于码率为1/2的卷积码,我们在选取约束长度时一般为3~
9。
2、回溯长度对卷积码性能的影响
以(2,1,7)卷积码为例。
将译码模块中的Tracebackdepth分别设置为20,35,50并在一个图中画出这三种方式下的误码性能曲线。
仿真所用程序如下:
x=0:
5;
y=x;
fori=1:
length(x)
SNR=x(i);
sim('juanjima');
y(i)=mean(BitErrorRate);
end
semilogy(x,y,’r’);
holdon;
fori=1:
length(x)
SNR=x(i);
sim('juanjima2');
y(i)=mean(BitErrorRate);
end
semilogy(x,y,’g’);
holdon;
fori=1:
length(x)
SNR=x(i);
sim('juanjima3');
y(i)=mean(BitErrorRate);
end
semilogy(x,y,’b’);
xlabel('SNR')
ylabel('BitErrorRate')
仿真结果: