下载此文档

Viterbi译码程序代码.docx


文档分类:IT计算机 | 页数:约30页 举报非法文档有奖
1/30
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/30 下载此文档
文档列表 文档介绍
译码主要部分#include""//#defineDEBUGvoiddeci2bin(intd,intsize,int*b);intbin2deci(int*b,intsize);intnxt_stat(intcurrent_state,intinput,int*memory_contents);voidinit_quantizer(void);voidinit_adaptive_quant(floates_ovr_n0);intsoft_quant(floatchannel_symbol);intsoft_metric(intdata,intguess);intquantizer_table[256];voidsdvd(intg[2][K],floates_ovr_n0,longchannel_length,float*channel_output_vector,int*decoder_output_matrix){ inti,j,l,ll;//循环控制变量 longt;//时间 intmemory_contents[K];//记录输入内容 intinput[TWOTOTHEM][TWOTOTHEM];//对当前状态以及下一个状态映射 intoutput[TWOTOTHEM][2];//卷积码编码输出矩阵 intnextstate[TWOTOTHEM][2];//下一个状态矩阵 um_err_metric[TWOTOTHEM][2];//误差累计矩阵 intstate_history[TWOTOTHEM][K*5+1];//历史状态表 intstate_sequence[K*5+1];//状态序列 int*channel_output_matrix;//信道输出序列 intbinary_output[2]; intbranch_output[2];//0或者1的输出分支 intm,n,number_of_states,depth_of_trellis,step,branch_metric, sh_ptr,sh_col,x,xx,h,hh,next_state,last_stop; n=2;//1/2为卷积码传输数据的码率 m=K-1;//寄存器个数 number_of_states=(int)pow(,m);//状态个数numberofstates=2^(K-1)=2^m depth_of_trellis=K*5; for(i=0;i<number_of_states;i++) { for(j=0;j<number_of_states;j++) input[i][j]=0;//输入数组初始化 for(j=0;j<n;j++) { nextstate[i][j]=0;//下一个状态数组初始化 output[i][j]=0;//输出数组初始化} for(j=0;j<=depth_of_trellis;j++) { state_history[i][j]=0;//历史状态数组初始化state_history[4][16] } accum_err_metric[i][0]=0;//误差累计矩阵第一列初始化为0 accum_err_metric[i][1]=MAXINT;//误差累计矩阵第二列初始化为一个很大的数 } /*前向纠错简称FEC(ForwardErrorCorrection), 其原理是:发送方将要发送的数据附加上一定的冗余纠错码一并发送, 接收方则根据纠错码对数据进行差错检测,如发现差错,由接收方进行纠正*/ /*产生状态转移矩阵、输出矩阵、输入矩阵*/ //输入矩阵表示的是FEC编码传输给下一个状态 //下一个状态由输入和当前状态给出 //输出矩阵 for(j=0;j<number_of_states;j++) { for(l=0;l<n;l++) { next_state=nxt_stat(j,l,memory_contents); input[j][next_state]=l; /*计算给定的卷积编码器输出当前状态数和输入值*/ branch_output[0]=0; branch_output[1]=0; for(i=0;i<K;i++) { branch_output[0]=branch_output[0]^memory_contents[i]&g[0][i]; branch_output[1]=branch_output[1]^memory_contents[i]&g[1][i]; } nextstate[j][l]=next_state;//下一个状态 output[j][l]=bin2deci(branch_output,2);//输出十进制} }#ifdefDEBUG printf

Viterbi译码程序代码 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数30
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xiang1982071
  • 文件大小26 KB
  • 时间2020-08-10