精华内容
下载资源
问答
  • MATLAB卷积码
    2022-04-02 20:12:03

    poly2trellis

    poly2trellis由卷积码的生成多项式产生trellis图,它的输出主要取决于函数convenc和vitdec的输入。

    前向反馈卷积码:trellis = poly2trellis(7,[171,133]);

    convenc是卷积码的编码函数:

    1.code = convenc(msg,trellis);

    2.code = convenc(msg,trellis,puncpat);

    注释:

    puncpat参数的意思:用于指定打孔方式已获得更高的码率。

    puncpat是由1或者0组成的向量,其中0的位置为打孔比特,puncpat的长度至少有log2(trellis.numOutputSymbols)个比特。 有个三个输出的trellis,每个输出有两个取值(0或者1)所以trellis.numOutputSymbols=2^3=8

    函数vitdec

    函数vitdec 采用Viterbi算法对卷积码进行译码。

    decode = vitdec(code,trellis,tblen,opmode,dectype);

    tblen是一个正整数参数,指定回溯深度,如果码率为1/2,tblen的一个典型值是约束长度的5倍。

    字符串opmode指定译码器的操作模式和相应的编码器的假设,他有三个选择:

    1.‘cont’:认为编码器从零状态开始编码,编码器从最佳路径回溯,有tblen的延迟。

    2.‘term’:认为编码器从零状态开始,并且结束于零状态。

    3.‘trunc’:认为编码器从零状态开始编码。该模式没有延迟。

    字符串dectype指定译码器的判决类型,并影响译码器code的数据类型。

    1.‘unquant’:code包含实输入,其中1表示逻辑0,-1标示逻辑1.

    2.'hard':code为二进制输入。

    3.‘soft’:有限比特量化软判决译码,软判决译码需要参数nsdec.

    decode = vitdec(code,trellis,tblen,opmode,'soft',nsdec);对向量code进行软判决译码。code为从0到2^nsdec-1的整数,其中0表示0,2^nsdec-1表示1.

    decode = vitdec(code,trellis,tblen,opmode,dectype,puncpat);表示code是打孔的,参数puncpat是打孔类型向量,其中0表示输入编码结果中打孔的比特。

    更多相关内容
  • 312卷积码编码与213卷积码编码,各自的matlab代码。卷积码编码程序使用状态机思路来编码,文件夹里除了两个.m文件,也包含了它们的状态与网格
  • 基于MATLAB实现的(2
  • 卷积码matlab仿真

    2016-04-28 13:27:07
    采用matlab仿真了卷积编码在BPSK调制下通过AWGN信道是的性能分析。包含不同参数下卷积码的误码率曲线比较,包括'未使用编码'与'使用卷积编码'的比较,不同回溯长度、不同码率、不同约束长度的误码率曲线
  • matlab卷积码程序

    2017-07-24 08:44:04
    matlab生成卷积码,在编码仿真中使用,
  • 卷积码的BCJR算法以及EXIT分析代码。用于学习原理使用
  • matlab实现的(2,1,3)卷积码编译码程序,译码使用维特比译码,欢迎大家下载
  • 卷积码编译码matlab仿真.zip
  • (3)的效率:k/n(4)编码前,k(K-1)个寄存器单元全部复位清零。(5)由于一段消息不仅影响当前段的编码输出,还影响其后m段的编码输出,所以称参量K=m+1为卷积吗的约束比特长度为K*n·==。(6)注意进入卷积编码器的最后...

    (2) 通常称K为约束长度(一般来说,约束长度越大,则码字纠错 性能越好)。

    (3) 码的效率:k/n

    (4) 编码前,k(K-1)个寄存器单元全部复位清零。

    (5) 由于一段消息不仅影响当前段的编码输出,还影响其后m段的 编码输出,所以称参量K=m+1为卷积吗的约束比特长度为 K*n·==。

    (6)注意进入卷积编码器的最后m段消息仍是要编码输出的消息,对这最后m段消息的编码处理,称作卷积编码的结尾处理。一种常见的结尾处理方法是额外输入m段无效的0数据比特,一方面将存储的m段消息编码全部推出,另一方面保证编码器回到全0的初态。

    function [out_put,out_G,out_k0] = convolution(baseband_out)

    G = [1,0,1,1;1,1,1,1]; % Generation Matrix G of CC(卷积编码器)

    k0 = 1; % Number of bits was input into CC

    input = baseband_out; % input data

    %查看是否需要补0,输入input必须是k0的整数倍

    if rem(length(input),k0) 》 0 % whether add 0

    input=[input,zeros(size(1:k0 - rem(length(input),k0)))];

    end

    n=length(input) / k0; %% 把输入比特按k0分组,n为所得的组数。

    %检查生成矩阵G的维数是否和k0一致

    if rem(size(G,1),k0) 》 0 % check the row of G whether identical to k0 %size(A, dim)dim=1表示取矩阵的行数,dim=2表示取矩阵A的列数。

    error(‘Error,G is not of the right size.’)

    end

    %得到约束长度K和输出比特数n0

    K=size(G,2) / k0; % restrict length

    n0=size(G,1); % ouput length

    %在信息前后加0,使存贮器归0,加0个数为(K-1)*k0个

    u=[zeros(size(1:(K - 1) * k0)),input,zeros(size(1:(K - 1) * k0))]; % add 0 2(K-1)*k0个以保证编码器是从全0开始,并回到全0状态。

    u1=u(K * k0:-1:1); % UU matrix

    %将加0后的输入序列按每组K*k0个分组,分组是按k0比特增加

    %从1到K*k0比特为第一组,从1+k0到K*k0+k0为第二组,。。。。,

    %并将分组按倒序排列。

    for i=1:n + K - 2 % Grouping 加零以后总共组数

    u1=[u1,u((i + K) * k0:-1:i * k0 + 1)]; % Grouping

    end

    uu=reshape(u1,K * k0,n + K - 1); % generate uu, a matrix whose columns are the contents of %生成一列是一组共n+K-1(列)组

    % conv. encoder at various clock cycles.

    out_put = reshape(rem(G * uu,2),1,n0 * (K + n - 1)); % % determine the output %rem(G * uu,2)相当与对矩阵的摩尔运算转化成二进制数%

    out_G = G;

    out_k0 = k0;

    % % write the output to the encodetext

    % result = fopen(encodetext, ‘w’);

    % for i = 1:n0*(L+n -1)

    % fwrite(result, output(i), ‘bit1’);

    % end

    % fclose(result)

    MATLAB实现

    function coded_bits = tx_conv_encoder(in_bits, ConvCodeGenPoly)

    % 卷积编码

    % in_bits: 输入未经编码的信息比特

    % ConvCodeGenPoly: 卷积编码的生成多项式

    % coded_bits: 编码后的比特

    number_rows = size(ConvCodeGenPoly, 1); % 编码输出的路数n

    number_bits = size(ConvCodeGenPoly, 2) + length(in_bits) - 1; %编码输出单路的比特数

    coded_bits = zeros(number_rows, number_bits);

    for row = 1:number_rows

    coded_bits(row, :) = rem(conv(in_bits, ConvCodeGenPoly(row, :)), 2);

    end

    %多路输出并成一路(并转串)

    coded_bits = coded_bits(:);

    这里将卷积编码封装成了一个函数,可以在调用时才确定生成多项式,对于上面给的情况,matlab调用代码如下:

    ConvCodeGenPoly = [1 0 1 1 0 1 1;1 1 1 1 0 0 1]; % 生成多项式:133和171

    uncoded_bits = [1 0 1 0];

    coded_bits = tx_conv_encoder(uncoded_bits, ConvCodeGenPoly);

    结语

    关于卷积码编码译码程序仿真程序的介绍就到这了,如有不足之处欢迎指正。

    展开全文
  • matlab下使用bsc信道仿真2/3码率的卷积码的误码率的代码。
  • 进行卷积编码和viterbi译码,其中加入了BPSK调制并通过AGWN信道。测试了在有编码情况和无编码情况下的误码率。
  • Matlab卷积码译码器的误码率分析
  • MATLAB中图分类号 TN911 文献标识码 A 文章编号 1673-9671-(2012)071-0104-021 卷积码简介1.1 卷积码的编码卷积码编码器的一般形式如下所示,包括一个由N段组成的输入移位寄存器,每段有K级,...

    摘?要 本论文介绍了卷积码的概念和编译码原理,介绍了卷积码的部分并利用Systemview软件将卷积码实现。仿真运行后参考纠错理论对波形图进行分析。  关键词 卷积码;MATLAB

    中图分类号 TN911 文献标识码 A 文章编号 1673-9671-(2012)071-0104-02

    1 卷积码简介

    1.1 卷积码的编码

    卷积码编码器的一般形式如下图所示,包括一个由N段组成的输入移位寄存器,每段有K级,共N×k位寄存器;一组n个模2和相加器;一个n级输出移位寄存器。对应于每段K个比特的输入序列,输出n个比特。

    图1 卷积码编码器的一般情况

    上图为(n,k,N)卷积码编码器的一般结构。它由移入移位寄存器、模2加法器、输出移位寄存器3部分构成。输入移位寄存器共有N段,每段有k级,共有N*K位寄存器,信息序列由此不断输入。输入端的信息序列进入这种结构的输入移位寄存器即被自动划分为N段,每段k位,它使输出的n个比特的卷积码与N段每段有k为的信息位相关联。通常把N称为约束长度。由于该N段信息共有N*K个信息比特,所以也称N*K为约束长度;一组模2加法器共有n个,它实现卷积码的编码算法;输出移位寄存器,共有n级,输入移位寄存器每移入k位,就输出n个比特的编码。所以编码效率为。

    1.2 卷积码的译码

    译码器的功能就是要根据某种法则以尽可能低的错误概率对编码输入信息作出估计。卷积码译码通常是按最大似然法则译码,对二进制对称信道来说,它就等效于最小汉明距离译码。在这种译码器中,把接收序列和所有可能发送序列进行比较,选择一个汉明距最小的序列判作发送序列。由于信息序列、编码序列有着一一对应的关系,而这种关系又唯一对应网格图的一条路径。因此译码就是根据接收序列R在网格图上全力搜索编码器在编码时所经过的路径,即寻找与R有最小汉明距离的路径。最大似然译码在实际应用中遇到的问题是当2M很大时,计算量是很大的,这是困难所在。

    Viterbit译码是基于最大似然法则的最重要的卷积码译码方法。但它不是一次计算和比较2M条路径,而是采用逐步比较的方法来逼近发送序列的路径。所谓逐步比较就是把接收序列的第i个分支码字和网格图上相应两个时刻ti和ti+1之间的各支路作比较,即和编码器在此期间可能输出的分支码字作比较,计算和记录它们的汉明距,同时把它们分别累加到ti时刻之前的各支路累加的汉明距上。比较累加结果并进行选择,保留汉明距离最小的一条路径,其余的被删除。所以ti+1时刻进入每个节点的路径只有一条,且均为幸存支路。这一过程直到接收序列的分支码字全部处理完毕,具有最小汉明距的路径即判决为发送序列。

    下面主要介绍Viterbi译码原理及其仿真设计。

    Viterbi译码算法流程图如图2所示。

    图2 Viterbi译码算法处理流程

    2 维特比译码器的仿真

    2.1 仿真框图

    为了验证译码模块的正确性,便让其进行最简模式运行,为此,临时设计一个简化信号系统,关闭信道噪声,不进行二进制相位的调制与解调,去掉误比特率统计模块。

    图3 译码模块框图

    2.2 误码率分析

    编制文件convolutionh.m,使convh.mdl在不同的信噪比条件下重复执行前面建立的项目convh.mdl。然后绘制信道的信噪比与编码信号误比特率之间的关系曲线图。

    function [f,k]=conv_m(f1,k1,f2,k2)

    p=input("p=");

    f=conv(f1,f2); %计算序列f1与f2的卷积和f

    f=f*p;

    k0=k1(1)+k2(1); %计算序列f非零样值的起点位置

    k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度

    k=k0:p:k3*p; %确定卷积和f非零样值的时间向量

    subplot(2,2,1)

    plot(k1,f1) %在子图1绘f1(t)时域波形图

    title("f1(t)")

    xlabel("t")

    ylabel("f1(t)")

    subplot(2,2,2)

    plot(k,f); %画卷积f(t)的时域波形

    h=get(gca,"position");

    h(3)=2.5*h(3);

    set(gca,"position",h) %将第三个子图的横坐标范围扩为原来的2.5倍

    title("f(t)=f1(t)*f2(t)")

    xlabel("t")

    ylabel(‘f(t)’)

    3 结束语

    本论文介绍了卷积码的基本知识。包括卷积码的编码,以Viterbi为例介绍了卷积码的译码原理及其MATLAB的仿真实现。使其更好的、更直观的掌握关于卷积码的译码原理。

    参考文献

    [1]周炯磐.通信原理[J].北京:北京邮电出版社.

    [2]赵静.基于MATLAB的通信系统仿真[J].北京航空航天大学出版社.

    作者信息

    安妮,助教,德州职业技术学院。

    图4 convolutionh.m运行结果

    展开全文
  • 卷积码MATLAB仿真设计.pdf
  • MATLAB实现卷积码编译码。包含viterbi仿真还有一些编码以及译码的基本知识。
  • RS码与卷积码的级联码 可以在matlab上面正常运行
  • 卷积码MATLAB程序-conv_coding.m 卷积码MATLAB程序
  • 基于MATLAB卷积码硬判决及软判决仿真.pdf
  • 卷积码MatLab仿真

    2015-04-01 15:53:00
    卷积码 matlab源代码 你值得拥有 是真正的源代码 俺们不带玩弄假的
  • 卷积码的编译码MATLAB程序》由会员分享,可在线阅读,更多相关《卷积码的编译码MATLAB程序(5页珍藏版)》请在人人文库网上搜索。1、survivor state是一个矩阵,它显T了通过网格的最优路径,这个矩阵通过一个单独的...

    《卷积码的编译码MATLAB程序》由会员分享,可在线阅读,更多相关《卷积码的编译码MATLAB程序(5页珍藏版)》请在人人文库网上搜索。

    1、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)fig。

    2、ure;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(。

    3、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。即得到输出端口,即2个模2加法器%检验G的维数if rem(size(G,2),k)=0 %当矩阵G的列数不为k的整数倍时,rem为求余函数error(Size of G a。

    4、nd k do not agree)%报错endif rem(size(channel_output,2),n)=0 %当输出矩阵的列数不是输出端口n的整数倍时。(注:size(channel_output,2)=26,2个模2加法器合成的输出)error(channle output not of the right size)endL=size(G,2)/k;%得出移位数,即寄存器个数,此例程为7%由于L-1个寄存器的状态即可表示出输出状态,所以总的状态数number_of_states可由前L-1个寄存器的状态组合来确定number_of_states=2(L-1)*k);%此例程中26。

    5、,移位寄存器组的状态数为64个%产生状态转移矩阵,输出矩阵和输入矩阵for j=0:number_of_states-1 %表示当前寄存器组的状态。因状态从0开始,所以循环为从0到number_of_states-1for t=0:2k-1 %k位输入端的信号组成的状态,总的状态数为2k,所以循环为从0到2k-1next_state,memory_contents=nxt_stat(j,t,L,k);%nxt_stat完成从当前的状态和输入的矢量得出下寄存器组的一个状态input(j+1,next_state+1)=t;%input数组值是用于记录当前状态到下一个状态所要的输入信号矢量%inp。

    6、ut数组的维数:一维坐标x=j+1指当前状态的值,二维坐标y=next_state+1指下一个状态的值%由于Matlab中数组的下标是从1开始的,而状态值是从0开始的,所以以上坐标值为:状态值+1branch_output=rem(memory_contents*G,2);%branch_output用于记录在状态j下输入1时的输出nextstate(j+1,t+1)=next_state;%nextstate状态转移矩阵,记录了当前状态j下输入1时的下一个状态output(j+1,t+1)=bin2deci(branch_output);%output记录了当前状态j下输入1时的输出(十进制。

    7、)endendinput;state_metric=zeros(number_of_states,2);%state_metric数组用于记录译码过程在每个状态时的汉明距离,大小为number_of_states,2%(:,1)为当前状态位置的汉明距离,为确定值;(:,2)为当前状态加输入得到的下一个状态汉明距离,为临时值depth_of_trellis=length(channel_output)/n;%depth_of_trellis用于记录网格图的深度channel_output_matrix=reshape(channel_output,n,depth_of_trellis);%cha。

    8、nnel_output_matrix为输出矩阵,每一列为一个输出状态%reshape改变原矩阵形状,将channel_output矩阵变为n行depth_of_trellis列矩阵survivor_state=zeros(number_of_states,depth_of_trellis+1);%survivor_state描述译码过程中在网格图中的路径row_survivor col_survivor=size(survivor_state);%开始非尾信道输出的解码%i为段,j为何一阶段的状态,t为输入for i=1:depth_of_trellis-L+1 %i指示网格图的深度flag=。

    9、zeros(1,number_of_states);%flag矩阵用于记录网格图中的某一列是否被访问过if istate_metric(j+1,1)+branch_metric)|flag(nextstate(j+1,t+1)+1)=0)state_metric(nextstate(j+1,t+1)+1,2)=state_metric(j+1,1)+branch_metric;%下一状态的汉明距离(临时值)=当前状态的汉明距离(确定值)+码间距离survivor_state(nextstate(j+1,t+1)+1,i+1)=j;%survivor_state数组的一维坐标为下一个状态值,二维。

    10、坐标为此状态%在网格图中的列位置,记录的数值为当前状态,这样就可以从网格中某位置的%某个状态得出其对应上一个列位置的状态,从而能很方便的完成译码过程。flag(nextstate(j+1,t+1)+1)=1;%指示该状态已被访问过endendendstate_metric=state_metric(:,2:-1:1);%移动state_metric,将临时值移为确定值end%开始尾信道输出的解码for i=depth_of_trellis-L+2:depth_of_trellisflag=zeros(1,number_of_states);%状态数从number_of_statesnumber。

    11、_of_states/221%程序说明同上,只不过输入矢量只为0last_stop=number_of_states/(2(i-depth_of_trellis+L-2)*k);for j=0:last_stop-1branch_metric=0;binary_output=deci2bin(output(j+1,1),n);for tt=1:nbranch_metric=branch_metric+metric(channel_output_matrix(tt,i),binary_output(tt);endif (state_metric(nextstate(j+1,1)+1,2)stat。

    12、e_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的最后一个位置逐级向前译码%由段得到状态序列,再。

    13、由状序列从input矩阵中得到该段的输出%数组survivor_state的最后的输出状态肯定为“0”state_sequence=zeros(1,depth_of_trellis+1);size(state_sequence);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_tr。

    14、ellis+2-i)+1),depth_of_trellis-i+2);%由后向前endstate_sequence;decoder_output_matrix=zeros(k,depth_of_trellis-L+1);for i=1:depth_of_trellis-L+1dec_output_deci=input(state_sequence(1,i)+1,state_sequence(1,i+1)+1);%根据数组input的定义来得出从当前状态到下一个状态的输入信号矢量dec_output_bin=deci2bin(dec_output_deci,k);%转换成2进制信号decode。

    15、r_output_matrix(:,i)=dec_output_bin(k:-1:1);%将每一次译码存入译码输出矩阵decoder_output_matrix相应的位置enddecoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-L+1);%按照一维序列形式重新组织输出cumulated_metric=state_metric(1,1);%state_metric为网格图最后一个列位置中“0”状态位置的汉明距离,此值就是整个译码过程中的汉明距离%卷积码的维特比译码函数figure;plot(decoder_output,*r) %还原出的输入信号。

    展开全文
  • 卷积码matlab实现之ploy2trellis函数

    千次阅读 2021-09-17 16:47:11
    卷积码matlab实现之ploy2trellis函数 trellis = poly2trellis(ConstraintLength,CodeGenerator); ploy2treliis 顾名思义:多项式ploy到网格trellis 卷积码的生成多项式可以由一系列多项式描述,我们将多项式转化为...
  • MATLAB实现卷积码编译码-本科生毕业论文(设计)题 目:作者姓名:学 号:单 位:指导教师:年 月 日目 录前言11. 纠错码基本理论21.1纠错码基本理论21.1.1纠错码概念21.1.2基本原理和性能参数21.2几种常用的纠错码62....
  • 卷积码的编解码matlab仿真.doc 卷积码的编解码MATLAB仿真摘要卷积码是一种性能优越的信道编码。它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用...
  • 卷积码Matlab仿真及其性能研究.pdf
  • 卷积matlab代码

    2014-12-11 15:16:50
    数字信号处理实习的卷积matlab程序代码
  • 卷积码MATLAB程序

    2018-12-26 19:42:39
    卷积码的编译码程序。卷积码是一种性能优越的信道编码。(n ,k ,N) 表示把 k 个信息比特编成 n 个比特,N 为编码约束长度,说明编码过程中互相约束的码段个数。卷积码编码后的 n 个码元不仅与当前组的 k 个信息比特...
  • 仿真过程利用MATLAB和Simulink模块完成对卷积码的编码和译码的实现,以及误比特统计整个过程的仿真结果。通过对卷积码在不同信道中传输的性能来验证是否用于可靠的信息传输,在仿真过程中分别改变卷积码的主要参数来...
  • 本人利用MATLAB软件对卷积码进行了编码与译码的仿真,最后输出了误码率的改变结果比较。
  • 关注公号【逆向通信猿】更精彩!!! 原理 编码电路 ( n , k , m ) (n,k,m) (n,k,
  • 卷积码的编译码原理与MATLAB实现

    千次阅读 2020-12-20 19:38:40
    卷积码的编译码原理 \qquad卷积码又称为连环码,它和分组码有明显的区别。(n,k)线性分组码中,本组r = n-k个监督元仅与本组k个信息元有关,与其他各组无关,即...(2,1,2)卷积码的编码器如下所示: \qquad起始状态,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,093
精华内容 837
关键字:

卷积码matlab图

matlab 订阅