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

📄 gold.cpp

📁 使用Visual C++生成Frank,cubic,chu序列
💻 CPP
字号:

#include <math.h>
#include <complex>
using namespace std;

#ifndef  PI
#define  PI 3.1415926535897932
#define PPII   3.14159
#endif 
/******************************************************************************
   Function: int gcd(int count1,int count2);

   Purpose:
        Resolve the great common division of two positive integers
   
   Paramters:
        count1:    the first number
        count2:    the second number

   Function returns:
        the great common division of two positive integers
******************************************************************************/	
int gcd(int a,int b)    
{
	int quotient,remainder,c;

	if (a<b)
	{
		c=a;
		a=b;
		b=c;
	}
	remainder=1;
	while (remainder!=0)
	{
		quotient=a/b;
		remainder=a%b;
		a=b;
		b=remainder;
	}
	
	return a;
}
/******************************************************************************
   Function: int coprime(int count1,int a[])

   Purpose: to resolve the integers that coprime to the appointed integer 
            and lower than the appointed integer
                                   
   Paramters:
        count1:    the appointed integer
        count2:    the array to store the resolved integers

   Function returns:
        the number that coprime to m between 1~(m-1)
******************************************************************************/	
int coprime(int m,int a[])    
{
	int i,sum;
	sum=0;
	for (i=1;i<m;i++)
		if (gcd(m,i)==1)
		{
			a[sum]=i;
			sum++;
		}
	return sum;
}
void Gold(int q, int sequence[],long lNumber,long lLength)
{
	int *um_sequence,*v_sequence,*regist;
	int tn,ms_length,num,m;	
	int i,j,t,x,shift; 
    int *temp,*temp1,*GoldTemp;
   	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;
	//initialize primitive polynomials 
	m=q;
	ms_length=1;
	for (i=1;i<=q;i++)
	{
		ms_length=ms_length*2;
	}
	ms_length=ms_length-1;
	//compute the length of m sequence

	num=(int)pow((float)2,m)+1;

    //sequence=new float[num*ms_length];
    
	regist=new int[m];
	//allocate the memory of regist
	regist[0]=0;
	for(i=1;i<m;i++)
	{
		regist[i]=1;
	}
		
	tn=1;
	for (i=1;i<=((m+2)/2);i++)
		tn=tn*2;
	tn=tn+1;

	um_sequence=new int[ms_length];
	v_sequence=new int[ms_length];
	temp1=new int[ms_length];
	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;
		}
		for (j=0;j<m-1;j++)
			regist[j]=regist[j+1];
		regist[m-1]=um_sequence[i]; 
	}
	for (i=0;i<ms_length;i++)
	{
		temp1[i]=um_sequence[(i+1)%ms_length];
	}
	for (i=0;i<ms_length;i++)
	{
		um_sequence[i]=temp1[i];
	}
	for (i=0;i<ms_length;i++)
	{
		v_sequence[i]=um_sequence[(i*tn)%ms_length];
	}
			
	temp=new int[ms_length];
	GoldTemp=new int[ms_length];

	for (i=0;i<ms_length;i++)
	{
		sequence[i]=um_sequence[i];
	}
	for (i=ms_length;i<ms_length*2;i++)
	{
		sequence[i]=v_sequence[i-ms_length];
	}
	for (i=ms_length*2;i<ms_length*3;i++)
	{  
        sequence[i]=v_sequence[i-2*ms_length]^um_sequence[(i-2*ms_length)];
	}
	//compute the first three sequense of gold sequence set:u,v and u exor v;
	for(i=0;i<ms_length;i++)
	{
		temp[i]=v_sequence[i];
	}
	for (j=3;j<num;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++)
		{
			GoldTemp[t]=um_sequence[t]^temp[t];
		}
		for (i=ms_length*j;i<ms_length*(j+1);i++)
		{
			sequence[i]=GoldTemp[i-ms_length*j];
		}
	}
}

double PeriodAutoCorrelation(int sequence[],int length,int t)
{
   int i;
   double x;
   x=0;
   for (i=0;i<length;i++)
   {     
     x=x+sequence[i]*sequence[(i+t)%length];
   }
   x=x/length;
   return x;
}

double AperiodAutoCorrelation(int sequence[],int length,int t)
{
   int i;
   double x;
   x=0;
   for (i=0;i<length-t;i++)
   {     
     x=x+sequence[i]*sequence[i+t];
   }
   x=x/length;
   return x;
}

complex<double> PeriodAutoCorrelation(complex<double> sequence[],int length,int t)
{
   int i;
   complex<double> x,length1;
   
   x=complex<double>(0.0,0.0);
   for (i=0;i<length;i++)
   {     
     x=x+sequence[i]*conj(sequence[(i+t)%length]);
   }

   length1=complex<double>(length,0);
   x=x/length1;
   return x;
}

complex<double> AperiodAutoCorrelation(complex<double> sequence[],int length,int t)
{
   int i;
   complex<double> x,length1;
   
   x=complex<double>(0.0,0.0);
   for (i=0;i<length-t;i++)
   {     
       x=x+sequence[i]*conj(sequence[i+t]);
   }

   length1=complex<double>(length,0);
   x=x/length1;
   return x;
}

double distance(complex<double> x,complex<double> y)
{
	double a,b,c;
	a=x.real()-y.real();
	b=x.imag()-y.imag();
	c=sqrt(a*a+b*b);
	return c;
}

complex<double> map(int x)
{
	complex<double> y;

	if (x==0)   y=complex<double> (0.0,0.0);
	if (x==1)   y=complex<double> (1.0,0.0);
	if ((x==2)||(x==3))   y=complex<double> (polar(1.0,2*PI*(x-1)/3));

	return y;   
}

int InverseMap(complex<double> c)
{
	int x;

	if (c==complex<double> (0.0,0.0))   x=0;
	if (c==complex<double> (1.0,0.0))   x=1;
	if (c==complex<double> (polar(1.0,2*PI/3)))   x=2;
    if (c==complex<double> (polar(1.0,4*PI/3)))   x=3;

	return x;
}

int convert(int a)
{
	int b;
	switch (a)
	{
	    case 5: b=0; 
			break;
		case 7: b=1;
			break;
		case 11: b=2;
			break;
		case 13: b=3;
			break;
		case 17: b=4;
			break;
		case 19: b=5;
			break;
		case 23: b=6;
			break;
		case 29: b=7; 
			break;
		case 31: b=8;
			break;
		default : b=0;
	}
	return b;
}

//float* CompACF(int CodeNumber, float *m_Floatsequence, int m_SeqLength, int m_SeqNumber, float *CompACF_)
//{
//	int a,b,w;
//	float *midACF_=new float[2*m_SeqNumber-1];
//	for(a=0;a<m_SeqNumber;a++){
//		for(w=0;w<2*m_SeqNumber-1;w++)
//			midACF_[w]=0;
//		midACF_ = SXDACF(CodeNumber*m_SeqNumber+a,m_Floatsequence, m_SeqNumber,m_SeqNumber, midACF_);
//		for(b=0;b<2*m_SeqNumber-1;b++)
//			CompACF_[b]+=midACF_[b];
//	}
//	delete midACF_;
//	return CompACF_;
//}
//
//float* SXDACF(int CodeNumber, float *m_Floatsequence, int m_SeqLength, int m_SeqNumber, float *SXDACF_)
//{
//	for(int c=0;c<m_SeqLength;c++)
//			for(int d=m_SeqLength*CodeNumber;d<(m_SeqLength*(CodeNumber+1));d++){
//				if(m_Floatsequence[d]==m_Floatsequence[(d+c)%m_SeqLength+CodeNumber*m_SeqLength])
//					SXDACF_[c]++;
//				else 
//					SXDACF_[c]--;
//				}
//	return SXDACF_;
//}
void ACF(long PACF_Code,long lLength,long lNumber,int sequence[],long SeqPhase,float fPacf[] )
{
	int i,j;
	//float *fPacf;
	//fPacf=new float[lLength];
	for(i=0;i<lLength;i++)
		fPacf[i]=0;

	float *fTempSeqArray=new float[lLength*lNumber];
	long lValue;
	for (i=0;i<lLength*lNumber;i++)
	{
	lValue = (long)sequence[i];
	fTempSeqArray[i] = lValue;
	}


	for(i=0;i<lLength;i++)
	{
		for(j=lLength*(PACF_Code-1);j<lLength*PACF_Code;j++)
			if(fTempSeqArray[j]==fTempSeqArray[(j+i)%lLength+lLength*(PACF_Code-1)])
				fPacf[i]++;
			else fPacf[i]--;
	}

}

void CCF(long PCCF_Code1,long PCCF_Code2,long lLength,long lNumber,int sequence[],long SeqPhase,float fPccf[] )
{
	int i,j,k;
	//float *fPacf;
	//fPacf=new float[lLength];
	for(i=0;i<lLength;i++)
		fPccf[i]=0;

	float *fTempSeqArray=new float[lLength*lNumber];
	long lValue;
	for (i=0;i<lLength*lNumber;i++)
	{
	lValue = (long)sequence[i];
	fTempSeqArray[i] = lValue;
	}


	for(i=0;i<lLength;i++)
		for(j=lLength*(PCCF_Code1-1),k=lLength*(PCCF_Code2-1);j<lLength*PCCF_Code1;j++,k++){
			if(fTempSeqArray[j]==fTempSeqArray[(k+i)%lLength+lLength*(PCCF_Code2-1)])
				fPccf[i]++;
			else fPccf[i]--;
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -