卷积码实验报告篇一:卷积码实验报告实验五信道编解码()本章目标掌握数字频带传输系统调制解调的仿真过程掌握数字频带传输系统误码率仿真分析方法 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?X2多项式中的最低阶项对应于寄存器的输入级。
输出序列根据如下方式求得: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. 编码器网格图a 00b 10c 01d 11输入比特0输入比特1虽然状态图完全地描述了编码器的特性,但由于没有表示时间过程,所以采用状态图跟踪编码器的状态转移很不方便。
树状图在状态图的基础上增加了时间尺度。
每个相继输入信息比特的编码过程可表述为从左向右经过树状图,每条数值代表一个输出分支字。
树状图上增加的时间尺度是我们可以动态地描述输入序列的编码过程。
但由于树状图的规模增长很快,因而只适于序列中分支子数目较小的情况。
我们采用移位寄存器的4种可能状态来标注树图的各个节点,a?00,b?01,c?10,d?11。
树结构的第一次分支在时刻t1,产生一对节点,记为a,b;在后继的各个分支处,节点数翻倍。
第二次分支在时刻t2,生成4个节点,记为a,b,c,d;第三次分支后共有8个节点。
网格图利用了结构上的重复性,从而能够更加方便地描述编码器。
(二)维特比译码算法维特比译码算法由维特比在1967年提出。
维特比算法的实质是最大似然译码,但它利用了编码网格图的特殊结构,从而降低了计算的复杂性。
该算法包括计算网格图上在时刻ti到达各个状态的路径和接受序列之间的相似度,或者说距离。
维特比算法考虑的是,去除不可能成为最大似然选择对象的网格图上的路径,即如果有两条路径到达同一状态,则具有最佳量度的路径被选中,成为幸存路径。
对所有状态都将进行这样的选路操作,译码器不断在网格图上深入,通过去除可能性最小的路径实现判决。
网格图中每个时刻ti上有2K?1条路径到达。
维特比译码包括计算到达每个状态的两条路径的路径量度,并舍弃其中一条路径。
在时刻ti,算法对2K?1并重复上述过程。
在一个给定的时刻,各状态的幸存路径量度就是该状态在该时刻的状态量度。
图3编码器网格图个状态,这里的K是约束长度,每种状态都可经两个状态(节点)都进行上述计算,然后进入时刻ti?1,输入数据序列m:发送序列U:接受序列Z: 1 111 0 101 01a 00b 10c 01d 11输入比特0输入比特1图4译码器网格图5.4实验内容在MATLAB上设计一个(2,1,3)卷积编码器和对应的采用维特比译码算法的译码器。
编码器的生成多项式为:g1(X)?1?X?X2g2(X)?1?X2将编码器的输出经过一个高斯白噪声信道的结果作为译码器的输入,观察比较译码器输出和编码器输入,了解卷积码的容错性,并计算译码结果的误比特率。
基本流程如错误!未找到引用源。
所示。
实验报告要求附加程序代码,并对代码中每个函数模块的实验方式和功能进行简要的说明。
输出编码结果卷积码编码模块:卷积码编码子程序:function out_put=conv_enc(msg) g1=[1 1 1]; g2=[1 0 1]; m1=conv(msg,g1); m2=conv(msg,g2); L1=length(m1); for i=1:L1out_put(2*i-1)=rem(m1([i]),2);out_put(2*i)=rem(m2([i]),2); end end该模块将对输入信息码子编码。
维特比算法解码器的实现函数:function decoder_output=viterbi_hard(y,L) global G;G=[1 1 1;1 0 1]; n=size(G,1); K=size(G,2);number_of_states=2^(K-1);%------ -生成各分支的输出-------------------- for j=0:number_of_states-1 for t=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); end end %------------------------------------------------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);for i=1:length_seq-K+1 forj=0:number_of_states-1 for t=0:1binary_output=deci2bin(output(j+1,t+1),n);篇二:卷积码编译码实验报告厦门理工学院实验报告书课程名称:信息论与编码实验实验名称:卷积码编译码12中输入移位寄存器最多只有m?k个有效的寄存器单元,而输出移位寄存器仅起一个并串转换作用。
因此称参量m为卷积吗的记忆长度(段)2、维比特译码原理它的基本思想是把接收到的矢量,和网格图上诸种可能的路径比较,删去距离大的路径,保留距离小的路径,以距离最小路径作为发码的估值五、实验内容在MATLAB环境下卷积码编/解码器的实现。
1、主函数main.mclear;clc;msg = randint(1,20,[0,1])word = encode_conv213(msg)word(1) =~word(1);%信道中存在污染,人为的模拟传输过word(10) =~word(10); %程中的出错码字word(15) =~word(15);word1=wordmsg_1 = decode_conv213(word1)msg-msg_12 、状态积state_machine.mfunction [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.mfunction distance = hamming_distance(a,b)temp = a+b;temp = mod(temp,2);distance = sum(temp);4 、213编码程序encode_conv213.mfunction word = encode_conv213(msg)word = zeros(1,length(msg)*2);current = [0 0 0];for i = 1:length(msg)[out,next] = state_machine(msg(i),current);3current = next;word(2*i-1) = out(1);word(2*i)= out(2);End5、 213维比特译码decode_conv213.mfunction msg = decode_conv213(word)chip = 10;%初始状态选十个信息for i = 1:2^chipM(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); %开辟译出码字的存放空间for i = 1:6%1024种选择6种最小距离,并输出在ret_msg中,最小汉明距存于ret_disret_msg(i,1:chip)= M(index(i),:);ret_dis(i) = D(index(i));enditer = (length(word)-chip*2)/2; %剩余要译出的码字个数for i=1:iter %迭代过程for j=1:6msg_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;elseret_msg(j,1:chip+i) = msg_temp2;ret_dis(j)= dis_temp2;%选择较小汉明距的状态储存并输出在ret_msg中,最小汉明距存于ret_disendend45篇三:卷积码实验报告现代编码理论基于MATLAB的卷积码编码及译码仿真姓名:闫嘉川学号:1433170所在院系:电子与信息工程学院实验名称:基于MAATLAB的卷积码编码及译码仿真实验目的:卷积码是一种性能优越的信道编码。