Bug 的个人资料封印的九尾照片日志列表更多 工具 帮助

日志


2007/7/27

Viterbi算法原理简介

 Viterbi译码算法是由Viterbi于1967年提出的一种最大似然译码方法,译码器根据接收序列R按最大似然准则力图找出正确的原始码序列。随着大规模集成电路技术的发展,采用Viterbi算法的卷积编码技术已成为广泛应用的纠错方案。Viterbi译码过程可用状态图表示,图1表示2个状态的状态转移图。Sj,t和Sj+N/2,t表示t时刻的两个状态。在t+1时刻,这两个状态值根据路径为0或者1,转移到状态S2j,t+1和S2j+1,t+1。每一种可能的状态转移都根据接收到的有噪声的序列R计算路径度量,然后选择出各个状态的最小度量路径(幸存路径)。Viterbi算法就是通过在状态图中寻找最小量路径向前回溯L步,最后得到的即为译码输出。

在卷积码(n,k,m)表示法中,参数k表示每次输入信息码位数,n表示编码的输出卷积码位数,m称为约束长度(一些书中采用k=m+1为约束长度,也可称(2,1,2)码网格图,r=k/n称为信息率,即编码效率。本文使用的是(2,1,3)码,约速长度为2,状态数为2 2=-4。

2007/7/17

二进制读写和函数关系

看个例子:  
  #include<stdio.h>  
   
  int   main()  
  {  
  FILE   *fp;  
  int   i   =   12;  
  int   j   =   12;  
   
  fp   =   fopen("01.txt","wb");  
  fprintf(fp,"%d",i);  
  fputc('\n',fp);  
  fwrite(&j,sizeof(int),1,fp);  
   
  fclose(fp);  
  return   0;  
  }  
  看输出结果。  
  linux:~/test   #   od   -x   01.txt  
  0000000   3231   0c0a   0000   0000  
   
  即使是用二进制打开,但如果你用fputc,fputs,fprintf这些函数,其实还是和用文本文件打开一样。  
  只有用到fwrite/fread函数,才会看到一个整形占4个字节。
 
   
  按二进制写文件指的是直接按照数据在内存中的表现形式写入文件。例如,如果int型数据在内存中用   4   个字节表示,则写这个int数据的时候直接把对应的内存中   4   个字节的内容写入文件。在此过程中数据不需要做任何转换,所以效率较高。  
   
  数据有字符型和非字符型(数)两种。按文本方式写文件指的是将数据转换为对应的字符型数据之后再写入文件。对于字符型数据,由于其本身就是ASCII码字符,一般不必转换,直接写入文件。但是,由于不同的系统对于换行符('\n')有不同的处理(转换)方式,在有的系统(如Windows)下也会对   '\n'   作适当的转换。  
   
  对于非字符型数据,都要进行转换处理。例如:int   m   =   12;   以及   double   f   =   2.3;,分别按照   "%d"、"%lf"   方式将   m   和   f   写入文件的时候,写入的分别是   '1'、'2'   两个字符以及   '2'、'.'、'3'   等三个字符的ASCII码值。显然,如果按照二进制方式写的话,在文件中一般   m   要占   4   个字节、f   要占   8   个字节。