📄 minst.c
字号:
double sum = 0, avg = 0, scale = 0;
double *trace;
const double kn = 0.9;
int rsp, i, n = 0, iSwpPnts = spa_sweep_points();
// 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, qq(":FREQ:SPAN %f;", span)); // span
gpibWrite(ud, qq(":BAND:RES %f;VID %f;", rbw, vbw)); // 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, (averages == 0 ? (char *)":AVER 0;" : // num averages
qq(":AVER:COUN %u;STATE 1;", averages)));
gpibWrite(ud, qq(":DET %s;", (det_mode == 1 ? "NEG" : // detector mode
(det_mode == 2 ? "POS" :
"SAMP"))));
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
}
if (max_hold) {
gpibWrite(ud, ":TRAC:MODE MAXH;"); // max hold on
}
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
// return the channel power
trace = spa_get_trace(spa);
for (i = 0; i < iSwpPnts ; i++) {
sum += pow(10,(trace[i]/10));
n++;
}
avg = sum / n;
scale = int_bw / (rbw * kn);
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
return ( 10 * log10( scale * avg ) );
}
MANLIB_API double spaMeasSpectralDensity(const int ud,
const double center,
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));
// 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 3E6;"); // 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, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":DET SAMP;"); // detector mode (sample)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
}
// Make Power Spectral Density Measurement
gpibWrite(ud, ":AVER:COUN 100;STATE 1;"); // take 100 averages
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
return atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // return amplitude
}
MANLIB_API char *spaMeasOutOfBandEm(const int ud,
const double ref_level,
const int reset) {
int n, rsp = 0;
double pwr0, pwr1, pwr2, pwr3, freq0, freq1, freq2, freq3;
static char emissions[83] = "-120.00, 0.000E+000, -120.00, 0.000E+000, -120.00, 0.000E+000, -120.00, 0.000E+000";
if (reset) {
rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
gpibWrite(ud, ":FREQ:STAR 5.13E9;"); // start frequency
gpibWrite(ud, ":FREQ:STOP 5.142E9;"); // stop frequency
gpibWrite(ud, ":BAND:RES 1E6;VID 1E4;"); // 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, ":AVER 0;"); // averaging off
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // max hold off
}
// Make measurement
// 5.13 to 5.142 GHz
gpibWrite(ud, ":FREQ:STAR 5.13E9;"); // start frequency
gpibWrite(ud, ":FREQ:STOP 5.142E9;"); // stop frequency
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr0 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq0 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
// 5.142 to 5.15 GHz
gpibWrite(ud, ":FREQ:STAR 5.142E9;"); // start frequency
gpibWrite(ud, ":FREQ:STOP 5.15E9;"); // stop frequency
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr1 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq1 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
// 5.25 to 5.258 GHz
gpibWrite(ud, ":FREQ:STAR 5.25E9;"); // start frequency
gpibWrite(ud, ":FREQ:STOP 5.258E9;"); // stop frequency
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr2 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq2 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
// 5.258 to 5.27 GHz
gpibWrite(ud, ":FREQ:STAR 5.258E9;"); // start frequency
gpibWrite(ud, ":FREQ:STOP 5.27E9;"); // stop frequency
gpibWrite(ud, ":INIT:IMM;*WAI;"); // single sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr3 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq3 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
n = sprintf(emissions, "%07.2f, %10.3E, %07.2f, %10.3E, %07.2f, %10.3E, %07.2f, %10.3E",
pwr0, freq0, pwr1, freq1, pwr2, freq2, pwr3, freq3);
emissions[n] = '\0';
return emissions;
}
MANLIB_API char *spaGetModelNo(const int ud,
const int reset) {
static char *sa_model;
int rsp = 0;
if (reset) {
rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L)); // reset
}
// Read model number
sa_model = gpibQuery(ud, "*IDN?", 50L);
return sa_model;
}
//++JC++
MANLIB_API double spaMeasHarmonics(const int ud,
const double center,
const double vbw,
const double ref_level,
const int reset) {
int n, rsp = 0;
double pwr0, freq0;
static char emissions[21] = "-120.00, 0.000E+000";
// 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, ":FREQ:SPAN 50E6;"); // span
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 1E6;"); // resolution bandwidth
gpibWrite(ud, ":AVER 0;"); // averaging off
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
}
gpibWrite(ud, qq(":BAND:VID %f;", vbw)); // video bandwidth
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
pwr0 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq0 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
n = sprintf(emissions, "%07.2f, %10.3E",
pwr0, freq0);
emissions[n] = '\0';
return pwr0;
}
MANLIB_API double spaMeasTelecEmission2(const int ud,
const double freq_start,
const double freq_stop,
const double ref_level,
const int reset) {
int n, rsp = 0;
double pwr0, freq0;
static char emissions[21] = "-120.00, 0.000E+000";
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
printf("Start: %f\n", freq_start);
printf("Stop: %f\n", freq_stop);
gpibWrite(ud, qq(":FREQ:STAR %f;", freq_start)); // start frequency
gpibWrite(ud, qq(":FREQ:STOP %f;", freq_stop)); // stop frequency
if (reset) {
gpibWrite(ud, ":POW:ATT 0;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 30E3;VID 30E3;"); // resolution / video bandwidth
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":DET SAMP;"); // detector mode (sample)
}
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, ":AVER:COUN 10;STATE 1;"); // take 10 averages
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr0 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq0 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
n = sprintf(emissions, "%07.2f, %10.3E",
pwr0, freq0);
emissions[n] = '\0';
return pwr0;
}
MANLIB_API double spaMeasTelecSpurious(const int ud,
const double freq_start,
const double freq_stop,
const double ref_level,
const int reset) {
int n, rsp = 0;
double pwr0, freq0;
static char emissions[21] = "-120.00, 0.000E+000";
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
printf("Start: %f\n", freq_start);
printf("Stop: %f\n", freq_stop);
gpibWrite(ud, qq(":FREQ:STAR %f;", freq_start)); // stop frequency
gpibWrite(ud, qq(":FREQ:STOP %f;", freq_stop)); // stop frequency
if (reset) {
gpibWrite(ud, ":POW:ATT 0;"); // Attenuation
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 1E6;VID 1E6;"); // resolution / video bandwidth
gpibWrite(ud, ":AVER 0;"); // averaging off
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
}
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
gpibWrite(ud, ":CALC:MARK:SET:CENT;"); // set center to the marker position
gpibWrite(ud, ":FREQ:SPAN 0;"); // span
gpibWrite(ud, ":DET SAMP;"); // detector mode (sample)
gpibWrite(ud, ":TRAC:MODE WRIT;"); // clear write
gpibWrite(ud, ":INIT:IMM;*WAI;"); // trigger sweep
gpibWrite(ud, ":CALC:MARK:MAX;"); // find peak
pwr0 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq0 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
n = sprintf(emissions, "%07.2f, %10.3E",
pwr0, freq0);
emissions[n] = '\0';
return pwr0;
}
MANLIB_API double spaMeasBandEdge(const int ud,
const double freq_start,
const double freq_stop,
const double vbw,
const double ref_level,
const int reset) {
int n, rsp = 0;
double pwr0, freq0;
static char emissions[21] = "-120.00, 0.000E+000";
// reset prior to setting the center frequency
if (reset) rsp = atoi(gpibQuery(ud, "*RST;*OPC?", 5L));
gpibWrite(ud, qq(":FREQ:STAR %f;", freq_start)); // stop frequency
gpibWrite(ud, qq(":FREQ:STOP %f;", freq_stop)); // stop frequency
if (reset) {
gpibWrite(ud, qq(":DISP:WIND:TRAC:Y:RLEV %f;", ref_level)); // reference level
gpibWrite(ud, ":BAND:RES 1E6;"); // resolution bandwidth
gpibWrite(ud, ":AVER 0;"); // averaging off
gpibWrite(ud, ":DET POS;"); // detector mode (peak)
gpibWrite(ud, ":DISP:WIND:TRAC:Y:PDIV 10;"); // scale
gpibWrite(ud, ":INIT:CONT 0;"); // single sweep
}
gpibWrite(ud, qq(":BAND:VID %f;", vbw)); // video bandwidth
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
pwr0 = atof(gpibQuery(ud, ":CALC:MARK:Y?", 55L)); // measure amplitude
freq0 = atof(gpibQuery(ud, ":CALC:MARK:X?", 55L)); // measure frequency
n = sprintf(emissions, "%07.2f, %10.3E",
pwr0, freq0);
emissions[n] = '\0';
return pwr0;
}
MANLIB_API double spaMeasPpsdUnii(const int ud,
const double center,
const double span,
const double ref_level,
const int reset) {
int rsp = 0;
//++JC++ int avg_count = 100;
int avg_count = 20; // 100 averages takes too much time
// 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -