📄 smallkasami.cpp
字号:
# include <iostream.h>
# include <iomanip.h>
# include <math.h>
int c;
//int *kasami_set;
//定义kasami序列数组
void exor(int a,int b)
{
if (a==b)
c=0;
else c=1;
}
void SmallKasami(int m,int *kasami_set)
{
// int m;
// 定义m序列的m值
int *um_sequence;
// 定义m序列数组u
int *w_sequence;
// 定义m序列数组v
int *regist;
//定义寄存器数组
int q;
//定义抽样变量
// int *ccf;
//定义互相关数组
// int *acf;
//定义自相关数组
int ms_length;
//定义m序列的长度
int length;
//定义序列的长度
int i,j,t,x;
//循环变量;
int shift;
//移位变量
// int valuenum,valuetemp;
//取值数目变量
// int *kasami_set;
//定义kasami序列数组
int *temp;
//定义序列的临时移位数组
int *kasamitemp;
//定义kasami序列的临时移位数组
//int exor(int,int);
//异或函数
int array[101][101];
for (i=1;i<101;i++)
{
for (j=1;j<101;j++)
array[i][j]=0;
}
for (i=1;i<101;i++)
{
array[i][0]=1;
array[i][i]=1;
}
//初始化特征多项式数组空间
array[2][1]=1;
array[3][1]=1;
array[4][1]=1;
array[5][2]=1;
array[6][1]=1;
array[7][1]=1;
array[8][1]=1; array[8][5]=1; array[8][6]=1;
array[9][4]=1;
array[10][3]=1;
array[11][2]=1;
array[12][3]=1; array[12][4]=1; array[12][7]=1;
array[13][1]=1; array[13][3]=1; array[13][4]=1;
array[14][1]=1; array[14][11]=1; array[14][12]=1;
array[15][1]=1;
array[16][2]=1; array[16][3]=1; array[16][5]=1;
array[17][3]=1;
array[18][7]=1;
array[19][1]=1; array[19][5]=1; array[19][6]=1;
array[20][3]=1;
array[21][2]=1;
array[22][1]=1;
array[23][5]=1;
array[24][1]=1; array[24][3]=1; array[24][4]=1;
array[25][3]=1;
array[26][1]=1; array[26][7]=1; array[26][8]=1;
array[27][1]=1; array[27][7]=1; array[27][8]=1;
array[28][3]=1;
array[29][2]=1;
array[30][1]=1; array[30][15]=1; array[30][16]=1;
array[31][3]=1;
array[32][1]=1; array[32][27]=1; array[32][28]=1;
array[33][13]=1;
array[34][1]=1; array[34][14]=1; array[34][15]=1;
array[35][2]=1;
array[36][11]=1;
array[37][2]=1; array[37][10]=1; array[37][12]=1;
array[38][1]=1; array[38][5]=1; array[38][6]=1;
array[39][4]=1;
array[40][2]=1; array[40][19]=1; array[40][21]=1;
array[41][3]=1;
array[42][1]=1; array[42][2]=1; array[42][3]=1; array[42][4]=1; array[42][5]=1;
array[43][3]=1; array[43][4]=1; array[43][6]=1;
array[44][2]=1; array[44][5]=1; array[44][6]=1;
array[45][1]=1; array[45][3]=1; array[45][4]=1;
array[46][1]=1; array[46][2]=1; array[46][3]=1; array[46][5]=1; array[46][8]=1;
array[47][5]=1;
array[48][1]=1; array[48][2]=1; array[48][4]=1; array[48][5]=1; array[48][7]=1;
array[49][4]=1; array[49][5]=1; array[49][6]=1;
array[50][2]=1; array[50][3]=1; array[50][4]=1;
array[51][1]=1; array[51][3]=1; array[51][6]=1;
array[52][3]=1;
array[53][1]=1; array[53][2]=1; array[53][6]=1;
array[54][2]=1; array[54][3]=1; array[54][4]=1; array[54][5]=1; array[54][6]=1;
array[55][1]=1; array[55][2]=1; array[55][6]=1;
array[56][2]=1; array[56][4]=1; array[56][7]=1;
array[57][2]=1; array[57][3]=1; array[57][5]=1;
array[58][1]=1; array[58][5]=1; array[58][6]=1;
array[59][1]=1; array[59][3]=1; array[59][4]=1; array[59][5]=1; array[59][6]=1;
array[60][1]=1;
array[61][1]=1; array[61][2]=1; array[61][5]=1;
array[62][3]=1; array[62][5]=1; array[62][6]=1;
array[63][1]=1;
array[64][1]=1; array[64][3]=1; array[64][4]=1;
array[65][1]=1; array[65][3]=1; array[65][4]=1;
array[66][2]=1; array[66][3]=1; array[66][5]=1; array[66][6]=1; array[66][8]=1;
array[67][1]=1; array[67][2]=1; array[67][5]=1;
array[68][1]=1; array[68][5]=1; array[68][7]=1;
array[69][2]=1; array[69][5]=1; array[69][6]=1;
array[70][1]=1; array[70][3]=1; array[70][5]=1;
array[71][1]=1; array[71][3]=1; array[71][5]=1;
array[72][1]=1; array[72][2]=1; array[72][3]=1; array[72][4]=1; array[72][6]=1;
array[73][2]=1; array[73][3]=1; array[73][4]=1;
array[74][3]=1; array[74][4]=1; array[74][7]=1;
array[75][1]=1; array[75][3]=1; array[75][6]=1;
array[76][2]=1; array[76][4]=1; array[76][5]=1;
array[77][2]=1; array[77][5]=1; array[77][6]=1;
array[78][1]=1; array[78][2]=1; array[78][7]=1;
array[79][2]=1; array[79][3]=1; array[79][4]=1;
array[80][1]=1; array[80][2]=1; array[80][3]=1; array[80][5]=1; array[80][7]=1;
array[81][4]=1;
array[82][1]=1; array[82][4]=1; array[82][6]=1; array[82][7]=1; array[82][8]=1;
array[83][2]=1; array[83][4]=1; array[83][7]=1;
array[84][1]=1; array[84][3]=1; array[84][5]=1; array[84][7]=1; array[84][8]=1;
array[85][1]=1; array[85][2]=1; array[85][8]=1;
array[86][2]=1; array[86][5]=1; array[86][6]=1;
array[87][1]=1; array[87][5]=1; array[87][7]=1;
array[88][1]=1; array[88][3]=1; array[88][4]=1; array[88][5]=1; array[88][8]=1;
array[89][3]=1; array[89][5]=1; array[89][6]=1;
array[90][2]=1; array[90][3]=1; array[90][5]=1;
array[91][2]=1; array[91][3]=1; array[91][5]=1; array[91][6]=1; array[91][7]=1;
array[92][2]=1; array[92][5]=1; array[92][6]=1;
array[93][2]=1;
array[94][1]=1; array[94][5]=1; array[94][6]=1;
array[95][1]=1; array[95][2]=1; array[95][4]=1; array[95][5]=1; array[95][6]=1;
array[96][2]=1; array[96][3]=1; array[96][4]=1; array[96][6]=1; array[96][7]=1;
array[97][6]=1;
array[98][1]=1; array[98][2]=1; array[98][3]=1; array[98][4]=1; array[98][7]=1;
array[99][4]=1; array[99][5]=1; array[99][7]=1;
array[100][2]=1; array[100][7]=1; array[100][8]=1;
ms_length=1;
for (i=0;i<m;i++)
{
ms_length=ms_length*2;
}
ms_length=ms_length-1;
cout <<"The length of the m-sequence is "<<ms_length<<".";
cout <<endl;
//确定m序列的长度并输出
if((regist=new int[m])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配寄存器数组空间
regist[0]=0;
for(i=1;i<m;i++)
{
regist[i]=1;
}
//定义初值
q=1;
for (i=0;i<(m/2);i++)
q=q*2;
q=q+1;
cout <<"The sampled number is ";
cout <<q<<endl;
//确定抽样值q
if((um_sequence=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配m序列u的数组空间
if((w_sequence=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配序列w的数组空间
cout <<"The m-sequence u is ";
for (i=0;i<ms_length;i++)
{
um_sequence[i]=0;
for (j=0;j<m;j++)
{um_sequence[i]=um_sequence[i]-regist[j]*array[m][j];
um_sequence[i]=um_sequence[i]%2;
if (um_sequence[i]<0)
um_sequence[i]=um_sequence[i]+2;
}
//计算m序列的值
cout <<um_sequence[i];
//输出m序列
for (j=0;j<m-1;j++)
regist[j]=regist[j+1];
regist[m-1]=um_sequence[i];
//移动移位寄存器的值
}
cout <<"."<<endl;
cout <<"The sequence w is ";
for (i=0;i<ms_length;i++)
{
if (((i+1)*q)%ms_length!=0)
j=((i+1)*q)%ms_length-1;
else j=ms_length-1;
w_sequence[i]=um_sequence[j];
cout <<w_sequence[i];
}
// cout <<endl<<"Replace 0 with +1, and replace 1 with -1. "<<endl
// <<"Then we can obtain the two sequences as below."
// <<endl;
// for (i=0;i<ms_length;i++)
// {
// if (um_sequence[i]==0)
// um_sequence[i]=1;
// else um_sequence[i]=-1;
// if (w_sequence[i]==0)
// w_sequence[i]=1;
// else w_sequence[i]=-1;
// }
// cout <<"m-sequence u: ";
// for (i=0;i<ms_length;i++)
// cout <<um_sequence[i]<<" ";
// cout <<endl;
// cout <<"sequence w: ";
// for (i=0;i<ms_length;i++)
// cout <<w_sequence[i]<<" ";
// cout <<endl;
//用+1和-1代替0和1,并重新输出序列
cout <<endl<<endl;
length=1;
for (i=0;i<m/2;i++)
{
length=length*2;
}
// if((kasami_set=new int[ms_length*length])==NULL)
// {
// cout <<"Can't allocate more memory,terminating.\n";
// }
if((temp=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
if((kasamitemp=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配kasami、temp和kasamitemp序列的空间
for (i=0;i<ms_length;i++)
{
kasami_set[i]=um_sequence[i];
}
for (i=ms_length;i<ms_length*2;i++)
{
exor(w_sequence[i-ms_length],um_sequence[i-ms_length]);
kasami_set[i]=c;
}
cout <<"The No.1 Kasami sequence is ";
for (i=0;i<ms_length;i++)
{
cout <<kasami_set[i]<<" ";
}
cout <<endl;
cout <<"The No.2 Kasami sequence is ";
for (i=ms_length;i<ms_length*2;i++)
{
cout <<kasami_set[i]<<" ";
}
cout <<endl;
//赋值并输出kasami序列集合的前两个序列:u、v序列
for(i=0;i<ms_length;i++)
{
temp[i]=w_sequence[i];
}
//定义temp的初值
for (j=2;j<length;j++)
{
shift=temp[0];
for (x=0;x<ms_length-1;x++)
temp[x]=temp[x+1];
temp[ms_length-1]=shift;
for (t=0;t<ms_length;t++)
{
exor(um_sequence[t],temp[t]);
kasamitemp[t]=c;
}
cout <<"The No."<<j+1<<" kasami sequence is ";
for (i=ms_length*j;i<ms_length*(j+1);i++)
{
kasami_set[i]=kasamitemp[i-ms_length*j];
cout <<kasami_set[i]<<" ";
}
cout <<endl;
}
cout <<endl;
//计算kasami序列
/* if((ccf=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配互相关数组空间
if((acf=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配自相关数组的空间
for (j=0;j<length;j++)
{
cout <<"The ACF of No."<<j+1<<" sequence is ";
for (i=ms_length*j;i<ms_length*(j+1);i++)
{
for (t=0;t<ms_length;t++)
temp[t]=kasami_set[ms_length*j+t];
}
for (i=ms_length*j;i<ms_length*(j+1);i++)
{
shift=temp[0];
for (t=0;t<ms_length-1;t++)
{
temp[t]=temp[t+1];
}
temp[ms_length-1]=shift;
//生成v序列移位数组
acf[i-ms_length*j]=0;
for (t=0;t<ms_length;t++)
acf[i-ms_length*j]=acf[i-ms_length*j]+kasami_set[ms_length*j+t]*temp[t];
cout <<acf[i-ms_length*j]<<" ";
}
cout <<endl;
}
cout <<endl;
//并计算它们的周期自相关值并输出
if((temp2=new int[ms_length])==NULL)
{
cout <<"Can't allocate more memory,terminating.\n";
}
//分配互相关临时数组的空间
for (j=0;j<length-1;j++)
{
for (t=0;t<ms_length;t++)
temp[t]=kasami_set[j*ms_length+t];
//确定x序列
for (i=j+1;i<length;i++)
{
for (t=0;t<ms_length;t++)
temp2[t]=kasami_set[i*ms_length+t];
//确定与x序列进行互相关计算的序列y
cout <<"The CCF of No."<<j+1<<" sequence with NO. "<<i+1<<" sequence is ";
for (x=0;x<ms_length;x++)
{
shift=temp2[0];
for (t=0;t<ms_length-1;t++)
{
temp2[t]=temp2[t+1];
}
temp2[ms_length-1]=shift;
//生成y序列移位数组
ccf[x]=0;
for (t=0;t<ms_length;t++)
{
ccf[x]=ccf[x]+temp[t]*temp2[t];
}
cout <<ccf[x]<<" ";
}
valuenum=1;
valuetemp=0;
for (x=1;x<ms_length;x++)
{
valuetemp=0;
for (t=0;t<x;t++)
{
if (ccf[x]==ccf[t])
valuetemp++;
}
if (valuetemp==0)
valuenum++;
}
cout <<endl<<"The crosscorrelation function of the Kasami sequences is "
<<valuenum
<<" valued.";
cout <<endl<<endl;
}
//计算x序列和y序列的互相关值并输出,每输出一个互相关值即验证为几值函数
}*/
delete[]regist;
delete[]um_sequence;
delete[]w_sequence;
//delete[]kasami_set;
delete[]kasamitemp;
//delete[]temp;
//delete[]acf;
//delete[]ccf;
//delete[]temp2;
//释放堆空间
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -