📄 receiver.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 + -