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

📄 receiver.cpp

📁 扩展的直序扩频系统
💻 CPP
字号:
#include "Common.h"

void Receive()
{	
	int i=0, j=0;
	complex Preamablebuffer[PREAMBLE_LENGTH] = {0.f, 0.f}, Rxbuffer[PACKET_LENGTH_CHIP*CHIP_SIZE]={0.f,0.f};
	complex MatchResult[PACKET_LENGTH_CHIP] = {0,0};
	complex RakeResult[PSDU_LENGTH_SYM] = {0,0};
	complex CEsequence[PREAMBLE_LENGTH] = {0.,0.};
	int DemodResult[PSDU_LENGTH_BIT] = {0};

	int randnLocation = 0, AdjustLocation = 0;
	int	sfdflag = 0, Read1=0;	
	long offset=0;
	
	FILE *fpt_RxSignal, *fpt_RxSignal_FOC, *fpt_RxBitStream;

	//open the Rx and Rx_FO
    if((fpt_RxSignal = fopen("RxSignal.dat","rb"))==NULL)	
	{
		printf("Can't open RxSignal.dat!!");    
		return;
	}
	
    else
	{
		fpt_RxBitStream = fopen("RxBitStream.dat", "wb");                    // File for the bit result

		randnLocation = rand()%PREAMBLE_LENGTH;
		offset = sizeof(complex) * randnLocation;
		fseek(fpt_RxSignal, offset, 0);
		
		///////////// Synchronization///////////////
        #if(SYN_flag == 1)
		   fread(Preamablebuffer, sizeof(complex), PREAMBLE_LENGTH, fpt_RxSignal); 
		   AdjustLocation = Syn(Preamablebuffer);
        #else
		   AdjustLocation = SYN_NUM*PREAMBLE_LENGTH - randnLocation;
        #endif
		   
		offset = sizeof(complex) * AdjustLocation;
		fseek(fpt_RxSignal, offset, 1);

	       
		/////// compensate the frequency offset////////
        #if(OFFSET_flag == 1)		
		   fpt_RxSignal_FOC = fopen("RxSignal_FO.dat","wb");                   // the file for the FOC signal

   		   FO_Compensate(fpt_RxSignal, fpt_RxSignal_FOC);                        // Compensate the F offset
		   fclose(fpt_RxSignal);
		   fclose(fpt_RxSignal_FOC);
		   fpt_RxSignal_FOC = fopen("RxSignal_FO.dat","rb");                                       
		
        #else 		
		   fclose(fpt_RxSignal);
		   fpt_RxSignal_FOC = fopen("RxSignal.dat","rb");
           offset = long(sizeof(complex)*(randnLocation+AdjustLocation+SYN_flag*PREAMBLE_LENGTH));
		   fseek(fpt_RxSignal_FOC, offset, 0);  	   		  
        #endif
        

		///////// Channel estimation/////////
		#if (IDEAL_ESTIMATION == 0)
		{
			for(i=0; i< CE_NUM; i++)            //smooth the noise
			{
				fread(Preamablebuffer, sizeof(complex), PREAMBLE_LENGTH, fpt_RxSignal_FOC);
				
				for(j=0; j<PREAMBLE_LENGTH; j++)
				{
					CEsequence[j] = ComplexAdd( CEsequence[j], ComplexDivR(Preamablebuffer[j], CE_NUM) );
				}
			}
			
			#if (EST_DOMAIN == 0)                     //channel estimation
				TimeEst(CEsequence);
			#else
				FrequencyEst(CEsequence);
			#endif
		}		
        #endif
		
		
		#if (SFD_flag == 1)
			SFD(CEsequence, fpt_RxSignal_FOC);
		#else
			i = TRAINING_TIMES+1-SYN_NUM-OFFSET_flag*FO_NUM-(1-IDEAL_ESTIMATION)*CE_NUM;
			offset = i*PREAMBLE_LENGTH*sizeof(complex);
			fseek(fpt_RxSignal_FOC, offset, 1); 		
		#endif

		fread(Rxbuffer, sizeof(complex)*(PACKET_LENGTH_CHIP*CHIP_SIZE), 1, fpt_RxSignal_FOC);
		
		MatchFilter(Rxbuffer, PACKET_LENGTH_CHIP, MatchResult);				
		Rake(MatchResult, PSDU_LENGTH_SYM, RakeResult);
		Demodulate(RakeResult, PSDU_LENGTH_BIT, DemodResult);
		fwrite(DemodResult,sizeof(int),PSDU_LENGTH_BIT,fpt_RxBitStream);
		fclose(fpt_RxBitStream);
	}

	fclose(fpt_RxSignal_FOC);
	
}





















⌨️ 快捷键说明

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