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

📄 minst.c

📁 Atheros AP Test with Agilent N4010A source code
💻 C
📖 第 1 页 / 共 5 页
字号:

    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 + -