Ejemplo n.º 1
0
void
avtVectorGlyphMapper::SetMappersMinMax(void)
{
    if (mappers == NULL)
    {
        //
        // This happens when SetMin is called before the mappers are
        // initialized.
        //
        return;
    }

    double mmin = 0.;
    double mmax = 0.;

    if (limitsMode == 1 ) // use current plot extents
    {
        GetCurrentRange(mmin, mmax);
    }
    else  // use either original data extents or user-specified limits
    {
        GetRange(mmin, mmax);
    }

    for (int i = 0 ; i < nMappers ; i++)
    {
        if (mappers[i] != NULL)
        {
            mappers[i]->SetScalarRange(mmin, mmax);
        }
    }
}
Ejemplo n.º 2
0
void MeasuringReceiver::Recalibrate(double &centerOut, double &powerOut, IQCapture &iqc)
{
    int atten, gain;
    MeasRcvrRange level = GetCurrentRange();

    switch(level) {
    case MeasRcvrRangeHigh: atten = 30; gain = 1; break;
    case MeasRcvrRangeMid: atten = 30; gain = 3; break;
    case MeasRcvrRangeLow: atten = 0; gain = 3; break;
    }

    emit updateLabels("", "", "", "");
    emit updateRangeLevelText("Calibrating", rangeColorGreen);
    emit updateRangeEnabled(rangeLevelNone);
    emit updateEntryEnabled(false);

    device->ConfigureForTRFL(freqEntry->GetFrequency(), level, atten, gain, descriptor);
    iqc.capture.resize(descriptor.returnLen);
    for(int i = 0; i < 3; i++) {
        device->GetIQFlush(&iqc, true);
    }
    centerOut = getSignalFrequency(iqc.capture, descriptor.sampleRate); // 312500.0);
    centerOut /= descriptor.sampleRate; //312500.0;
    for(int i = 0; i < 30; i++) { // Amplitude settles in roughly 30 packets ?
        if(i % 10 == 0) {
            QString calStr = "Calibrating";
            for(int j = 0; j < (i / 10) + 1; j++) calStr += ".";
            emit updateRangeLevelText(calStr, rangeColorGreen);
        }
        device->GetIQFlush(&iqc, true);
        getPeakCorrelation(&iqc.capture[0], 4096, centerOut,
                centerOut, powerOut, descriptor.sampleRate);
        std::cout << "Pre Center " << centerOut << " " << powerOut << std::endl;
    }

    emit updateRangeLevelText("", rangeColorBlack);
    emit updateEntryEnabled(true);
    recalibrate = false;
}
Ejemplo n.º 3
0
void MeasuringReceiver::ProcessThread()
{
    IQCapture capture;
    double center, power, relative, offset;
    std::list<double> average;
    std::vector<complex_f> full;

    while(running) {
        // Reinitialize to start tuned level measurements over
        if(reinitialize) {
            ampGroup->button(0)->setChecked(true); // Select high power
            emit updateRangeEnabled(rangeLevelNone);
            power = 0.0;
            offset = 0.0;
            relative = 0.0;
            reinitialize = false;
            recalibrate = true;
        }

        // Recalibrates to a new range
        // Range must be chosen before entering this block
        if(recalibrate) {
            offset += (power - relative);
            Recalibrate(center, power, capture);
            relative = power;
            full.resize(descriptor.returnLen * 3);
            average.clear();
        }

        device->GetIQFlush(&capture, true);
        simdCopy_32fc(&capture.capture[0], &full[0], descriptor.returnLen);
        for(int i = 1; i < 3; i++) {
            device->GetIQ(&capture);
            simdCopy_32fc(&capture.capture[0], &full[i * descriptor.returnLen], descriptor.returnLen);
        }
        getPeakCorrelation(&full[0], descriptor.returnLen*3, center, center, power, descriptor.sampleRate);
        std::cout << "Post center " << center << " " << power << "\n";

        if(device->ADCOverflow()) {
            emit updateRangeLevelText("IF Overload", rangeColorRed);
        } else {
            if(GetCurrentRange() == MeasRcvrRangeHigh) {
                if(power > -25.0) {
                    emit updateRangeLevelText("", rangeColorBlack);
                    emit updateRangeEnabled(rangeLevelNone);
                } else if(power < -40.0) {
                    emit updateRangeLevelText(MeasRcvrRangeMid, "Passed Mid-Range", rangeColorRed);
                    emit updateRangeEnabled(rangeLevelNone);
                } else {
                    emit updateRangeLevelText(MeasRcvrRangeMid, "Recal at new range", rangeColorOrange);
                    emit updateRangeEnabled(MeasRcvrRangeMid);
                }
            } else if(GetCurrentRange() == MeasRcvrRangeMid) {
                if(power > -50.0) {
                    emit updateRangeLevelText("", rangeColorBlack);
                    emit updateRangeEnabled(rangeLevelNone);
                } else if(power < -65.0) {
                    emit updateRangeLevelText(MeasRcvrRangeLow, "Passed Low-Range", rangeColorRed);
                    emit updateRangeEnabled(rangeLevelNone);
                } else {
                    emit updateRangeLevelText(MeasRcvrRangeLow, "Recal at new range", rangeColorOrange);
                    emit updateRangeEnabled(MeasRcvrRangeLow);
                }
            } else {
                emit updateRangeLevelText("", rangeColorBlack);
                emit updateRangeEnabled(rangeLevelNone);
            }
        }

        // Lets update our text
        double diff = (power - relative) + offset;
        average.push_front(diff);
        while(average.size() > 20) average.pop_back();
        double avgPower = 0.0;
        for(double d : average) avgPower += d;
        avgPower /= average.size();

        QString centerStr, powerStr, relativeStr, averageStr;
        centerStr = Frequency(freqEntry->GetFrequency() +
                              center * descriptor.sampleRate/*312500.0*/).GetFreqString();
        powerStr.sprintf("%.3f dBm", power);
        relativeStr.sprintf("%.3f dB", diff);
        averageStr.sprintf("%.3f dB", avgPower);

        emit updateLabels(centerStr, powerStr, relativeStr, averageStr);
    }

    device->Abort();
}