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

📄 measure.cpp

📁 这是一个手机校准程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			} 
            Auto=0;
			if(stat==0)
			{ 
				 GpibWrt("SENSE:LEV:MODE AUTOMATIC");
				 Auto=1;
				 Sleep(50);
				 GpibWrt("READ:POW?");  
				 GpibRd(buf);
		         measured_cmu=C_parse(buf,1);
				 if( fabs(measured_cmu+9999999.99)<1)
				 {  
					 stat=0;
				 } 
				 else
				 { 
					 stat=1;
				 } 
						
				 if(stat!=1)
				 {
				    stat=0;
					j=0;
					strcpy(buf,"NAN");
					while ( (strstr(buf,"NAN")) && ( j<=1 ))
					{ 
						GpibWrt("READ:SPOW?");
			            Sleep(50);
						GpibRd(buf);
						j++;
					}
						
					if(strstr(buf,"NAN"))
					{
						measured_cmu=-9999999.99;
					}
					else
					{
						measured_cmu=(float)atof(buf);
					 	stat=1;
					}
				 }
				 else
				 {
				    stat=1;
				 }
				 GpibWrt("SENSE:LEV:MODE MANUAL");
						
			}
		    if ( (stat==0) && (Auto==1))
			{
				diff=10;
			}
            else
			{
			    diff=expected_power-measured_cmu;
			}
			diff1=diff;
			i++;
            
		}
		if( fabs(measured_cmu+9999999.99)<1)
		{
		    sprintf(buf,"SENSE:LEVEL:MAX 35");
		}
		else
        {
			sprintf(buf,"SENSE:LEVEL:MAX %f",measured_cmu+5);
		}
		GpibWrt(buf);
		GpibWrt("*OPC?");
        GpibRd(buf);
		Sleep(50);
   
        strcpy(buf,"NAN");
        

		i=0;
		stat=0;
		
		*phase_error=-9999999.99;
		while ( (fabs(*phase_error+9999999.99)<1) && (i<=3 ))     //weidg
		{
		  GpibWrt("READ:SCALAR:MOD:RES?");
		  Sleep(500);   //was 500
		  GpibRd(buf);  // phase error error in 5th value (in Hz)

		  *phase_error=C_parse(buf,4);
		  i++;
		}
	 				  
		if( fabs(*phase_error+9999999.99)<1)
		{
		   stat=FALSE;
		}
		else
		{
		  stat=1;
		}
	
    }
  return stat;
  }

//***************
//------------- GetTxLev
// returns FALSE on error
//***************
BOOL measure::GetTxPower(double expected_power,float *tx_power)
{
Int8 buf[80];
double abs_delta;		// delta between expected and read
double delta;			// measured-expected
double measured;
unsigned count;
unsigned valid_measurement;
unsigned stat,Auto;
char log_msg[256];
float dummy1,dummy2,dummy3,dummy5;
char dummy4[20];

  int i,j;   //weidg
  i=0;    //weidg
  double measured_cmu;  //weidg cmu
  double diff;          //weidg cmu 
  double diff1;         //weidg cmu


if(tester_type==AGT8960)
{
	ViInt32		Integrity;
	ViReal64	TXPower;

	stat=TRUE;
	age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);
	sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
    LogGPIB(log_msg);
    age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
	age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
    sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
    LogGPIB(log_msg);
	count=0;
//    while(Integrity==5 || Integrity==6 && count<10) // power is too high or too low
	while(Integrity!=0 && count<16) // power is too high or too low
	{
	//	if(TXPower>=50 || TXPower<=-20)
	//		TXPower=10;
		Sleep(200);
		count++;
		age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND);  // set expected to measured
		sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
		LogGPIB(log_msg);
		age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
		age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
		sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
		LogGPIB(log_msg);
	}
	if(Integrity == 0)
	{
		*tx_power=(float)TXPower;
		return TRUE;
	}
    else
	{
		*tx_power=(float)TXPower;
		return FALSE;
	}
} // end if AGT8960
else if(tester_type==HP8922)
    {
	  stat=TRUE;
// try measuring at the expected power. If the instrument can't make a 
// measurement, sweep the expected power from 32 to 2 dBm in increments
// of 5 dBm until either a reading is obtained or the lowest power
// level is reached.
	  sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	  GpibWrt(IdHP8922, buf);
	  Sleep(100);
	  GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	  strcpy(buf,"");
    GpibRd(buf);
    valid_measurement=(strlen(buf)!=0);
    if(!valid_measurement)
      {
      GpibClear(IdHP8922);
      for(expected_power=33;expected_power>0 && !valid_measurement;expected_power-=5.0)
        {
	      sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	      GpibWrt(IdHP8922, buf);
	      Sleep(100);
	      GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	      strcpy(buf,"");
        GpibRd(buf);
        valid_measurement=(strlen(buf)!=0);
        if(!valid_measurement)
          {
          GpibClear(IdHP8922);
          }
        }
      if(!valid_measurement)
        {
        return FALSE;
        }
      }
    expected_power=(float)atof(buf);
// now try to get within 3 dB error between expected and measured
    abs_delta=99.0;
    count=0;
    while(abs_delta>3.0 || abs_delta<0.01)
      {
	    sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	    GpibWrt(IdHP8922, buf);
	    Sleep(100);
	    GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	    strcpy(buf,"");
      GpibRd(buf);
      valid_measurement=(strlen(buf)!=0);
      if(!valid_measurement)
        {
        GpibClear(IdHP8922);
        }
      measured=atof(buf);
	    delta=(double)measured-(double)expected_power;
	    abs_delta=fabs(delta);
	    count++;
	    if(count>MAX_8922_LOOP_COUNT)
        {
        *tx_power=0.0;
		    return FALSE;
        }
// sometimes the 8922 reports back exactly what the expected power was.
// detect that condition and change the expected power slightly
	    if(abs_delta<0.1)
        {
		    expected_power=expected_power+0.2*((float)rand()-(float)(RAND_MAX/2))/(float)RAND_MAX;
        }
	    else  // error is greater than 0.1 dB
        {
			  expected_power=measured;
        } // end else error is not smaller than 0.1 dB
      }
    if(valid_measurement)
      {
      *tx_power=measured;
      return TRUE;
      }
    else
      {
      *tx_power=0.0;      
      return FALSE;
      }
    } // end if tester is HP8922
  else if(tester_type==CM200)
    {
	 
	   //  expected_power=expected_power+3;
        measured_cmu=999;
        diff=expected_power-measured_cmu;
		stat=TRUE;
		// weidg
		i=0;
	    strcpy(buf,"NAN");
        diff1=0;
		stat=0;
		Auto=1;
		while ( ((stat==0) && ( i<=1 )) || (((diff>=5.5) || (diff<=1)) && ((expected_power+12)>=0)&&(i<=1)) || ((Auto==1) && (i<=1)))
		{
            expected_power=expected_power-diff1+5;
			if (expected_power<=-12 )
			{  
				expected_power=-12;
			} 
			if (expected_power>=39 )
			{   
				expected_power=39;
			} 
			
			sprintf(buf,"SENSE:LEVEL:MAX %f",expected_power);
			GpibWrt(buf);
			GpibWrt("*OPC?");
            GpibRd(buf);
			GpibWrt("READ:POW?");  
			GpibRd(buf);

			measured_cmu=C_parse(buf,1);
			if( fabs(measured_cmu+9999999.99)<1)
			{ 
		        stat=0;
			} 
		    else
			{ 
		        stat=1;
			} 
            Auto=0;
			if(stat==0)
			{ 
				 GpibWrt("SENSE:LEV:MODE AUTOMATIC");
				 Auto=1;
				 Sleep(50);
				 GpibWrt("READ:POW?");  
				 GpibRd(buf);
		         measured_cmu=C_parse(buf,1);
				 if( fabs(measured_cmu+9999999.99)<1)
				 {  
					 stat=0;
				 } 
				 else
				 { 
					 stat=1;
				 } 
						
				 if(stat!=1)
				 {
				    stat=0;
					j=0;
					strcpy(buf,"NAN");
					while ( (strstr(buf,"NAN")) && ( j<=1 ))
					{ 
						GpibWrt("READ:SPOW?");
			            Sleep(50);
						GpibRd(buf);
						j++;
					}
						
					if(strstr(buf,"NAN"))
					{
						measured_cmu=-9999999.99;
					}
					else
					{
						measured_cmu=(float)atof(buf);
					 	stat=1;
					}
				 }
				 else
				 {
				    stat=1;
				 }
				 GpibWrt("SENSE:LEV:MODE MANUAL");
						
			}
		    if ( (stat==0) && (Auto==1))
			{
				diff=10;
			}
            else
			{
			    diff=expected_power-measured_cmu;
			}
			diff1=diff;
			i++;
            
		}
		
		if(stat==0)
		{
			*tx_power=-99.0;
			 stat=FALSE;
		}
		else
        {  
			*tx_power=measured_cmu;
			stat=1;
		}
    }
  return stat;
  }

//***************
//------------- GetTxLev
// returns FALSE on error
//***************
BOOL measure::GetTxPower(double expected_power,float *tx_power,unsigned search_down)
{
Int8 buf[80];
double abs_delta;		// delta between expected and read
double delta;			// measured-expected
double measured;
unsigned count;
unsigned valid_measurement;
unsigned stat,Auto;
char log_msg[256];
 int i,j;   //weidg
 i=0;    //weidg
 double measured_cmu;  //weidg cmu
 double diff;          //weidg cmu 
 double diff1;         //weidg cmu
 float dummy1,dummy2,dummy3,dummy5;
char dummy4[20];



if(tester_type==AGT8960)
{
		ViInt32		Integrity;
		ViReal64	TXPower;

		stat=TRUE;
		age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);
		sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
		LogGPIB(log_msg);
		age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
		age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
		sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
		LogGPIB(log_msg);
		count=0;
//    while(Integrity==5 || Integrity==6 && count<10) // power is too high or too low
	while(Integrity!=0 && count<16) // power is too high or too low
	{
		count++;
		if(Integrity==2)
        {
			if(expected_power>0)
			{
				expected_power=expected_power-5;
			}
			age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);  // set expected to measured
		    sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
		}
		else
        {
			age1960_expectedPower( vi_instr, TXPower, age1960_CURRENT_BAND);  // set expected to measured
		    sprintf(log_msg,"Setting expected Tx power: %f dBm",expected_power);
        }
		LogGPIB(log_msg);
		age1960_initMeasFcn(vi_instr, age1960_TXPOWER);
		age1960_fetchTXPower_Q(vi_instr, &Integrity, &TXPower);
		sprintf(log_msg,"Measuring Tx power: integrity=%d, power=%f",Integrity,TXPower);
		LogGPIB(log_msg);
	}
	if(Integrity == 0)
	{
		*tx_power=(float)TXPower;
		return TRUE;
	}
	else
	{
		*tx_power=(float)TXPower;
		return FALSE;
	}
} // end if AGT8960
  else if(tester_type==HP8922)
    {
	  stat=TRUE;
// try measuring at the expected power. If the instrument can't make a 
// measurement, sweep the expected power from 32 to 2 dBm in increments
// of 3 dBm until either a reading is obtained or the lowest power
// level is reached.
	  sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	  GpibWrt(IdHP8922, buf);
	  Sleep(100);
	  GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	  strcpy(buf,"");
    GpibRd(buf);
    valid_measurement=(strlen(buf)!=0);
    if(!valid_measurement)
      {
      GpibClear(IdHP8922);
      if(search_down)
        {
        for(expected_power=33;expected_power>0 && !valid_measurement;expected_power-=5.0)
          {
	        sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	        GpibWrt(IdHP8922, buf);
	        Sleep(100);
	        GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	        strcpy(buf,"");
          GpibRd(buf);
          valid_measurement=(strlen(buf)!=0);
          if(!valid_measurement)
            {
            GpibClear(IdHP8922);
            }
          } // end for each expected power guess
        }
      else // search up
        {
        for(expected_power=0;expected_power<33 && !valid_measurement;expected_power+=5.0)
          {
	        sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	        GpibWrt(IdHP8922, buf);
	        Sleep(100);
	        GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	        strcpy(buf,"");
          GpibRd(buf);
          valid_measurement=(strlen(buf)!=0);
          if(!valid_measurement)
            {
            GpibClear(IdHP8922);
            }
          } // end for each expected power guess
        } 
      if(!valid_measurement)
        {
        return FALSE;
        }
      }
    expected_power=(float)atof(buf);
// now try to get within 3 dB error between expected and measured
    abs_delta=99.0;
    count=0;
    while(abs_delta>3.0 || abs_delta<0.01)
      {
	    sprintf(buf, "RFANALYZER:AMPLITUDE1 %f",expected_power);
	    GpibWrt(IdHP8922, buf);
	    Sleep(100);
	    GpibWrt(IdHP8922, "MEASURE:FTCP:POW?");
	    strcpy(buf,"");
      GpibRd(buf);
      valid_measurement=(strlen(buf)!=0);
      if(!valid_measurement)
        {
        GpibClear(IdHP8922);
        }
      measured=atof(buf);
	    delta=(double)measured-(double)expected_power;
	    abs_delta=fabs(delta);
	    count++;

⌨️ 快捷键说明

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