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

📄 test.cpp

📁 这是本人编写的软件接收机
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}

		if( condition1 && condition2)
		{
			m_State = ACQUIRED;
			gAcquiring = 0;
		}



		for(i = 0; i<CodeSpan; i++ )
		{
			out1<<setw(10)<<CodeHist[i];
		}

        out1.close();

        m_AcqCount = 0;
        delete [] CodeHist;
        delete [] FreqHist;
	}

    out1.close();
    m_AcqFreqSequence[m_AcqCount] = maxFreq;
    m_AcqCodeSequence[m_AcqCount] = m_CodePhase;

    AcquiringFlag = false;
}

void Channel::Tracking()
{
}

int ii=0;

long WINAPI ThreadTwo(long lParam)
{
    ii++;
	Channel *p = static_cast<Channel *>(pnt);
	p->Acquisition();

    ii--;
	return 0;
}

void Channel::Run(const CSignal& _sig)
{
	if(m_isActive == 0) return;

    HANDLE hThread ;
    DWORD dwID ;
    DWORD dwRetVal = 0;
    DWORD exitCode;

	m_sig = _sig;

	if( (m_State == ACTIVE  ) && gAcquiring == 0 )
	{
		/*pnt = this;
		hThread  = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadTwo,NULL,0,&dwID );

        GetExitCodeThread(hThread,&exitCode);
        if(exitCode !=  STILL_ACTIVE)
        {
		    CloseHandle(hThread);
		    AcquiringFlag = false;
		}*/

		Acquisition();
	}
	if( m_State == TRACKING )
	{
		Tracking();
	}

	return;
}

//--------------------------------------------------------------------------------
// Receiver class implementation

class CReceiver{
	public:

	       // Constructor and destructor

	       CReceiver(const settings& _mySetting):mySetting(_mySetting)
	       {
			   unsigned int n;
			   register int i, j;
			   n = (int)(_mySetting.Fs/(_mySetting.CodeFreq/_mySetting.CodeLength) + 0.5);
               SamplesPerMs = n;

			   sig = CSignal(n);

			   for( i=0; i<32; i++)
			   {
				   CATable[i] = CACode(i+1).Resample(n/1023.0);
			   }

			  // myChannel = new Channel[mySetting.NumberOfChannels];
			   for( i=0; i<mySetting.NumberOfChannels; i++)
			   {
				   myChannel[i] = Channel(mySetting);
				   myChannel[i].SetChannelPara(mySetting);
				   myChannel[i].SetPRNNo(mySetting.PRNNoForChannel[i]);
			   }

			   int Bins = (int)(mySetting.acqSearchBand*2+1);
			   SinCarr = new CSignal[Bins];
			   CosCarr = new CSignal[Bins];
			   CodeFreqI = new CSignal*[32];    // total PRN # is 32
			   CodeFreqQ = new CSignal*[32];    // total PRN # is 32
			   SigAcqNonCoherent = new CSignal[Bins];
			   for( i=0; i<Bins; i++)
			   {
				   SigAcqNonCoherent[i] = CSignal(mySetting.acqSamples);
			   }

			   double *frqBins;
			   frqBins = new double[Bins];

			   for( i=0; i<Bins; i++ )
			   {
				  frqBins[i] = mySetting.IF + 0.5e3*( i - mySetting.acqSearchBand );

				  SinCarr[i] = Sine(frqBins[i], mySetting.Fs, 0,  n).Resample(mySetting.acqSamples* 1.0/SamplesPerMs);
				  CosCarr[i] = Sine(frqBins[i], mySetting.Fs, 0.25,  n).Resample(mySetting.acqSamples* 1.0/SamplesPerMs);
			   }
			   delete [] frqBins;

			   for(i=0; i<32; i++)
			   {
				   CodeFreqI[i] = new CSignal[Bins];
				   CodeFreqQ[i] = new CSignal[Bins];
			   }

			   for(i=0; i<32; i++)
			   {
				   CSignal sigtmp = CATable[i].Resample(mySetting.acqSamples* 1.0/n);
				   for(j=0; j<Bins; j++)
				   {
					   CodeFreqI[i][j] =  sigtmp * SinCarr[j];
					   CodeFreqQ[i][j] =  sigtmp * CosCarr[j];
					   fft(CodeFreqI[i][j], CodeFreqQ[i][j]);
				   }
			   }

		   };

		   ~CReceiver()
		   {
			   delete [] SinCarr;
			   delete [] CosCarr;
			   for(int i=0; i<32; i++)
			   {
				   delete [] CodeFreqI[i];
				   delete [] CodeFreqQ[i];
			   }
			   delete [] CodeFreqI;
			   delete [] CodeFreqQ;
			   delete [] SigAcqNonCoherent;

			   //delete [] myChannel;
		   };

		   void Run();

    private:

           settings mySetting;
           CSignal sig;

           unsigned int SamplesPerMs;        // samples per milisecond
           Channel  myChannel[8];
	   };

void CReceiver::Run()
{
	FILE * DataFile;
	DataFile = fopen(mySetting.FileName, "rb");

    ofstream out1("inout\\out4.da1");

    char *aa;
    int i;
    int AcquringCount;

	if ( DataFile == NULL )
	{
		cout << " data file can not be opened, terminated"<<endl;
		exit(1);
	}

	aa = new char[sig.size()];

  try{
 	 for(int j = 0; j<60; j++)
	 {
		fread(aa, sizeof(char), sig.size(), DataFile);

		for( i = 0; i<sig.size(); i++ )
		{
			sig(i) = ((int)aa[i]);
		}

		if(mySetting.Flag == 0){
			sig = CATable[mySetting.PRNNoForChannel[0]-1];

			sig.shift(1000);

			sig = sig* Sine(mySetting.IF-1300, mySetting.Fs, 0, sig.size()) + Randn(sig.size(), 1,mySetting.NoiseVar);
		}

        AcquringCount = 0;

        gAcquiring = 0;
        for( i=0; i<8; i++)
        {


			myChannel[i].Run(sig);


		}
      }

      for( i=0; i<30; i++)
     {
		 out1<<myChannel[0].m_AcqCodeSequence[i]<<endl;
	 }

     }   // end of try
     catch(std::exception const& E)
     {
		std::cerr << "\nERROR: " << E.what() << std::endl;
		exit(1);
     }

    out1.close();
    fclose(DataFile);
    delete [] aa;
}

int main(int argc, char* argv[]){


    ifstream inp;
    settings mySetting;

/*    bitset<7> a ;
    for(int i=0; i<7;i++){
		cout<<a[i]<<" ";
	}
	cout<<"size(bitset) = "<<sizeof(bitset<1>)<<endl;


int num_to_find = 3;

 vector<int> v1;
 for( int i = 0; i < 10; i++ ) {
   v1.push_back(i);
 }

 vector<int>::iterator result;
 result = find( v1.begin(), v1.end(), num_to_find );

 if( result == v1.end() ) {
   cout << "Did not find any element matching " << num_to_find << endl;
 }

 else {
   cout << "Found a matching element: " << *result << endl;
 }*/

	clock_t start, endt;

    CSignal sig1;
    CSignal sig2;
    CSignal sig3, sig4;
    CSignal sig5, sig6;


    int scale;

      // Read setup parameters from file
	  if (argc>1) inp.open(argv[1]); else inp.open("inout\\rec.inp");
	  if (!inp) {
	    cerr << "ERROR: Could not open receiver setup file" << endl;
	    exit(1);
	  };

      GetSetup(inp, mySetting);

      CReceiver myRec(mySetting);
globalout.open("inout\\outfile.dat");

      myRec.Run();
globalout.close();

/*    sig1 = 1;
    sig2 = 1;
sig1.ZeroPadding();
sig2.ZeroPadding();
//cout<<setw(4)<<sig1<<setw(4)<<sig2<<endl;
cout<<setw(4)<<sig1<<endl;
cout<<setw(6)<<Sine(1,3.3,1.12,10)<<endl;
CSignal sig3;

sig3 = sig1.Resample(2);
cout<<setw(8)<<sig3<<endl<<endl;
cout<<setw(6)<<Correlate(sig1,sig2)<<endl;

sig1 = CACode(1);
sig2 = sig1;
sig1.shift(1 0);

cout<<sig1.size()<<endl;
sig3.Resize(1023);
*/
/*ofstream out1("inout\\out2.dat");
CSignal sig9;
double samples=8192.0;
int m = 8192;
start = clock();
double f;

for(int i=0; i<30; i++){
	f = (2*pi*(mySetting.IF-7e3+i*500)/mySetting.Fs*MAGIC);

	for( int j=0; j<8192; j++){
		out1<<setw(9)<<SinTab[( ((int)(f*j+0.5))&MAX_TRIG)];
	}
	out1<<endl;
}


sig1 = CACode(1).Resample(samples/1023)*128 + Randn(8192, 1, 200);
sig2 = CSignal(sig1.size());
sig1.shift(1000);

CFixedFFT myFFT(8192);
myFFT.FFT(sig1, sig2);

sig3 = CACode(1).Resample(samples/1023)*128;
sig4 = CSignal(sig3.size());
myFFT.FFT(sig3, sig4);

sig5 = sig1*sig3 + sig2*sig4;
sig6 = sig1*sig4 - sig2*sig3;
myFFT.FFT(sig5,sig6, 1);

endt = clock();
cout<<"Time duration Haha  "<<(double)(endt-start)/CLOCKS_PER_SEC<<"  [Sec]"<<endl;
out1<<setw(15)<<(sig5)<<endl;
out1<<setw(15)<<(sig6)<<endl;
out1<<setw(15)<<Magnitude(sig5, sig6)<<endl;

out1.close();*/
cout<<"OK3"<<endl;
return 0;
}

⌨️ 快捷键说明

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