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

📄 measure.cpp

📁 这是一个手机校准程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	    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 - search down from expected power level passed in
// returns FALSE on error
//***************
BOOL measure::GetTxPowerDown(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];
  int i,j;
  double measured_cmu;  //weidg cmu
  double diff;          //weidg cmu 
  double diff1;         //weidg cmu
float dummy1,dummy2,dummy3,dummy5;
char dummy4[20];

  i=0;

	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<16) // power is too high or too low
	while(Integrity!=0 && count<16) // power is too high or too low
	{
		count++;
		if(TXPower>=100)
			expected_power-=count*2;
		else
			expected_power=TXPower;

		age1960_expectedPower( vi_instr, expected_power, age1960_CURRENT_BAND);  // set expected to measured
//		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);
      for(;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
      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;
  }

//***************
//------------- SetRxPower(power)
//***************
BOOL measure::SetRxPower(float rx_power)
  {
  char buf[256];
  char log_msg[256];

  if(tester_type==AGT8960)
    {
		age1960_cellPower(vi_instr, age1960_CELL_1, rx_power, 0.0);
    sprintf(log_msg,"Setting Rx power: rx_power=%f",rx_power);
    LogGPIB(log_msg);
    } 
  else if(tester_type==HP8922)
    {
    sprintf(buf,"RFG:AMPLITUDE1 %6.1f",(float)rx_power);
	  GpibWrt(buf);
    }
  else if(tester_type==CM200)
    {

	sprintf(buf,"SOURCE:RFG:FREQ:CHAN %dCH",channel);
  //  sprintf(buf,"SOURCE:RFG:FREQ:CHAN %d",channel); //weidg
    GpibWrt(buf);

    GpibWrt("*OPC?");
    GpibRd(buf);

    GpibWrt("CONF:RFG:MOD:TRAN CONT");
  //  GpibWrt("CONF:RFG:MOD:BIT:SEL OFF");  //???
    GpibWrt("CONF:RFG:MOD:BIT:SEL PRBS");  //weidg
    GpibWrt("OUTPUT RF2");
    GpibWrt("INPUT RF2");
    GpibWrt("INIT:RFG");
    sprintf(buf,"SOURCE:RFG:LEVEL:UTIM %6.1f",(float)rx_power);
	GpibWrt(buf);
    GpibWrt("*OPC?");
	GpibRd(buf);
    } // end if instrument is CMU200
  return 1;
  }


//***************
//------------- GetRampStatus(init,*stat)
// if init==1, initializes, otherwise, makes the measurement
// this is for speed.
//***************
BOOL measure::GetRampStatus(unsigned init,unsigned *stat)
  {
    // char buf[256];
     char buf[10020]; //weidg was 255

// set HP8922 up to sync on TSC0
	if(init)
    {
    if(tester_type==AGT8960)
      {
		  ViReal64	pvsTimeOffsets[12] = {
						    -2.70E-05, -2.60E-05, -2.50E-05, -2.40E-05,
						    -2.30E-05, -2.20E-05, -2.10E-05, -2.00E-05,
						    -1.90E-05, -1.80E-05, -1.70E-05, -1.00E-05 };

      age1960_confPowerVsTime( vi_instr, 3, age1960_TRIG_RF_RISE, 0.0, age1960_BSYNC_MID, 12, pvsTimeOffsets, 5.0);
      }
    else if(tester_type==HP8922)
      {
      GpibWrt("DISP:SCREEN MSYNC");
	    GpibWrt("MSYNC:SYNC:BSEL '0'");
	    GpibWrt("DDEM:BURST:TYPE0 'TSC0'");

// set the times and amplitudes
	    GpibWrt("DISP:DSP:VIEW 'AMPL RISE'");

      GpibWrt("DSP:AMPLITUDE:TIME1 -2.70E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE1:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE1:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE1:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME2 -2.60E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE2:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE2:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE2:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME3 -2.50E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE3:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE3:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE3:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME4 -2.40E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE4:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE4:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE4:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME5 -2.30E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE5:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE5:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE5:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME6 -2.20E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE6:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE6:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE6:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME7 -2.10E-05S");
	    GpibWrt("MEAS:DSP:AMPLITUDE7:HLIMIT:VALUE -30.0");
	    GpibWrt("MEAS:DSP:AMPLITUDE7:HLIMIT:STATE 1");
	    GpibWrt("MEAS:DSP:AMPLITUDE7:LLIMIT:STATE 0");

	    GpibWrt("DSP:AMPLITUDE:TIME8 -2.00E-05S");

⌨️ 快捷键说明

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