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

📄 performance.cpp

📁 扩展的直序扩频系统
💻 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 + -