⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smallkasami.cpp

📁 利用Visual C++编写M序列的生成以及利用给定的M序列采用采样技术生成其他的不同的序列
💻 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 + -