176
Chapter 3
Programming Examples
Measuring Harmonic Distortion (RS-232)
/*Query and read the marker amplitude in Volts*/
/*Store the result in the fHarmV array.*/
viQueryf(viESA,"CALC:MARK:Y?\n","%1f", &fHarmV[lNum]);
/*Change the amplitude units to dBm */
viPrintf(viESA,"UNIT:POW DBM\n");
/* Read the marker amplitude */
viQueryf(viESA,"CALC:MARK:Y?\n","%1f", &fHarmDbm[lNum]);
}
/*Sum the square of each element in the fHarmV array and calculate
the relative amplitude of each harmonic relative to the fundamental*/
for (lNum=2;lNum<=lMaxHarmonic;lNum++)
{
dSumSquare= dSum (pow (double(fHarmV[lNum]) ,2.0));
/* Relative Amplitude */
fRelAmptd[lNum] = fHarmDbm[lNum] - fFundaAmptdDbm ;
}
/*Calculate the total harmonic distortion by dividing the square root of
the sum of the squares (dSumSquare) by the fundamental amplitude in Volts
(dFundaAmptdV).Multiply this value by 100 to obtain a result in percent*/
dPrcntDistort = ((sqrt(double (dSumSquare))) /dFundaAmptdV) *100 ;
/*Fundamental amplitude in dBm */
printf("\nFundamental Amplitude:
%
lf dB \n",fFundaAmptdDbm);
/*Fundamental frequency in MHz*/
printf("Fundamental Frequency is:
%
lf MHz \n",dFundamental/10e5);
/*Relative amplitude of each harmonic in dBc*/
for (lNum=2;lNum<=lMaxHarmonic;lNum++)
printf("Relative amplitude of Harmonic[%d]:
%
lf dBc
\n",lNum,fRelAmptd[lNum]);
/*Total harmonic distortion in percent*/
printf("Total Harmonic Distortion:
%
lf percent\n",dPrcntDistort);
/*Close the session*/
viClose(viESA);
viClose(defaultRM);
}