Chapter 3 167
Programming Examples
Measuring Harmonic Distortion (GPIB)
/*Measure each harmonic amplitude as follows: */
for ( lNum=2;lNum<=lMaxHarmonic;lNum++)
{
/*Measuring the Harmonic No#[%d] message */
printf("\n\t Measuring the Harmonic No [%d] \n",lNum );
/*Set the span to 20 MHz*/
viPrintf(viESA,"SENS:FREQ:SPAN 20 MHZ \n");
/*Set the center frequency to the nominal harmonic frequency*/
dHarmFreq = lNum*dFundamental;
viPrintf(viESA,"SENS:FREQ:CENT %lf HZ \n;",dHarmFreq);
/*Take a sweep and wait for the sweep completion*/
TakeSweep();
/*Perform a peak search and wait for completion */
viPrintf(viESA,"CALC:MARK:MAX\n");
/*increase timeout to 60 sec*/
viSetAttribute(viESA,VI_ATTR_TMO_VALUE,60000);
/*Activate signal track */
viPrintf(viESA,"CALC:MARK:TRCK:STAT ON\n");
/*Zoom down to a 100 kHz span */
viPrintf(viESA,"SENS:FREQ:SPAN 10e4\n");
/*Take a sweep and wait for the sweep completion*/
TakeSweep();
/* Signal track off */
viPrintf(viESA,"CALC:MARK:TRCK:STAT OFF\n");
/*Reset timeout to 3 sec*/
viSetAttribute(viESA,VI_ATTR_TMO_VALUE,3000);
/*Set Marker Amplitude in Volts*/
viPrintf(viESA,"UNIT:POW V\n");
/*Perform a peak search and wait for completion*/
viPrintf(viESA,"CALC:MARK:MAX\n");
/*Query and read the Marker Amplitude in Volts*/
/*Store the result in the array.*/