卷积码编码和维特比译码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(u=N;u>0;u--) /*向前递归的找出最大似然路径*/
{
*(viterbioutput+(u-1))=g->value;
g=g->last;
}
/* for(u=0;u<8;u++)
*(viterbioutput+u)=state[u][2].met; */ /*此行程序可用于检测第n列的
for(i=0;i<n; i++)
printf("%2d",encodeinput[i]);
printf("\n");
printf("the output of encoder is :\n"); //编码之后产生的卷积码
for(i=0;i<(n+2)*2;i++)
}
viterbi(0,viterbiinput,output);
}
void main()
{
unsigned int
encodeinput[100],wrong[10]={0,0,0,0,0,0,0,0,0,0},encodeoutput[100];
int n=5,i,m,j=0,decodeinput[100],decodeoutput[100];
卷积码编码维特比译码实验设计报告
SUN
一、实验目的
掌握卷积码编码和维特比译码的基本原理,利用了卷积码的特性,运用网格图和回溯以得到译码输出。
ห้องสมุดไป่ตู้二、实验原理
1.卷积码是由连续输入的信息序列得到连续输出的已编码序列。其编码器将k个信息码元编为n个码元时,这n个码元不仅与当前段的k个信息有关,而且与前面的 (m-1)段信息有关(m为编码的约束长度)。
2.一般地,最小距离d表明了卷积码在连续m段以内的距离特性,该码可以在m个连续码流内纠正(d-1)/2个错误。卷积码的纠错能力不仅与约束长度有关,还与采用的译码方式有关。
3.维特比译码算法基本原理是将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送序列。卷积码的Viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程,并可以纠正接收码字中的错误比特。
et=0;
for(l=0;l<4;l++)
{
state[l][0].met=trandistance(*viterbiinput,initialstate,l);
state[l][0].value=traninput(initialstate,l);
state[l][0].last=NULL;
}
viterbiinput++; /*扩展第一步幸存路径*/
for(q=0;q<4;q++)
{
if(state[q][t-1].met+trandistance(*viterbiinput,q,p)<state[p][t].met)
{state[p][t].met=state[q][t-1].met+trandistance(*viterbiinput,q,p);
state[p][t].value=traninput(q,p);
state[p][t].last=&state[q][t-1];
}
}
}
viterbiinput++;
} /*计算出剩余的幸存路径*/
r=state[0][N-1].met; /*找出n步后度量值最小的状态准备回溯路由*/
g=&state[0][N-1];
randomize();
for(i=0; i<n; i++)
encodeinput[i]=rand()%2;
encodeinput[n]= encodeinput[n+1]=0;
encode(encodeoutput,encodeinput,n+2,0);
printf("the input of encoder is :\n"); //信息源输入的信息码(随机产生)
度量值*/
}
void decode(unsigned int *input, int *output,int n)
{
int viterbiinput[100];
int j;
for(j=0;j<n+2;j++)
{
viterbiinput[j]=(input[j*2]<<1)|input[j*2+1];
5.卷积码的viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程 并可以纠正接收码字中的错误比特。
三、实验代码
#include<>
#include ""
#define N 7
#include ""
#include <>
#include<>
#define randomize() srand((unsigned)time(NULL))
encode(
unsigned int *symbols, /*编码输出*/
unsigned int *data, /*编码输入*/
unsigned int nbytes, /*nbytes=n/16,n为实际输入码字的数目*/
unsigned int startstate /*定义初始化状态*/
)
4.所谓“最佳”,是指最大后验条件概率:P( C/ R) = max [ P ( Cj/ R) ] ,一般来说,信道模型并不使用后验条件概率,因此利用Beyes公式、根据信道特性出结论:max[ P ( Cj/ R) ]与max[ P ( R/ Cj) ]等价。考虑到在系统实现中往往采用对数形式的运算,以求降低运算量,并且为求运算值为整数加入了修正因子a1、a2。令M ( R/ Cj) = log[ P ( R/ Cj) ] =Σa1 (log[ P( Rm/ Cmj ) ] + a2)。其中, M是组成序列的码字的个数。因此寻找最佳路径,就变成寻找最大M( R/ Cj) , M( R/ Cj)称为Cj的分支路径量度,含义为发送Cj而接收码元为R的似然度。
for(t=1;t<N;t++)
{
for(p=0;p<4;p++)
{
state[p][t].met=state[0][t-1].met+trandistance(*viterbiinput,0,p);
state[p][t].value=traninput(0,p);
state[p][t].last=&state[0][t-1];
{
*(viterbioutput+(u-1))=g->value;
g=g->last;
}
/* for(u=0;u<8;u++)
*(viterbioutput+u)=state[u][2].met; */ /*此行程序可用于检测第n列的
for(i=0;i<n; i++)
printf("%2d",encodeinput[i]);
printf("\n");
printf("the output of encoder is :\n"); //编码之后产生的卷积码
for(i=0;i<(n+2)*2;i++)
}
viterbi(0,viterbiinput,output);
}
void main()
{
unsigned int
encodeinput[100],wrong[10]={0,0,0,0,0,0,0,0,0,0},encodeoutput[100];
int n=5,i,m,j=0,decodeinput[100],decodeoutput[100];
卷积码编码维特比译码实验设计报告
SUN
一、实验目的
掌握卷积码编码和维特比译码的基本原理,利用了卷积码的特性,运用网格图和回溯以得到译码输出。
ห้องสมุดไป่ตู้二、实验原理
1.卷积码是由连续输入的信息序列得到连续输出的已编码序列。其编码器将k个信息码元编为n个码元时,这n个码元不仅与当前段的k个信息有关,而且与前面的 (m-1)段信息有关(m为编码的约束长度)。
2.一般地,最小距离d表明了卷积码在连续m段以内的距离特性,该码可以在m个连续码流内纠正(d-1)/2个错误。卷积码的纠错能力不仅与约束长度有关,还与采用的译码方式有关。
3.维特比译码算法基本原理是将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送序列。卷积码的Viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程,并可以纠正接收码字中的错误比特。
et=0;
for(l=0;l<4;l++)
{
state[l][0].met=trandistance(*viterbiinput,initialstate,l);
state[l][0].value=traninput(initialstate,l);
state[l][0].last=NULL;
}
viterbiinput++; /*扩展第一步幸存路径*/
for(q=0;q<4;q++)
{
if(state[q][t-1].met+trandistance(*viterbiinput,q,p)<state[p][t].met)
{state[p][t].met=state[q][t-1].met+trandistance(*viterbiinput,q,p);
state[p][t].value=traninput(q,p);
state[p][t].last=&state[q][t-1];
}
}
}
viterbiinput++;
} /*计算出剩余的幸存路径*/
r=state[0][N-1].met; /*找出n步后度量值最小的状态准备回溯路由*/
g=&state[0][N-1];
randomize();
for(i=0; i<n; i++)
encodeinput[i]=rand()%2;
encodeinput[n]= encodeinput[n+1]=0;
encode(encodeoutput,encodeinput,n+2,0);
printf("the input of encoder is :\n"); //信息源输入的信息码(随机产生)
度量值*/
}
void decode(unsigned int *input, int *output,int n)
{
int viterbiinput[100];
int j;
for(j=0;j<n+2;j++)
{
viterbiinput[j]=(input[j*2]<<1)|input[j*2+1];
5.卷积码的viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程 并可以纠正接收码字中的错误比特。
三、实验代码
#include<>
#include ""
#define N 7
#include ""
#include <>
#include<>
#define randomize() srand((unsigned)time(NULL))
encode(
unsigned int *symbols, /*编码输出*/
unsigned int *data, /*编码输入*/
unsigned int nbytes, /*nbytes=n/16,n为实际输入码字的数目*/
unsigned int startstate /*定义初始化状态*/
)
4.所谓“最佳”,是指最大后验条件概率:P( C/ R) = max [ P ( Cj/ R) ] ,一般来说,信道模型并不使用后验条件概率,因此利用Beyes公式、根据信道特性出结论:max[ P ( Cj/ R) ]与max[ P ( R/ Cj) ]等价。考虑到在系统实现中往往采用对数形式的运算,以求降低运算量,并且为求运算值为整数加入了修正因子a1、a2。令M ( R/ Cj) = log[ P ( R/ Cj) ] =Σa1 (log[ P( Rm/ Cmj ) ] + a2)。其中, M是组成序列的码字的个数。因此寻找最佳路径,就变成寻找最大M( R/ Cj) , M( R/ Cj)称为Cj的分支路径量度,含义为发送Cj而接收码元为R的似然度。
for(t=1;t<N;t++)
{
for(p=0;p<4;p++)
{
state[p][t].met=state[0][t-1].met+trandistance(*viterbiinput,0,p);
state[p][t].value=traninput(0,p);
state[p][t].last=&state[0][t-1];