卷积编码和viterbi译码,调制方式为qpsk的matlab程序

  • b0_257278
    了解作者
  • matlab
    开发工具
  • 4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 1
    下载次数
  • 2022-02-21 17:26
    上传日期
卷积编码和viterbi译码,调制方式为qpsk的matlab程序
卷积编码和viterbi译码,调制方式为qpsk的matlab程序
  • viterbi_qpsk
  • viter_qpsk.asv
    1.4KB
  • viterbidec.m
    4.5KB
  • viter_qpsk.m
    1.5KB
  • hamm_dist.m
    189B
  • convencoderdec.m
    2KB
内容介绍
%硬判决 Viterbi 译码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %当输入rcvd卷积码编码序列后,经过biterbi译码,输出dec_op %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dec_op]=viterbidec(rcvd) %Concatenate two consecutive bits of recieved encoded sequence to %构造标记 input=[]; for j=1:2:length(rcvd) input=[ input (rcvd(j))* 2 + (rcvd(j+1))]; end %数组初始化 op_table=[00 00 11; 01 11 00; 10 10 01; 11 01 10]; %输出数组 ns_table=[0 0 2; 1 0 2; 2 1 3; 3 1 3]; %下一状态数组 transition_table=[0 1 1 55; 0 0 1 1; 55 0 55 1; 55 0 55 1]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 数组更新部分 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% st_hist(1:4, 1:17)=55; %历史状态数组 aem=zeros(4, 17); %累计路径长度数组 ssq=zeros(1, 17); %构造连续状态数组 lim=length(input); %时钟循环数量 for (t=0:1:lim) %时钟循环 if(t==0) st_hist(1,1)=0; %开始状态为00 else temp_state=[];%存储中间状态的数组 temp_metric=[];%存储可能的状态的长度的数组 temp_parent=[];%存储上一状态的数组 for (i=1:1:4) in=input(t); if(st_hist(i, t)==55) %如果是无效状态,无变化 else ns_a=ns_table(i, 2)+1; %下一个状态 state-1 ns_b=ns_table(i, 3)+1; %下一个状态 state-2 op_a=op_table(i, 2); %下一个输出 output-1 op_b=op_table(i, 3); %下一个输出 output-2 cs=i-1; %当前状态 M_a=hamm_dist(in, op_a); %对ns_a各个分支进行度量 M_b=hamm_dist(in, op_b); %对ns_b各个分支进行度量 indicator=0; %指示多余状态的标记 for k=1:1:length(temp_state) %检查下一个多余的状态 %如果下一个可能的状态 state-1是多余的 if(temp_state(1,k)==ns_a) indicator=1; %ADD-COMPARE-SELECT Operation %em_c: 当前状态的度量长度 %em_r: 多余状态的度量 em_c=M_a + aem(i,t); em_r=temp_metric(1,k) + aem(temp_parent(1, k)+1,t); if( em_c< em_r)%比较连个路径的长度 st_hist(ns_a,t+1)=cs;%选择长度小的路径 temp_metric(1,k)=M_a; temp_parent(1,k)=cs; end end %如果下一个可能的状态state-2是多余的 if(temp_state(1,k)==ns_b) indicator=1; em_c=M_b + aem(i,t); em_r=temp_metric(1,k) + aem(temp_parent(1, k)+1,t); if( em_c < em_r)%比较两个分支长度 st_hist(ns_b,t+1)=cs;%选择长度小的路径 temp_metric(1,k)=M_b; temp_parent(1,k)=cs; end end end %如果两可能的状态都非多余 if(indicator~=1) %更新历史状态组 st_hist(ns_a,t+1)=cs; st_hist(ns_b,t+1)=cs; %更新中间矢量 temp_parent=[temp_parent cs cs]; temp_state=[temp_state ns_a ns_b]; temp_metric=[temp_metric M_a, M_b]; end %打印中间变量 temp_parent; temp_state; temp_metric; end end %更新所有路径的累计长度 %现在的瞬时时刻 't' for h=1:1:length(temp_state) xx1=temp_state(1, h); xx2=temp_parent(1, h)+1; aem(xx1, t+1)=temp_metric(1, h) + aem(xx2, t); end end end %结束循环 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 路径反馈部分 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for(t=0:1:lim) slm=min(aem(:, t+1)); slm_loc=find( aem(:, t+1)==slm ); sseq(t+1)=slm_loc(1)-1; end dec_op=[]; for p=1:1:length(sseq)-1 dec_op=[dec_op, transition_table((sseq(p)+1), (sseq(p+1)+1))]; end
评论
    相关推荐
    • Matlab合集
      冈萨雷斯数字图像处理MATLAB版.中文版+数字图像处理第二版中文版(冈萨雷斯)+MATLAB-R2014a完全自学一本通+MATLAB R2016a完全自学一本通 素材文件+[模式识别与智能计算:MATLAB技术实现(第2版)].杨淑莹.扫描版
    • MATLAB教程
      MATLAB教程MATLAB教程MATLAB教程MATLAB教程MATLAB教程MATLAB教程
    • MATLAB
      MATLAB 该项目是在matlab上完成的,涉及创建和移动宇宙飞船和机器人。 太空飞船和机器人是使用Matlab中的简单几何形状创建的,并通过连续变换矩阵进行移动。 这个项目教我如何使用变换矩阵(旋转,平移等)的概念...
    • MATLAB基础
      一本学习matlab的一本好书
    • MATLAB编译器
      基于MATLAB 2018b版本介绍MATLAB编译器。介绍如何利用编译器将MATLAB代码编译为独立应用程序或组件,并在没有安装MATLAB的计算机上进行部署。
    • matlabruntime
      通过奇点容器运行您的matlab项目 可以在没有MATLAB的容器中运行matlab代码。 为此,我们首先需要通过Matlab编译器在本地构建相应的Matlab代码的独立应用程序,然后使用具有Matlab运行时( 的容器)运行该应用程序 )...
    • matlab实现
      matlab实现 matlab实现matlab实现matlab实现matlab实现
    • matlab 教程
      matlab 信号处理资料,里面包含信号处理pdf文档,一些杂乱的程序和命令等
    • matlab教程
      matlab教程,PPT格式,包含 matlab基本知识、matlab入门、matlab作图、线性规划、无约束优化、非线性规划、统计工具箱、差值、微分方程等多项知识点,并且每个知识点独立成为PPT,内还含有matlab信号处理详解等文档...
    • matlab简介
      1.MATLAB 开发环境 1.1 MATLAB 的视窗环境 进入MATLAB之后,会看到一个视窗MATLAB Command Window称为指令视窗,它是你键入指令的地方同时 MATLAB也将计算结果显示在此。 1.2 简易计算 我们先从MATLAB的...