首页 > 其他分享 >m基于matlab的卷积编码维特比译码误码率仿真

m基于matlab的卷积编码维特比译码误码率仿真

时间:2023-04-12 22:00:58浏览次数:42  
标签:误码率 编码器 维特 卷积 路径 译码 幸存 matlab 卷积码

1.算法仿真效果 matlab2022a仿真结果如下:

1.png

2.算法涉及理论知识概要 随着现代通信的发展,人们对信息传输的可靠性和有效性的要求也越来越高。维特比译码算法被广泛的应用,因此如何提高维特比译码器的性能,降低译码器的功耗和面积是个重要的问题。卷积码是Elias等人在1955年提出的,是一种非常有前途的编码方法,尤其是在其最大似然译码算法-Viterbi译码算法提出之后,卷积码在通信系统中得到了极为广泛的应用。其中约束长度K=7,码率为1/2和1/3的卷积码己经成为商业卫星通信系统中的标准编码方法。在“航海家“以及“先驱者”等太空探测器上也都采用了卷积码作为其差错控制编码方法。在移动通信领域,GMS采用约束长度K=5,码率为1/2的卷积码;在IS-95中,上行链路中采用的是约束长度K=9,码率为1/3的卷积码,在下行链路中采用的是约束长度K=9,码率为1/2的卷积码。特别在第三代移动通信标准中也是以卷积码以及与卷积码相关的编码方法作为差错控制编码方案的。

2.1卷积码编码器

2.png

    一个输入移位寄存器(分为N段,每段k位);n个模2加法器;一个输出数据选择器(n选一)。某一时刻,输入到编码器的k个信息元组成一个信息组,相应的输出序列是由n个码元组成的码段。这里,称N为编码约束度,说明编码过程中互相约束的码段个数。令N=m+1,则m称为编码存储,它表示输入信息组在编码器中需存储的单位时间(有时为了简化,编码器中只用m段的输入移位寄存器)。称Nn为编码约束长度,说明编码过程中互相约束的码元个数,如m=2,n=2,则Nn=6。所以m或N以及Nn都是表示卷积码编码器复杂性的重要参数。 

编码电路:

3.png

2.2维特比译码 卷积编码的过程就是编码器状态沿着时间轴一级一级跳转的过程。维特比译码算法则是在网格图上搜索最可能的状态跳转路径的过程。维特比译码算法先读取t时刻的所有状态的幸存路径度量,再根据t+1时刻的输入,算出跳转路径的度量:根据这两类度量算出t+1时刻到状态S的所有路径的度量,比较选出一个具有较小路径度量的路径作为t+l时刻状态S的幸存路径。这样对每个状态都得到一个幸存路径,根据这些幸存路径和最终编码器所处的状态就可以得到编码器的状态转移路径即译码结果。维特比译码结果的可信度取决于幸存路径的深度和它的路径度量值。幸存路径越深、路径度量值越高,那么译出信息的可信度就越高。在译码过程中有些路径被抛弃了,有些路径被保留了下来。被以为是幸存路径的,也可能会在后面的搜索过程中被抛弃掉。这样随着搜索的深度不断加深,最终正确的路径将会被保留下来,所有的幸存路径都将收敛于一条路径。由上面的描述可知,维特比译码器至少需要完成以下操作:

·t时刻幸存路径度量的存储。

·t时刻到t+l时刻的分支度量的生成。

·t+1时刻幸存路径度量的生成和选择。

    维特比译码器的基本结构正是按照这些操作划分的。前面说过,网格图是理解维特比算法的核心。其核心思想是依次在每个时刻对网格图相应列的每个点(对应于编码器该时刻的状态),按照最大似然准则比较所有以它为终点的的路径,只保留一条具有最大似然值的路径,称之为幸存路径,而将其他路径堵死弃之不用,故到了下一时刻只要对幸存路径延伸出来的路径继续比较即可。即接收一段,计算、比较一段保留下幸存路径,如此反复直到最后。

4.png

  考虑Viterbi译码,假设卷积码的编码存储m只是个位数。在每一帧被接收时,译码器都必须更新状态,对于每一个状态,都有2k0条路径要估算。于是,译码器的计算量大致与成正比,等于。这是能够用此方式解码的码的约束长度的上限。这个限的大小取决于要求达到的比特率和技术水平,但是通常情况下,约束度N取7~9,这些值是目前典型的最大值。更长的约束长度也意味着功能更为强大的码,但只能在合理的码率下用其他技术来译码,例如序贯译码。

3.MATLAB核心程序

%采用BPSK调制
EsN0dB=EbN0dB-10*log10(R);
N0=10.^(-EsN0dB/10);
sigma=sqrt(N0);
plot_EbNo =-1:1:6;
Plot_Pe = [];
Plot_Pe2= [];
x_num=100000;
G=[1 1 1;1 0 1];
 
for k=1:length(N0)
    k
       x = bin_generator(x_num);
       x(find(x < 0)) = 0;
       x(find(x > 0)) = 1;
       
       %卷码编码
       s=encode(G,1,x);
       %BPSK经过AWGN信道
       r=(2*s-1)+sigma(k)*randn(1,length(s));
       r(2:10004)=0.25*r(1:10003)+0.75*r(2:10004);
       r(find(r < 0)) = 0;
       r(find(r > 0)) = 1;
       %译码
       dd=viterbi(G,1,r);
       r=(2*x-1)+sigma(k)*randn(1,length(x));
       r(2:10004)=0.25*r(1:10003)+0.75*r(2:10004);
       r(find(r < 0)) = 0;
       r(find(r > 0)) = 1;
       
       %误码计数
       Pe  = length(find(x - dd))/x_num;
       Pe2 = length(find(x - r))/x_num;
       Plot_Pe = [Plot_Pe Pe];
       Plot_Pe2= [Plot_Pe2 Pe2];
end
 
semilogy(plot_EbNo,Plot_Pe,'-bs',...
    'LineWidth',2,...
    'MarkerSize',8,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.0,0.9,0.0])
hold on
semilogy(plot_EbNo,Plot_Pe2,'-bo',...
    'LineWidth',2,...
    'MarkerSize',8,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0])
grid;
xlabel('Eb/No (dB)')
ylabel('BER')
legend('通过维特比译码','不加编译码');

标签:误码率,编码器,维特,卷积,路径,译码,幸存,matlab,卷积码
From: https://blog.51cto.com/matworld/6186317

相关文章

  • 第二章 MATLAB语言基础
    一、基本概念1、MATALAB主要数据类型 2、整数类型MATLAB中提供了8种内置的整数类型,如下:由于MATLAB中数值的默认存储类型是双精度浮点类型,因此必须通过表2-1中列出的转换函数将双精度浮点数值转换成指定的整数类型。在转换中,MATLAB默认将待转换数值转换为最近......
  • LargeKernel3D:在3D稀疏CNN中使用大卷积核
    前言 2DCNN使用大卷积代替小卷积,增大了卷积核的感受野,捕获到的特征更偏向于全局,效果也得到了提升,这表明较大的kernelsize很重要。但是,当直接在3DCNN中应用大卷积核时,那些在2D中成功的模块设计在3D网络效果不好,例如深度卷积。为了应对这一重要挑战,本文提出了空间分区......
  • MATLAB代码:基于DBSCAN密度聚类的风电-负荷场景削减方法
    MATLAB代码:基于DBSCAN密度聚类的风电-负荷场景削减方法关键词:密度聚类场景削减DBSCAN场景生成与削减kmeans 参考文档:《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第3章:完美复现仿真平台:MATLAB主要内容:代码主要做的是一个基于DBSCAN密度聚类的风电-负荷场景生成与......
  • 基于PSO粒子群算法优化RBF网络的数据预测matlab仿真
    1.算法描述1985年,Powell提出了多变量插值的径向基函数(RBF)方法。径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也可以是到任意一点c的距离,c点称为中心点。任意满足上述特性的函数,都可以叫做径向基函数。一般使用欧氏距离计算距离中心点的距离(欧式径向基函数)。最常用的径向......
  • MATLAB代码:含风光柴储微网多目标优化调度
    MATLAB代码:含风光柴储微网多目标优化调度关键词:微网调度风光柴储 粒子群算法多目标优化仿真平台:MATLAB平台采用粒子群实现求解主要内容:代码构建了含风机、光伏、柴油发电机以及储能电站在内的微网优化运行模型,并且考虑与上级电网的购售电交易,综合考虑了多方经济成本以及风......
  • MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解
    MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解关键词:两阶段鲁棒列约束生成法CCG算法鲁棒优化参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX优势:代码注释详实,适合参考学......
  • MATLAB代码:基于主从博弈的产消者 微网群优化定价模型
    MATLAB代码:基于主从博弈的产消者微网群优化定价模型关键词:主从博弈产消者微网动态定价能量管理仿真平台:matlab主要内容:为了提高用户间光伏电量共享水平,根据用户的用电特性,构建了光伏用户群内的多买方—多卖方格局。结合分布式光伏上网政策,运营商作为主导者,以其收益最......
  • MATLAB代码:基于共享储能电站的工业用户日前优化经济调度
    MATLAB代码:基于共享储能电站的工业用户日前优化经济调度关键词:共享储能储能电站容量优化配置充放电优化日前优化调度  参考文档:《基于共享储能电站的工业用户日前优化经济调度》完全复现仿真平台:MATLAB+CPLEX主要内容:代码主要做的是一个共享储能电站的优化调度问题,考虑......
  • MATLAB代码:储能参与调峰调频联合优化模型
    MATLAB代码:储能参与调峰调频联合优化模型关键词:储能调频调峰充放电优化联合运行 仿真平台:MATLAB+CVX平台主要内容:代码主要做的是考虑储能同时参与调峰以及调频的联合调度模型,现有代码往往仅关注储能在调峰方面的能力,而实际上同时参与调峰调频将超线性的提高储能的收益,在......
  • MATLAB代码:基于粒子群算法的储能优化配置
    MATLAB代码:基于粒子群算法的储能优化配置关键词:储能优化配置粒子群 储能充放电优化主要内容:建立了储能的成本模型,包含运行维护成本以及容量配置成本,然后以该成本函数最小为目标函数,经过粒子群算法求解出其最优运行计划,并通过其运行计划最终确定储能容量配置的大小,求解采用的......