MATLAB实现卷积码编译码-

合集下载

Matlab设计卷积编码和Viterbi已实现_read me

Matlab设计卷积编码和Viterbi已实现_read me

1、卷积编码和Viterbi解码的原理参见tutorial,代码编写都是基于该文档进行
网址:
或者附带的pdf文件
2、Convolutional Encoding采用Matlab自带的编码程序;可以在Matlab安装目
录下的通信工具箱中找到
3、测试程序testV对比了uncoded system & (2,1,2)卷积码经维特比解码后误码率
和信噪比曲线图,也可以采用别的卷积编码生成矩阵
4、由于无法压缩上传,故把代码放在一个word文档中,可将其中各子程序分
别复制出来保存为M。

注意有可能某些注释在doc文件中换行了,需要修改为注释
5、代码很少用matlab内部函数和工具箱,除某些参考网上设计外其余皆为自己
编写并测试通过,可修改其内容实现其他功能。

(完整word版)matlab卷积码程序

(完整word版)matlab卷积码程序

1、卷积码编码function [output]=cnv_encd(input)%output=cnv_encd(g,k0,input) 卷积码编码函数%g 生成矩阵%k0 输入码长%input 输入信源序列%output 输出卷积编码序列g=[1 1 1;1 0 1];编码矩阵k0=1;input=[1 1 0 1];if rem(length(input),k0)>0input=[input,zeros(size(1:k0-rem(length(input),k0)))]; endn=length(input)/k0;if rem(size(g,2),k0)>0error('Error,g is not of the right size.')endli=size(g,2)/k0;n0=size(g,1);u=[zeros(size(1:(li-1)*k0)),input,zeros(size(1:(li-1)*k0))];u1=u(li*k0:-1:1);for i=1:n+li-2u1=[u1,u((i+li)*k0:-1:i*k0+1)];enduu=reshape(u1,li*k0,n+li-1);output=reshape(rem(g*uu,2),1,n0*(n+li-1));2、Viterbi译码程序1)function y=bin2deci(x)l=length(x);y=(l-1:-1:0);y=2.^y;y=x*y';2)function y=deci2bin(x,l)y=zeros(1,l);i=1;while x>=0 & i<=ly(i)=rem(x,2);x=(x-y(i))/2;i=i+1;endy=y(l:-1:1);3)function distance=metric(x,y)if x==ydistance=0;elsedistance=1;end4)function [next_state,memory_contents]=nxt_stat(current_state,input,L,k)binary_state=deci2bin(current_state,k*(L-1));binary_input=deci2bin(input,k);next_state_binary=[binary_input,binary_state(1:(L-2)*k)];next_state=bin2deci(next_state_binary);memory_contents=[binary_input,binary_state];5)function [decoder_output,survivor_state,cumulated_metric]=viterbi(channel,snr_db)G=[1 1 1;1 0 1]; % G 卷积编码矩阵,如(2,1,3)卷积码生成矩阵[1 1 1;1 0 1],可以根据自己的需要输入编码矩阵k=1; % k 信息源输入端口数k=1channel=[1 1 0 1 0 1 0 0 1 0 1 1 ]; %信源编码snr_db=6;%信噪比,可以通过调节信噪比大小观察viterbi译码的性能%bpsk调制channel_output=bpsk(channel,snr_db);%调用bpsk函数,得到信道编码n=size(G,1); % n 编码输出端口数量,(2,1,3)中n=2if rem(size(G,2),k)~=0 %当G列数不是k的整数倍时error('Size of G and k do not agree') %发出出错信息endif rem(size(channel_output,2),n)~=0 %当输出量元素个数不是输出端口的整数倍时error('channel output not of the right size')endN=size(G,2)/k; %得出移位数,即寄存器的个数M=2^k;number_of_states=2^(k*(N-1)); %状态数for j=0:number_of_states-1 %j表示当前寄存器组的状态因为状态是从零%开始的,所以循环从0到number_of_states-1 for m=0:M-1 %m为从k个输入端的信号组成的状态,总的状%态数为2^k,所以循环从0到2^k-1% nxt_stat完成从当前的状态和输入的矢量得出下寄存器组的一个状态[next_state,memory_contents]=nxt_stat(j,m,N,k);%调用nxt_stat函数input(j+1,next_state+1)=m;branch_output=rem(memory_contents*G',2);nextstate(j+1,m+1)=next_state;output(j+1,m+1)=bin2deci(branch_output);endend% state_metric数组用于记录译码过程在每状态时的汉明距离% state_metric大小为number_of_states 2,(:,1)当前% 状态位置的汉明距离,为确定值,而(:,2)为当前状态加输入% 得到的下一个状态汉明距离,为临时值state_metric=zeros(number_of_states,2);depth_of_trellis=length(channel_output)/n;channel_output_matrix=reshape(channel_output,n,depth_of_trellis);survivor_state=zeros(number_of_states,depth_of_trellis+1);for i=1:depth_of_trellis-N+1flag=zeros(1,number_of_states);if(i<=N)step=2^(k*(N-i));elsestep=1;endfor j=0:step:number_of_states-1for m=0:M-1branch_metric=0;binary_output=deci2bin(output(j+1,m+1),n);for ll=1:nbranch_metric=branch_metric+metric(channel_output_matrix(ll,i),binary_output(ll));end% 选择码间距离较小的那条路径% 选择方法:% 当下一个状态没有被访问时就直接赋值,否则,用比它小的将其覆盖if(( state_metric(nextstate(j+1,m+1)+1,2)>state_metric(j+1,1)+branch_metric) | flag(nextstate(j+1,m+1)+1)==0 )state_metric(nextstate(j+1,m+1)+1,2)=state_metric(j+1,1)+branch_metric;survivor_state(nextstate(j+1,m+1)+1,i+1)=j;flag(nextstate(j+1,m+1)+1)=1;endendendstate_metric=state_metric(:,2:-1:1);endfor i=depth_of_trellis-N+2:depth_of_trellisflag=zeros(1,number_of_states);% 状态数从number_of_states→number_of_states/2→...→2→1%程序说明同上,只不过输入矢量只为0last_stop=number_of_states/(2^(k*(i-depth_of_trellis+N-2)));for j=0:last_stop-1branch_metric=0;binary_output=deci2bin(output(j+1,1),n);for ll=1:nbranch_metric=branch_metric+metric(channel_output_matrix(ll,i),binary_output(ll));endif( (state_metric(nextstate(j+1,1)+1,2)>state_metric(j+1,1)+branch_metric) | flag(nextstate(j+1,1)+1)==0 )state_metric(nextstate(j+1,1)+1,2)=state_metric(j+1,1)+branch_metric;survivor_state(nextstate(j+1,1)+1,i+1)=j;flag(nextstate(j+1,1)+1)=1;endendstate_metric=state_metric(:,2:-1:1);end% 从最佳路径中产生解码% 译码过程可从数组survivor_state的最后一个位置向前逐级译码state_sequence=zeros(1,depth_of_trellis+1);state_sequence(1,depth_of_trellis)=survivor_state(1,depth_of_trellis+1);for i=1:depth_of_trellisstate_sequence(1,depth_of_trellis-i+1)=survivor_state((state_sequence(1,depth_of_trellis+2-i)+1), depth_of_trellis-i+2);enddecoder_output_matrix=zeros(k,depth_of_trellis-N+1);for i=1:depth_of_trellis-N+1% 根据数组input的定义来得出从当前状态到下一个状态的输入信号矢量dec_output_deci=input(state_sequence(1,i)+1,state_sequence(1,i+1)+1);dec_output_bin=deci2bin(dec_output_deci,k);% 将一次译码存入译码输出矩阵decoder_output_matrix相应的位置decoder_output_matrix(:,i)=dec_output_bin(k:-1:1)';enddecoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-N+1));cumulated_metric=state_metric(1,1);3、卷积码译码误码性能分析clear all;clc;cycl = 50;snr_db = 0:1:10;% 输入信息msg = randint(1,1024);ber0 = zeros(cycl,length(snr_db));ber1 = zeros(cycl,length(snr_db));ber2 = zeros(cycl,length(snr_db));% Trellisestrel = poly2trellis(3,[5 7]); %Define trellis for rate 1/2 code. for n = 1:cyclfor x = 1:length(snr_db)% Code wordscode = convenc(msg,trel); % Encode.% Interleaverstate = 20;inter = randintrlv(code,state);% BPSK 调制s0 = sign(msg - 0.5);s1 = sign(inter-0.5);s2 = sign(code-0.5);% AWGN Channeladd_noise0=awgn(s0,snr_db(x),'measured');add_noise1=awgn(s1,snr_db(x),'measured');add_noise2=awgn(s2,snr_db(x),'measured');% Deinterleaver with noise for soft decodingdeinter_noise = randdeintrlv(add_noise1,state);% 解调r_0 = 0.5*sign(add_noise0) + 0.5;r_1 = 0.5*sign(add_noise1) + 0.5;r_2 = 0.5*sign(add_noise2) + 0.5;% Deinterleaverdeinter_1 = randdeintrlv(r_1,state);% Traceback lengthtblen = 5;% vitdec 硬判决decoded1 = vitdec(deinter_1,trel,tblen,'cont','hard');% vitdec 软判决[y,qcode] = quantiz(deinter_noise,[-.75 -.5 -.25 0 .25 .5 .75],7:-1:0); decoded2 = vitdec(qcode,trel,tblen,'cont','soft',3);% 比较误码率[num0,rat0] = biterr(r_0,msg);[num1,rat1] = biterr(double(decoded1(tblen+1:end)),msg(1:end-tblen)); [num2,rat2] = biterr(double(decoded2(tblen+1:end)),msg(1:end-tblen)); ber0(n,x) = rat0;ber1(n,x) = rat1;ber2(n,x) = rat2;endendber0 = mean(ber0);ber1 = mean(ber1);ber2 = mean(ber2);semilogy(snr_db,ber0,'b-o',snr_db,ber1,'r-s',snr_db,ber2,'k-p');xlabel('SNR (dB)');ylabel('BER');legend('Uncoded','Hard Coded','Soft Coded');title('Performance of convolutional code with rate 1/2');。

卷积编码译码通信原理课程设计MATLAB

卷积编码译码通信原理课程设计MATLAB
elseif j==3
set(h,'color','y');
end
hold on
end
title('卷积编码译码');
legend('灾难编码器','1/2编码器','1/3编码器')
xlabel('信道信噪比');
ylabel('误码率');
六.实验结果及分析
编码器灾难性编码系统结果
对比三个仿真结果可知:灾难性编后果十分严重,在实际应用中必须编码,另外1/3编码器比1/2编码器性能要好。
d.网格图(研究卷积码最大似然译码维特比算法的工具)
纵坐标表状态,横坐标表时间。
从图中我们可看出编码过程中使用K-1个冲洗比特使得编码器恢复初始状态是有必要的。
三、卷积码的译码
Viterbi译码(最大似然译码)
先验概率条件下,后验概率最大者似然函数最大,最值MAP即最大似然(ML)译码。而最大对数似然函数即计算最小汉明距,如此,比较接受序列和发送序列汉明距,选出最小汉明距序列作为最佳译码即可。
如图:
状态表为:
ui
ui-1
si
0
0
a
1
0Байду номын сангаас
b
0
1
c
1
1
d
有如下状态图:
b.树图(将状态图按时间展开)
设初始状态s0=00为树根,对每个时刻的可能输入进行分支,分数级数L表示,L=0时,u0=0向上,u0=1向下,依次向后无限延伸,分支上数字表示相应输出,a,b,c,d表示状态。(优点:时序关系清晰)
四、卷积灾难性错误(Catastrophic error)

卷积码的编解码Matlab仿真

卷积码的编解码Matlab仿真

卷积码的编解码Matlab仿真摘要卷积码是一种性能优越的信道编码。

它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。

随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。

本文简明地介绍了卷积码的编码原理和译码原理。

并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。

最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。

经过仿真和实测,并对测试结果作了分析。

得出了以下三个结论:(1)当改变卷积码的码率时,系统的误码性能也将随之发生变化。

(2)对于码率一定的卷积码,当约束长度N 发生变化时,系统的误码性能也会随之发生变化。

(3)回溯长度也会不同程度上地影响误码性能。

关键词:卷积码;码率;约束长度;回溯长度Simulation and Research on Encoding and Decoding ofConvolution CodeAbstractConvolution code has a superior performance of the channel code. It is easy to coding and decoding. And it has a strong ability to correct errors. As correcting coding theory has a long development, the practice of convolution code is more and more extensive. In this thesis, the principle of convolution coding and decoding is introduced simply firstly. Then the whole simulation module process of encoding, decoding and the Error Rate Calculation is completed in this design. Finally, in order to understand their performances of error rate, many changes in parameters of convolution code are calculated in the simulation process. After simulation and measure, an analysis of test results is presented. The following three conclusions are draw:(1) When the rate of convolution Code changes, BER performance of the system will change.(2) For a certain rate of convolution code, when there is a change in the constraint length of N, BER performance of the system will change.(3) Retrospective length will affect BER.Key words: convolution code; rate; constraint length; retrospective length;目录论文总页数:21页1 引言 (1)1.1 课题背景 (1)1.2 国内外研究现状 (1)1.3 本课题的意义 (1)1.4 本课题的研究方法 (1)2 卷积码的基本概念 (2)2.1 信道 (2)2.2 纠错编码 (2)2.3 卷积码的基本概念 (2)2.4 卷积码编码的概念 (2)2.4.1 卷积编码 (2)2.4.2 卷积码的树状图 (3)2.4.3 卷积码的网格图 (4)2.4.4 卷积码的解析表示 (5)3 卷积码的译码 (6)3.1 卷积码译码的概述 (6)3.2 卷积码的最大似然译码 (6)3.3 VITEBI 译码的关键步骤 (7)3.3.1 输入与同步单元 (7)3.3.2 支路量度计算 (7)3.3.3 路径量度的存储与更新 (7)3.3.4 信息序列的存储与更新 (8)3.3.5 判决与输出单元 (8)4 结论 (9)4.1 卷积码的仿真 (9)4.1.1 SIMULINK仿真模块的参数设置以及重要参数的意义 (9)4.2 改变卷积码的参数仿真以及结论 (12)4.2.1 不同回溯长度对卷积码性能的影响 (12)4.2.2 不同码率对卷积码误码性能的响 (14)4.2.3 不同约束长度对卷积码的误码性能影响 (15)结论 (17)参考文献 (18)致谢..................................................... 错误!未定义书签。

matlab卷积编码与viterbi译码的实现

matlab卷积编码与viterbi译码的实现

matlab卷积编码与viterbi译码的实现MATLAB中viterbi译码算法讨论⼤家可以再评论区交流!!!MATLAB中实现viterbi译码的函数为:convenc其中:code = convenc(msg,trellis)vitdec其中:vitdec(code,trellis,tblen,opmode,dectype)code卷积编码,trellis⽹格表,tblen回溯长度,opmode:cont、term、trunc,dectype:unquant、hard、soft;本⼈最近在做⼀个关于viterbi译码算法,最终在FPGA中实现,在FPGA中最终的实现⽅案为xillinx IP核实现。

在此之前⽤MATLAB进⾏仿真验证。

matlab程序:Tre = poly2trellis(7,[133 171]);通过poly2trellis⽣成逻辑关系图,如下图所⽰。

逻辑关系图%卷积编码:msg = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];code = convenc(msg,Tre);%code = [0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,0];%这是通过convenc函数⽣成的卷积码%vitdec译码:%在vitdec译码过程中采⽤硬判决,通过不同的tblen和opmode来找出其中关系。

%(1) opmode = conttblen = 12;msg_dat = vitdec(code,Tre,tblen,'cont','hard');%msg_dat =[ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 ];%通过了解到cont模式中,vitdec译码会有延迟,延迟的长度为tblen长度,所以在此对vitdec进⾏修改code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;code_temp = [code,zeros(1,24)];msg_temp = vitdec(code_temp ,T,12,'cont','hard')msg_dat = msg_temp(13:end);%msg_dat = [ 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0];%此时vitdec译码出来的数据和信源在后⾯最后⼀位不⼀样%(2) opmode = termtblen = 12;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了tblen = 18;msg_dat = vitdec(code,Tre,tblen,'term','hard');%msg_dat = [0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0];%此时vitdec译码出来的数据和信源⼀样前16位和信源⼀样后⾯的就出错了%(3)opmode = trunctblen = 12;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样tblen = 18;msg_dat = vitdec(code,Tre,tblen,'trunc','hard');%msg_dat = [ 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1];%此时vitdec译码出来的数据和信源⼀样总结:以上通过⽐较tblen和opmode模式的不同对产⽣的结果,其中cont和trunc的模式总结起来就是cont有tblen延迟,但是trunc没有。

咬尾卷积编码解码matlab

咬尾卷积编码解码matlab

一、引言咬尾卷积编码解码是一种常用的数字通信技术,能够有效地对传输的数据进行编码和解码,提高数据传输的可靠性和稳定性。

在数字通信领域,咬尾卷积编码解码已经被广泛应用于各种通信系统中。

在本文中,将对咬尾卷积编码解码在MATLAB中的实现进行介绍。

二、咬尾卷积编码解码的原理1. 咬尾卷积编码的原理2. 咬尾卷积解码的原理三、MATLAB中的咬尾卷积编码解码实现1. MATLAB中的咬尾卷积编码2. MATLAB中的咬尾卷积解码四、使用MATLAB进行咬尾卷积编码解码的案例分析1. 案例一:实现一个简单的咬尾卷积编码解码系统2. 案例二:利用MATLAB进行咬尾卷积编码解码的性能分析五、结论在本文中,通过对咬尾卷积编码解码原理进行介绍,以及在MATLAB 中对其实现的讲解,说明了咬尾卷积编码解码在数字通信中的重要性和广泛应用。

通过案例分析,也验证了MATLAB在实现咬尾卷积编码解码时的可行性和有效性。

希望本文对读者在理解和应用咬尾卷积编码解码方面有所帮助,并能够对相关领域的研究工作提供参考。

六、参考文献1. 张三, 李四, 王五. 咬尾卷积编码解码原理与实现[M]. 北京: 电子工业出版社, 2005.2. 王六, 赵七. MATLAB在数字通信中的应用[M]. 上海: 上海科学技术出版社, 2010.以上就是我整理的关于咬尾卷积编码解码在MATLAB中的文章,希望对您有所帮助。

咬尾卷积编码解码是一种在数字通信领域广泛应用的技术,它能够提高数据传输的可靠性和稳定性。

本文将继续介绍咬尾卷积编码解码的原理和在MATLAB中的实现,并结合案例分析展示其在实际应用中的效果和性能。

在咬尾卷积编码的原理部分,我们已经介绍了它的基本原理,即通过卷积操作对输入数据进行编码,生成冗余的校验码以增强数据的容错能力。

而咬尾卷积解码则是通过对收到的编码信号进行解码,尽可能地还原原始数据。

在MATLAB中,咬尾卷积编码可以通过使用内置的函数或者自定义函数来实现。

(完整word版)卷积码的编译码MATLAB程序

(完整word版)卷积码的编译码MATLAB程序

%survivor state是一个矩阵,它显T了通过网格的最优路径,这个矩阵通过一个单独的函数metric(x,y)给出。

%其中G是一个矩阵,它的任一行决定了从移位寄存器到模2加法器的连接方式.为生成矩阵%这里,我们做了一个简单的(2,1,7)卷积码编码器。

k=1;G=[1 0 1 1 0 1 1;1 1 1 1 0 0 1];%G1=133,G2=171%以下3种输入序列,可任选一种%%input=[0 0 0 0 0 0 0];%全0输入%input=[1 1 1 1 1 1 1];%全1输入input=[round(rand(1,7)*1)];%随机系列输入,也可用 randint(1,7,[0 1])figure;plot(input,'*r') %figure1:画图:目标input,红色(red,r),形状为* s=input;g1=G(1,:);g2=G(2,:);c1=conv(s,g1);%作卷积%disp(c1);c2=conv(s,g2);%disp(c2);n=length(c1);%7位输入时n=13c=zeros(1,2*n);%生成全0矩阵,1*26%disp(c);for i=1:nc(2*i-1)=c1(i);c(2*i)=c2(i);%两个模2加法器分别输出卷积结果序列后,由旋转开关读取的结果(此时仅为卷积结果,非2进制0/1)endfor i=1:2*nif(mod(c(i),2)==0)% mod(c(i),2)==0意思:c(i)除以2,余数为0c(i)=0;else c(i)=1;endendoutput=c;channel_output=output;%输出矩阵%disp(channel_output);figure;plot(output,'*b') %画图:目标:卷积码编码输出,蓝色(blue,b)* %————————————————以上为编码部分,以下为维特比译码————————————————n=size(G,1);%取矩阵G的行数,故n=2。

卷积码编译码matlab仿真

卷积码编译码matlab仿真

一、概述卷积码是一种常用的编码技术,用于提高数字通信系统的可靠性和抗干扰能力。

而编码的解码过程则需要运用编译码技术,以恢复原始数据。

Matlab作为一种强大的工程仿真软件,可以用来对卷积码编译码进行仿真分析,帮助工程师们更好地理解和优化卷积码系统,提高通信系统的性能。

二、卷积码原理1. 卷积码的概念卷积码是一种线性块码,它采用移位寄存器和模2加法器进行编码,通过引入冗余比特来提高信号的可靠性。

卷积码的编码过程可以简单描述为:将输入信息数据与特定的生成多项式进行卷积运算,得到编码后的输出数据。

2. 卷积码的特点卷积码具有较高的编码效率和能够很好地控制码长、纠错能力等特性,因此在实际通信系统中得到广泛应用。

三、编译码原理1. Viterbi算法卷积码的译码过程通常采用Viterbi算法,它是一种最大似然译码算法,通过计算最小距离路径的方式来进行译码。

Viterbi算法能够有效地对卷积码进行解码,提高译码的准确性。

2. 编译码的实现在Matlab中,编译码的实现通常是通过编写一定的程序来模拟Viterbi算法的译码过程。

通过仿真分析,可以评估不同的编码方案对通信系统性能的影响。

四、Matlab仿真环境1. Matlab的特点Matlab作为一种强大的仿真软件,具有丰富的工具和函数库,能够方便地进行数字通信系统设计与仿真分析。

Matlab提供了直观的图形界面和强大的数据处理能力,可用于展示仿真结果和进行数据分析。

2. 使用Matlab进行卷积码编译码仿真在Matlab环境中,可以编写程序来实现卷积码的编码和Viterbi算法的译码过程。

通过调用Matlab中的工具函数和绘图函数,可以直观地展示通信系统的性能指标,并对比不同编码方式的性能差异。

五、仿真实例分析1. 卷积码编码仿真我们可以编写Matlab程序,实现对卷积码的编码过程。

通过模拟不同的编码率和约束长度,可以观察到编码后的效果,并评估编码的性能。

MATLAB实现卷积码编译码要点总结计划

MATLAB实现卷积码编译码要点总结计划

本科生毕业论文(设计)题目:MATLAB 实现卷积码编译码专业代码:作者姓名:学号:单位:指导教师:年代日聊城大学本科毕业论文(设计)目录序言-----------------------------------------------------11 .纠错码基本理论----------------------------------------2纠错码基本理论-----------------------------------------------2纠错码观点-------------------------------------------------2基来源理和性能参数-----------------------------------------2几种常用的纠错码---------------------------------------------62 .卷积码的基本理论--------------------------------------8卷积码介绍---------------------------------------------------8卷积码的差错控制原理-----------------------------------8卷积码编码原理----------------------------------------------10卷积码分析表示法--------------------------------------10卷积码图形表示法--------------------------------------11卷积码译码原理----------------------------------------------15卷积码三种译码方式------------------------------------15V ITERBI译码原理----------------------------------------163.卷积码编译码及MATLAB仿真----------------------------18M概括--------------------------------------------------18ATLABM ATLAB的特色------------------------------------------19M工具箱和内容------------------------------------19ATLAB卷积码编码及仿真--------------------------------------------20编码程序----------------------------------------------20信道传输过程仿真--------------------------------------------21维特比译码程序及仿真----------------------------------------22维特比译码算法分析------------------------------------23V ITERBI译码程序---------------------------------------25VITERBI 译码仿真-----------------------------------28 MATLAB信噪比对卷积码译码性能的影响--------------------------282聊城大学本科毕业论文(设计)码率对卷积码译码性能的影响----------------------------30拘束长度对卷积码误码性能的影响------------------------31回溯长度对卷积码误码性能的影响------------------------32裁决方式对卷积码误码性能的影响------------------------324.结论及展望------------------------------------------34结论--------------------------------------------------------34展望--------------------------------------------------------355.结束语-----------------------------------------------36参照文件------------------------------------------------37道谢----------------------------------------------------38附录----------------------------------------------------393聊城大学本科毕业论文(设计)纲要在数字通讯系统中,往常采纳差错控制编码来提升系统的靠谱性。

《卷积编码与解码的MATLAB实现及性能分析》

《卷积编码与解码的MATLAB实现及性能分析》

《通信原理》课程设计报告课程设计成绩评定指导教师对学生在课程设计中的评价指导教师对课程设计的评定意见卷积编码与解码的MATLAB实现及性能分析摘要本课程设计主要解决通信系统中卷积编码与解码技术在Matlab中实现以及对其性能进行分析。

用贝努利二进制序列产生器作为信号源,产生基带信号,对其中的卷积进行编码,调制解调,然后采用Viterbi译码输出,最后计算误码率,对其性能进行分析。

关键词卷积码;卷积编码器;Viterbi译码器;BSK调制与解调;约束长度。

目录1引言 (4)1.1课程设计的目的 (4)1.2 课程设计的基本任务和要求 (4)1.2.1本次课程设计的基本任务 (4)1.2.2课程设计中的要求 (5)1.3设计平台 (5)2设计原理 (5)2.1卷积码的基本概念 (5)2.2卷积码的编码 (5)2.2.1卷积编码 (5)2.2.2卷积码的树状图 (6)2.2.3卷积码的网格图 (7)2.2.4卷积码的状态图 (8)2.3卷积码的解码 (8)3卷积码的仿真与性能分析 (9)3.1 卷积码的仿真 (9)3.1.1卷积码的设计框图 (9)3.1.2Simulink仿真模块的参数设置 (9)3.2 卷积码的波形输出 (15)3.2.1输入信号波形 (15)3.2.2输入信号与解码输出波形 (16)3.3卷积码的性能分析 (17)4出现的问题及解决方法 (19)5 结束语 (19)6参考文献 (20)1 引言本课程设计主要解决基于Matlab的Simulink下的模块对卷积编码与解码进行仿。

通过仿真可以更清楚的认识到卷积码的编码与解码的各个环节,并对仿真结果进行分析。

得出Viterbi译码的误码率性能和约束长度的关系。

1.1课程设计目的卷积码,又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码[4]。

卷积码是一种向前纠错控制编码。

它将连续的信息比特序列映射为连续的编码器输出符号。

基于matlab的2-3卷积码编码译码设计与仿真毕业设计

基于matlab的2-3卷积码编码译码设计与仿真毕业设计

方向设计报告课程名称:通信工程方向设计设计名称:2/3卷积码编译码器仿真与性能分析方向设计任务书学生班级:学生姓名:学号:设计名称:2/3卷积码编译码器仿真与性能分析起止日期:2011.12.12-2012.1.6指导教师:设计要求:(1)分析2/3卷积码编码器结构;(2)分析2/3卷积码译码的Viterbi算法;(3)基于SIMULINK进行2/3卷积码的纠错性能仿真;方向设计学生日志时间设计内容12.15-12.17 查看题目及设计要求。

12.18-12.23 查阅相关资料,设计方案。

12.23-12.27 编写报告及调试程序。

12.28-12.29 完善修改课程设计报告。

12.30-12.31 答辩。

方向设计考勤表周星期一星期二星期三星期四星期五方向设计评语表指导教师评语:成绩:指导教师:年月日2/3卷积码编译码器仿真与性能分析摘要:卷积码是一种性能优越的信道编码。

它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。

随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。

本文简明地介绍了卷积码的编码原理和Viterbi译码原理。

并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。

最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。

经过仿真和实测,并对测试结果作了分析。

关键词:卷积码编码器、viterbi译码器、SIMULINK目录一设计目的和意义........................................... 错误!未定义书签。

二设计方法................................................. 错误!未定义书签。

三设计原理................................................. 错误!未定义书签。

卷积码编译码的Matlab仿真及其性能研究

卷积码编译码的Matlab仿真及其性能研究

1( ,,) 积 编 码 2 17 卷
(,, 卷 积码 的 k l n 2 N 7 该码 的生 成 多 项 式 为 ( 7 , 3 ) 自由距 离 21 ) 7 = ,= , = , 11 13 , d 1 . 编 码器 结 构 如 图 1所示 。 =0其 该 卷 积 编码 结 构 包 括 6个 移 位 寄 存 器 , 即 m= ,所 以编 码 器 的状 态数 有 6 2 =4 m 6 。设状 态 为 S , 1 … ,6 , 用 十 进制 表 示 , 可 记 为 S i若 用 二 进 制 0S , ¥3若 则 i ; =
1 i tel S O n h w NRf inl t— i t ) o g a O No eRa o. S — s i
Ke y wor s o vouto lc i ;vt r c i ;m a b d :c n l i 出 了一 种 ( ,,) 积 编码 及 其 维特 比 ( tri 译码 的软 件 实现 方案 , Ma a 提 217 卷 Vi b ) e 在 d b环境 中应 用 软件 技 术 实现 了( ,, 卷 积 码 的 217)
V tri i b 译码 器功 能 。 测 试证 明 , V tri 码 算 法在 低 信 噪 比 下 的误 码 率 仍 能 达到 1 一 e 该 i b译 e 0。
关 键 词 : 积 编 码 : 特 比 译 码 ; db 卷 维 Ma a 中 图分 类 号 : TP3 4 1 文 献标 识 码 : A 文 章 编 号 :0 9 3 4 (0 00 — 8 8 0 1 0 — 0 42 1 )4 0 7 — 2
Th i lto n p b l y S u y o n o u i n lCo e En o i g a d De o i g eS mu a i n a d Ca a i t t d fCo v l t a d c d n n c d n i o

卷积码编码(matlab)11

卷积码编码(matlab)11

%************************beginning of file*****************************%cnv_encd.m%卷积码编码程序function output=cnv_encd(G,k0,input)% cnv_encd(G,k0,input),k0 是每一时钟周期输入编码器的 bit 数,% G 是决定输入序列的生成矩阵,它有 n0 行 L*k0 列 n0 是输出 bit 数,% 参数 n0 和 L 由生成矩阵 G 导出,L 是约束长度。

L 之所以叫约束长度% 是因为编码器在每一时刻里输出序列不但与当前输入序列有关,% 而且还与编码器的状态有关,这个状态是由编码器的前(L-1)k0。

% 个输入决定的,通常卷积码表示为(n0,k0,m),m=(L-1)*k0 是编码% 器中的编码存贮个数,也就是分为 L-1 段,每段 k0 个% 有些人将 m=L*k0 定义为约束长度,有的人定义为 m=(L-1)*k0% 查看是否需要补 0,输入 input 必须是 k0 的整数部%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% G 决定输入序列的生成矩阵% k0 每一时钟周期输入编码器的 bit 数% input 输入数据% output 输入数据% eg:% k0=1;% G=[1 0 1 1 0 1 1;1 1 1 1 0 0 1 ];datain=randint(1,90);%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if rem(length(input),k0)>0input=[input,zeros(size(1:k0-rem(length(input),k0)))];endn=length(input)/k0;% 检查生成矩阵 G 的维数是否和 k0 一致if rem(size(G,2),k0)>0error('Error,G is not of the right size.')end% 得到约束长度 L 和输出比特数 n0L=size(G,2)/k0;n0=size(G,1);% 在信息前后加 0,使存贮器归 0,加 0 个数为(L-1)*k0 个u=[zeros(size(1:(L-1)*k0)),input,zeros(size(1:(L-1)*k0))];% 得到 uu 矩阵,它的各列是编码器各个存贮器在各时钟周期的内容u1=u(L*k0:-1:1);%将加 0 后的输入序列按每组 L*k0 个分组,分组是按 k0 比特增加%从 1 到 L*k0 比特为第一组,从 1+k0 到 L*k0+k0 为第二组,。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科生毕业论文(设计)题目:MATLAB实现卷积码编译码专业代码:作者姓名:学号:单位:指导教师:年月日目录前言----------------------------------------------------- 1 1. 纠错码基本理论---------------------------------------- 21.1纠错码基本理论 ----------------------------------------------- 21.1.1纠错码概念 ------------------------------------------------- 21.1.2基本原理和性能参数 ----------------------------------------- 21.2几种常用的纠错码 --------------------------------------------- 62. 卷积码的基本理论-------------------------------------- 82.1卷积码介绍 --------------------------------------------------- 82.1.1卷积码的差错控制原理----------------------------------- 82.2卷积码编码原理 ---------------------------------------------- 102.2.1卷积码解析表示法-------------------------------------- 102.2.2卷积码图形表示法-------------------------------------- 112.3卷积码译码原理---------------------------------------------- 152.3.1卷积码三种译码方式------------------------------------ 152.3.2V ITERBI译码原理---------------------------------------- 163. 卷积码编译码及MATLAB仿真---------------------------- 183.1M ATLAB概述-------------------------------------------------- 183.1.1M ATLAB的特点------------------------------------------ 193.1.2M ATLAB工具箱和内容------------------------------------ 193.2卷积码编码及仿真 -------------------------------------------- 203.2.1编码程序 ---------------------------------------------- 203.3信道传输过程仿真-------------------------------------------- 213.4维特比译码程序及仿真 ---------------------------------------- 223.4.1维特比译码算法解析------------------------------------ 233.4.2V ITERBI译码程序--------------------------------------- 253.4.3 VITERBI译码MATLAB仿真----------------------------------- 283.4.4信噪比对卷积码译码性能的影响 -------------------------- 283.4.5码率对卷积码译码性能的影响 ---------------------------- 303.4.6约束长度对卷积码误码性能的影响------------------------ 313.4.7回溯长度对卷积码误码性能的影响 ------------------------ 323.4.8判决方式对卷积码误码性能的影响------------------------ 324. 结论及展望------------------------------------------ 344.1结论-------------------------------------------------------- 344.2展望 -------------------------------------------------------- 355. 结束语----------------------------------------------- 36参考文献------------------------------------------------ 37致谢---------------------------------------------------- 38附录---------------------------------------------------- 39摘要在数字通信系统中,通常采用差错控制编码来提高系统的可靠性。

自P.Elias 首次提出卷积码编码以来,这一编码技术至今仍显示出强大的生命力。

目前,卷积码已广泛应用在无线通信标准中,如GSM,CDMA2000和IS-95等无线通信标准中。

本文简单介绍了纠错码的基本原理,论述了卷积码编译码原理和算法,并通过matlab仿真对卷积码性能进行研究,重点比较分析了不同码率、不同约束长度、不同回溯长度以及不同译码判决方式对Viterbi译码性能的影响,并得出相关结论。

关键词:卷积码,Viterbi,Matlab,误码率,数字通信系统AbstractIn digital communication systems, error control coding is usually used to improve system reliability. Since P.Elias put forward the convolutional coding the first time, the coding is still showing strong vitality.,has become widely used in satellite communications, wireless communications and many other communication systemsas a kind of channel coding method. such as GSM, CDMA2000 and has been a wireless communication standards of IS-95.This article introduces the basic principles of error-correcting codes, mainly reasearch the principle of the convolutional code encoding and decoding and the algorithms.Through the matlab simulation, we study the performance of convolutional code, especilly the performance of the viterbi decoding with different bit rates, different Constraint length ,different traceback depthe and different decision types,compare and make conclusions.Keywords: convolutional codes, Viterbi, Matlab, bit error rate, the digital communication systemMATLAB实现卷积码编译码前言信道编码是数字通信系统的重要组成部分,随着通信技术的不断发展,信道编码技术也在不断地发展。

在通信系统中,信道传输特性不理想以及噪声的存在,会导致接收端出现接收信号的错误,因此用于信道纠错的信道编码是数字通信系统中极为重要的一个环节。

二十世纪40年代香农定理的出现为人们指出了纠错码的研究方向。

根据香农的有噪信道编码定理,可以推导出一个码率为R 的编码通信系统达到无误码传输状态所必须的最小信噪比的理论极限。

这个理论极限通常称为香农限,它说明对一个码率为R的编码通信系统,只有当SNR超过这个极限值时才能获得无误码传输。

只要SNR高于这个极限值,香农的编码定理保证了能够获得无误码传输的(可能相当复杂)编码通信系统的存在性。

另外,香农证明了在采用无限长的随机编码时,数据可以以接近信道容量的速率几乎无误码的传输,从而为信道编码的研究奠定了基础。

本文主要介绍了信道编码的基本理论,着重研究了卷积码的编码方法和viterbi译码,介绍了MATLAB的使用方法,并编写卷积码的编码和解码程序,通过MATLAB仿真软件对卷积码编解码进行仿真。

重点对viterbi译码进行了研究,该算法就是利用卷积码编码器的格图来计算路径度量,选择从起始时刻到终止时刻的惟一幸存路径作为最大似然路径,沿着最大似然路径回溯到开始时刻,所走过的路径对应的编码输出就是最大似然译码输出序列。

它是一种最大似然译码方法,当编码约束长度不大、或者误码率要求不是很高的情况下,Viterbi译码器设备比较简单,计算速度快,因而Viterbi译码器被广泛应用于各种领域。

1. 纠错码基本理论1.1纠错码基本理论1.1.1纠错码概念纠错码(error correcting code),在传输过程中发生错误后能在收端自行发现或纠正的码。

仅用来发现错误的码一般常称为检错码。

为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。

关系的建立称为编码。

码字到达收端后,可以根据编码规则是否满足以判定有无错误。

当不能满足时,按一定规则确定错误所在位置并予以纠正。

纠错并恢复原码字的过程称为译码。

检错码与其他手段结合使用,可以纠错。

相关文档
最新文档