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

📄 minst.c

📁 Atheros AP Test with Agilent N4010A source code
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -