📄 minst.c
字号:
if (reset) {
gpibWrite(ud, qq(":FREQ:SPAN %f;", span)); // span
gpibWrite(ud, ":POW:ATT 20;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 1E6;VID 3E6;"); // resolution / video bandwidth
gpibWrite(ud, ":DET SAMP;"); // detector mode (sample)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":AVER:TYPE POW;"); // power averaging
}
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, qq(":AVER:COUN %i;STATE 1;", avg_count)); // take 20 averages
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
return atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
}
MANLIB_API double spaMeasPpsdDts(const int ud,
const double center,
const double span,
const double ref_level,
const int reset) {
int rsp = 0;
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
gpibWrite(ud, qq(":FREQ:CENT %f;", center)); // center frequency
if (reset) {
gpibWrite(ud, qq(":FREQ:SPAN %f;", span)); // span
gpibWrite(ud, ":POW:ATT 20;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 3E3;VID 10E3;"); // resolution / video bandwidth
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":AVER 0;"); // averaging off
}
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, ":TRAC:MODE MAXH;"); // max hold on
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
return atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
}
MANLIB_API double spaMeasEbw(const int ud,
const double center,
const double span,
const double ref_level,
const int reset) {
int rsp = 0;
double delta, pos;
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
gpibWrite(ud, qq(":FREQ:CENT %f;", center)); // center frequency
if (reset) {
gpibWrite(ud, qq(":FREQ:SPAN %f;", span)); // span
gpibWrite(ud, ":POW:ATT 20;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 100E3;VID 1E3;"); // resolution / video bandwidth
// VBW in spec is 1MHz but as this is a
// relative measurement it does not matter
// VBW=1KHz gives more accurate measurement
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":AVER 0;"); // averaging off
}
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":TRAC:MODE VIEW;"); // view
gpibWrite(ud, ":CALC:MARK:MODE POS;"); // marker mode (position)
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
gpibWrite(ud, ":CALC:MARK:MODE DELT;"); // marker mode (delta)
gpibWrite(ud, qq(":CALC:MARK:X %f;", -span)); // move marker to one end
delta = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude delta
pos = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure position delta
while (delta < -26) {
pos = pos + 500E3;
gpibWrite(ud, qq(":CALC:MARK:X %f;", pos)); // move marker forward by 500KHz
delta = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude delta
}
gpibWrite(ud, ":CALC:MARK:MODE DELT;"); // marker mode (delta)
gpibWrite(ud, qq(":CALC:MARK:X %f;", span)); // move marker to other end
pos = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure position delta
delta = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude delta
while (delta < 0) {
pos = pos - 500E3;
gpibWrite(ud, qq(":CALC:MARK:X %f;", pos)); // move marker backward by 500KHz
delta = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude delta
}
return atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure EB
}
MANLIB_API double spaMeasPkPwr(const int ud,
const double center,
const double vbw,
const double ebw,
const double ref_level,
const int reset) {
int rsp = 0;
double ch_pwr;
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
gpibWrite(ud, qq(":FREQ:CENT %f;", center)); // center frequency
if (reset) {
gpibWrite(ud, ":POW:ATT 30;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":AVER 0;"); // averaging off
}
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
ch_pwr = atof(gpibQuery(ud, ":MEAS:CHP:CHP?", 55L)); // Set the instrument mode
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, qq(":CHP:BWID:INT %f;", ebw)); // Integration BW
gpibWrite(ud, qq(":CHP:FREQ:SPAN %f;", 2*ebw)); // span
gpibWrite(ud, ":BAND:RES 1E6;"); // resolution bandwidth
gpibWrite(ud, qq(":BAND:VID %f;", vbw)); // video bandwidth
sleep(10000);
ch_pwr = atof(gpibQuery(ud, ":READ:CHP:CHP?", 55L)); // Read channel power
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
return ch_pwr; // Return channel power
}
MANLIB_API double pmMeasPeakPower(const int ud, const int reset) {
char *buf, /*string_holder,*/ *reading; // E4416A
if (reset) gpibWrite(ud, "*RCL 5;\n");
// take a reading
gpibWrite(ud, ":INIT:CONT ON;");
gpibWrite(ud, ":TRIG:SOUR INT;");
gpibWrite(ud, ":TRIG:LEV:AUTO OFF;");
gpibWrite(ud, ":TRIG:LEV -20.00DBM;");
gpibWrite(ud, ":DISP:WIND2:FORM DNUM;");
gpibWrite(ud, "CALC2:FEED1 'POW:PEAK';");
buf = gpibQuery(ud, "FETCH2:POW?\n", 20L);
// parse output
reading = strtok(buf,",");
return (reading == NULL ? -120. : atof(reading));
}
// This subroutine returns the frequency and levels of upto 5 spurs in the specified band which are above the
// specified threshold
MANLIB_API char *spaMeasTxSpurs(const int ud,
const double freq_start,
const double freq_stop,
const double spur_thresh,
const int reset) {
int n, rsp = 0;
int i = 0;
int over = 0;
double spur_level[5] = {-120.00, -120.00, -120.00, -120.00, -120.00};
double spur_freq[5] = {0.000E+000, 0.000E+000, 0.000E+000, 0.000E+000, 0.000E+000};
double current_spur_level, current_spur_freq;
static char tx_spurs[105];
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
// change to channel frequency
gpibWrite(ud, qq(":FREQ:STAR %f;", freq_start)); // stop frequency
gpibWrite(ud, qq(":FREQ:STOP %f;", freq_stop)); // stop frequency
gpibWrite(ud, ":BAND:RES 1E6;VID 1E3;"); // resolution / video bandwidth
gpibWrite(ud, ":POW:ATT 0;"); // Attenuation
gpibWrite(ud, ":DISP:WIND:TRAC:Y:RLEV 0;"); // reference level
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":AVER 0;"); // averaging off
gpibWrite(ud, ":DET SAMP;"); // detector mode (sample)
gpibWrite(ud, ":CALC:MARK:MODE POS;"); // marker mode (position)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find max peak
current_spur_level = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
current_spur_freq = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure position
while ((i < 5) && (current_spur_level > spur_thresh) && (over != 1)) { // Measure upto 5 spurs that are above the threshold
spur_level[i] = current_spur_level;
spur_freq[i] = current_spur_freq;
gpibWrite(ud, ":CALC:MARK:MAX:NEXT;"); // find next peak
current_spur_level = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
current_spur_freq = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure position
if (fabs(current_spur_freq - spur_freq[i]) < 10E6) { // No more new peaks
over = 1;
}
if (fabs(current_spur_freq - spur_freq[i]) < 100E6) { // Skip nearby peaks
continue;
}
i++;
}
n = sprintf(tx_spurs, "%07.2f, %10.3E; %07.2f, %10.3E; %07.2f, %10.3E; %07.2f, %10.3E; %07.2f, %10.3E",
spur_level[0], spur_freq[0], spur_level[1], spur_freq[1], spur_level[2], spur_freq[2], spur_level[3], spur_freq[3], spur_level[4], spur_freq[4]);
tx_spurs[n] = '\0';
return tx_spurs;
}
//++JC++
MANLIB_API double spaMeasPkAvgRatio(const int ud,
const double center,
const double ref_level,
const int reset) {
int rsp = 0;
double peak = 0, avg = 0;
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
// change to channel frequency
gpibWrite(ud, qq(":FREQ:CENT %f;", center));
if (reset) {
gpibWrite(ud, ":FREQ:SPAN 4E7;"); // span
gpibWrite(ud, ":BAND:RES 1E6;VID 1E6;"); // resolution / video bandwidth
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 5;"); // scale
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
}
// Make Peak Measurement
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":BAND:VID 1E6;"); // video bandwidth
gpibWrite(ud, ":TRAC:MODE MAXH;"); // max hold on
gpibWrite(ud, ":INIT:CONT 1;"); // continuous sweep
sleep (10000); // wait for trace to build up
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
peak = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // read amplitude
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
// Make Average Measurement
gpibWrite(ud, ":BAND:VID 3E4;"); // video bandwidth
gpibWrite(ud, ":TRAC:MODE MAXH;"); // max hold on
gpibWrite(ud, ":INIT:CONT 1;"); // continuous sweep
sleep (10000); // wait for trace to build up
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
avg = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // read amplitude
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
return (peak - avg); // return peak to average ratio
}
MANLIB_API double spaMeasFreqDev(const int ud,
const double center,
const double ref_level,
const int reset) {
int rsp = 0;
double meas_freq;
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
// change to channel frequency
gpibWrite(ud, qq(":FREQ:CENT %f;", center));
if (reset) {
gpibWrite(ud, ":FREQ:SPAN 8E6;"); // span
gpibWrite(ud, ":BAND:RES 3E5;VID 3E3;"); // resolution / video bandwidth
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":AVER 0;"); // averaging off
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
gpibWrite(ud, ":CALC:MARK:CPE ON;"); // continuous peaking
gpibWrite(ud, ":CALC:MARK:FCO:RES 100;"); // frequency counter resolution
gpibWrite(ud, ":CALC:MARK:FCO 1;"); // frequency counter on
}
// Make Frequency Measurement
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
meas_freq = atof(gpibQuery(ud, ":CALC:MARK:FCO:X?", 55L)); // get frequency
return ((meas_freq/center)-1)*1E6; // return ppm
}
MANLIB_API char *spaMeasTxSpuriousEm(const int ud,
const double ref_level,
const int reset) {
int rsp = 0, n, cf_index;
double pwr, freq, pwr_max0, pwr_max1, pwr_max2, freq_max0, freq_max1, freq_max2;
static char emissions[62] = "-120.00, 0.000E+000, -120.00, 0.000E+000, -120.00, 0.000E+000";
if (reset) {
rsp = atoi(gpibQuery(ud, "IP;DONE?", 5L)); // reset
gpibWrite(ud, "SNGLS;"); // single sweep
gpibWrite(ud, "AT AUTO;"); // auto attenuation
gpibWrite(ud, qq("RL %fDB;", ref_level)); // reference level
gpibWrite(ud, "LG 5DB;"); // scale
gpibWrite(ud, "FA 10MHZ;"); // start freq
gpibWrite(ud, "FB 1GHZ;"); // stop freq
gpibWrite(ud, "RB 1MHZ;"); // resolution bandwidth
gpibWrite(ud, "VB 10KHZ;"); // video bandwidth
gpibWrite(ud, "DET POS;"); // detector mode (peak)
gpibWrite(ud, "SS MAN;"); // freq step size manual
gpibWrite(ud, "SS 1GHZ;"); // freq step size 1 GHz
}
// Make measurement
// Search between 10 MHz and 1 GHz
gpibWrite(ud, "FA 10MHZ;");
gpibWrite(ud, "FB 1GHZ;");
gpibWrite(ud, "TS;");
gpibQuery(ud, "DONE?",5L);
gpibWrite(ud, "MKPK HI;");
pwr_max0 = atof(gpibQuery(ud, "MKA?",55L));
freq_max0 = atof(gpibQuery(ud
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -