📄 performance.cpp
字号:
#include "Common.h"
extern float SNR;
extern FILE *fpt_Save_BER, *fpt_Save_PER,*fpt_Save_MSE;
void Count_BER()
{
int i;
int BERSUM = 0;
int TxPsdu[PSDU_LENGTH_BIT] = {0}, RxPsdu[PSDU_LENGTH_BIT] = {0};
float BER = 0.f;
complex ideal_channel[PREAMBLE_LENGTH] = {0.f,0.f};
complex ce_channel[PREAMBLE_LENGTH] = {0.f,0.f};
float MSE[1] = {0.};
FILE *fpt_IDEAL_channel;
FILE *fpt_CE_channel;
FILE *fpt_MSE;
FILE *fpt_BER;
FILE *fpt_TxBitStream;
FILE *fpt_RxBitStream;
if((fpt_TxBitStream = fopen("TxBitStream.dat","rb")) == NULL || (fpt_RxBitStream = fopen("RxBitStream.dat","rb")) == NULL)
{
printf("Can not open the TxBitStream.dat or RxBitStream.dat!\n");
return;
}
else
{
fpt_BER = fopen("BitErrorRate.dat","a");
BERSUM = 0;
fread(TxPsdu,(PSDU_LENGTH_BIT)*sizeof(int),1,fpt_TxBitStream);
fread(RxPsdu,(PSDU_LENGTH_BIT)*sizeof(int),1,fpt_RxBitStream);
for(i = 0; i < PSDU_LENGTH_BIT; i ++)
{
if(TxPsdu[i] != RxPsdu[i])
{
BERSUM = BERSUM+1;
}
}
BER=(float)BERSUM/(float)(PSDU_LENGTH_BIT);
fprintf(fpt_BER,"BER=%e\n",BER);
fclose(fpt_BER);
fclose(fpt_TxBitStream);
fclose(fpt_RxBitStream);
}
#if(IDEAL_ESTIMATION == 0) // MSE in a packet
fpt_IDEAL_channel = fopen("Ideal_Mutichannel.dat","rb");
fpt_CE_channel = fopen("CE_channel.dat","rb");
fpt_MSE = fopen("MSE.txt","a");
fread(ideal_channel, MULTIPATH_NUM*sizeof(complex), 1, fpt_IDEAL_channel );
fread(ce_channel, PREAMBLE_LENGTH*sizeof(complex), 1, fpt_CE_channel );
for(i=0; i<PREAMBLE_LENGTH; i++)
{
MSE[0] = MSE[0] + (ComplexPow( ComplexSub(ideal_channel[i],ce_channel[i]) ))/(float)(PREAMBLE_LENGTH);
}
fprintf(fpt_MSE,"MSE=%e\n",MSE[0]);
fclose(fpt_MSE);
fclose(fpt_IDEAL_channel);
fclose(fpt_CE_channel);
#endif
}
void Count_PER()
{
int p=0, i=0;
float BER = 0.f,BERAVG = 0.f, BERSUM = 0.f;
float PER = 0.f,PER1 = 0.f;
float BER_Array[PACKET_NUM]={0.f};
float MSE_Array[PACKET_NUM]={0.f};
float MSEAVG = 0.,MSE = 0.;
FILE *fpt_PER,*fpt_BER,*fpt_MSE;
if((fpt_BER = fopen("BitErrorRate.dat","r"))== NULL)
{
printf("Can not open the BitErrorRate.dat!\n");
return;
}
else
{
for (i=0; i<PACKET_NUM; i++)
{
fscanf(fpt_BER,"BER = %e\n",&BER);
BER_Array[i]=BER;
}
fclose(fpt_BER);
p=0;
for(i=0;i<PACKET_NUM;i++)
{
BERSUM = BERSUM + BER_Array[i];
if(BER_Array[i] != 0.f)
{
p++;
}
}
BERAVG=(float)BERSUM/(float)PACKET_NUM;
PER=(float)p/(float)PACKET_NUM;
if((fpt_PER = fopen("PacketErrorRate.txt","a")) == NULL)
{
printf("Can not open the PacketErrorRate.dat!\n");
return;
}
else
{
fprintf(fpt_PER," BERAVG=%e ,PER=%f \n ",BERAVG,PER);
printf("BERAVG = %e,PER=%e \n",BERAVG,PER);
fclose(fpt_PER);
}
BERSUM=0.f;
fpt_BER = fopen("BitErrorRate.dat","w");
fclose(fpt_BER);
fprintf(fpt_Save_PER,"%f\t", PER);
fprintf(fpt_Save_BER,"%f\t", BERAVG);
}
#if(IDEAL_ESTIMATION == 0) // MSE in a packet
fpt_MSE = fopen("MSE.txt","r");
for (i=0; i<PACKET_NUM; i++)
{
fscanf(fpt_MSE,"MSE = %e\n",&MSE);
MSE_Array[i]=MSE;
}
fclose(fpt_MSE);
for(i=0; i<PACKET_NUM; i++)
{
MSEAVG = MSEAVG + MSE_Array[i]/(float)(PACKET_NUM);
}
printf(" MSEAVG= %e SNR= %e\n ", MSEAVG, SNR);
fpt_MSE = fopen("MSE.txt","w");
fclose(fpt_MSE);
fprintf(fpt_Save_MSE,"%f\t", MSEAVG);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -