- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RM码的生成矩阵1
RM码的生成矩阵
RM码是一类纠正多个差错的编码,这类码构造简单的构造,结构特性丰富。
对于任意整数m和r,0rm,存在一个二进制r阶RM码,记为RM(r,m),其参数如下:
码长: n=;
维数: k(r,m)=1+
最小距离: d=2
RM码的生成矩阵构Grm(r,m)成如下:
V0={1,1,...........................................1}
Vi={0,.....0,1.....1,0.....0,..........,1......1}
ViVj={Vi0*Vj0,..............,Vi(n-1)*Vj(n-1)}.....一直到r次相乘
即Grm(r,m)={V0,V1,........,Vm,V1V2,........Vm-1Vm.......至r次相乘}
用C++编写Grm(r,m)思想如下:
3.1 码长计算:利用for循环m次,每次乘以二
令n的初值为1
for(i=1;i=m;i++)
n=n*2;
维数的计算:先定义一个递归函数fac1( int a)完成一个整数的阶乘计算;在定义一个函 数 fac2()完成排列组合的计算,其中调用fac1( int a)函数;
代码如下:
int fac1(int a)
{
if(a==1)
return 1;
else
return a*fac1(a-1);
}
int fac2(int a,int b)
{
return fac1(a)/fac1(b)/fac1(a-b);
}
令k的初值为1,利用for循环r次,累加每次排列组合数:
for(i=1;i=r;i++){
k=k+fac2(m,i);
}
3.2各行向量的生成方法:
对于V0向量直接用赋除值的方法:
for(j=0;jn;j++) {
*(*(g+0)+j)=1;
cout *(*(g+0)+j) ;
}
对于Vi向量生成方法:
先算出码长2(i-1)整除n,将码长分成多少组0,1交替的序列;对于Vi序列中的 第J 个数整除2(i-1),得的商为奇数是,则第J 个数为1,否则为0;
for(i=1;i=m;i++){
a=(int)pow(2,i-1);
b=n/a;
for(j=0;jn;j++){
if((j/a)%2==0)
*(*(g+i)+j)=0;
else
*(*(g+i)+j)=1;
cout *(*(g+i)+j) ;
}
对于ViVj向量的生成方法:
利用三个for循环,第一个变量i为控制Vi向量不变,通过第二个变量j的自加,分别使异于Vi的向量与Vi相乘,第三个变量是控制Vi和Vj的第a个元素相乘。其代码如下:
for(i=1;im;i++){
for(j=i+1;j=m;j++){
for(a=0;an;a++){
*(*(g+m+i)+a)= (*(*(g+i)+a))* (*(*(g+j)+a));
cout *(*(g+m+i)+a) ;
}
cout endl;
}
}
}
下面以m=4,r=2为例,其总的代码如下:
#include iostream.h
#include math.h
void main(){
int a,b,m=4,r=2,n=1,k=1;
int i,j;
// cin m r;
//cout m = m r= r endl;
for(i=1;i=m;i++)
n=n*2; //计算码长
cout 码长为: n endl;
int fac1(int a); // 计算码的维数
int fac2(int a,int b);
for(i=1;i=r;i++){
k=k+fac2(m,i);
}
cout 该码的信息位长度为: k endl;
int **g=new int*[k]; //创建一个二维数组,存放生成矩阵
for( i=0;ik;i++)
{
文档评论(0)