X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gr-qtgui%2Fsrc%2Flib%2Fspectrumdisplayform.cc;h=f52a63d1f0a85c0ff555a8036b19fd0530e90567;hb=a45e2a94328fee03910e9dbfa04b48bf9ba15f61;hp=0170f78623afa3d05ed9758ffdddef051a007bbe;hpb=6606af991b15174cbdbaca738669a21461b0fbe6;p=debian%2Fgnuradio diff --git a/gr-qtgui/src/lib/spectrumdisplayform.cc b/gr-qtgui/src/lib/spectrumdisplayform.cc index 0170f786..f52a63d1 100644 --- a/gr-qtgui/src/lib/spectrumdisplayform.cc +++ b/gr-qtgui/src/lib/spectrumdisplayform.cc @@ -18,7 +18,7 @@ SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent) _waterfallDisplayPlot = new WaterfallDisplayPlot(WaterfallPlotDisplayFrame); if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { - _waterfall3DDisplayPlot = new Waterfall3DDisplayPlot(Waterfall3DPlotDisplayFrame); + //_waterfall3DDisplayPlot = new Waterfall3DDisplayPlot(Waterfall3DPlotDisplayFrame); } _timeDomainDisplayPlot = new TimeDomainDisplayPlot(TimeDomainDisplayFrame); @@ -82,7 +82,7 @@ SpectrumDisplayForm::~SpectrumDisplayForm() // Qt deletes children when parent is deleted // Don't worry about deleting Display Plots - they are deleted when parents are deleted - /* delete _intValidator; */ + delete _intValidator; delete[] _realFFTDataPoints; delete[] _averagedValues; @@ -93,6 +93,7 @@ SpectrumDisplayForm::~SpectrumDisplayForm() delete _historyVector; + displayTimer->stop(); delete displayTimer; } @@ -121,7 +122,7 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate const double* realTimeDomainDataPoints = spectrumUpdateEvent->getRealTimeDomainPoints(); const double* imagTimeDomainDataPoints = spectrumUpdateEvent->getImagTimeDomainPoints(); const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); - const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp();; + const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp(); const bool repeatDataFlag = spectrumUpdateEvent->getRepeatDataFlag(); const bool lastOfMultipleUpdatesFlag = spectrumUpdateEvent->getLastOfMultipleUpdateFlag(); const timespec generatedTimestamp = spectrumUpdateEvent->getEventGeneratedTimestamp(); @@ -133,18 +134,24 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate const std::complex* complexDataPointsPtr = complexDataPoints+numFFTDataPoints/2; double* realFFTDataPointsPtr = _realFFTDataPoints; + double sumMean, localPeakAmplitude, localPeakFrequency; + const double fftBinSize = (_stopFrequency-_startFrequency) / + static_cast(numFFTDataPoints); + localPeakAmplitude = -HUGE_VAL; + sumMean = 0.0; + // Run this twice to perform the fftshift operation on the data here as well + std::complex scaleFactor = std::complex((float)numFFTDataPoints); for(uint64_t point = 0; point < numFFTDataPoints/2; point++){ - // Calculate dBm - // 50 ohm load assumption - // 10 * log10 (v^2 / (2 * 50.0 * .001)) = 10 * log10( v^2 * 10) - // 75 ohm load assumption - // 10 * log10 (v^2 / (2 * 75.0 * .001)) = 10 * log10( v^2 * 15) - - // perform scaling here - std::complex pt = (*complexDataPointsPtr) / std::complex((float)numFFTDataPoints); + std::complex pt = (*complexDataPointsPtr) / scaleFactor; *realFFTDataPointsPtr = 10.0*log10((pt.real() * pt.real() + pt.imag()*pt.imag()) + 1e-20); + if(*realFFTDataPointsPtr > localPeakAmplitude) { + localPeakFrequency = static_cast(point) * fftBinSize; + localPeakAmplitude = *realFFTDataPointsPtr; + } + sumMean += *realFFTDataPointsPtr; + complexDataPointsPtr++; realFFTDataPointsPtr++; } @@ -153,9 +160,15 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate // second half of the plotted data complexDataPointsPtr = complexDataPoints; for(uint64_t point = 0; point < numFFTDataPoints/2; point++){ - std::complex pt = (*complexDataPointsPtr) / std::complex((float)numFFTDataPoints); + std::complex pt = (*complexDataPointsPtr) / scaleFactor; *realFFTDataPointsPtr = 10.0*log10((pt.real() * pt.real() + pt.imag()*pt.imag()) + 1e-20); + if(*realFFTDataPointsPtr > localPeakAmplitude) { + localPeakFrequency = static_cast(point) * fftBinSize; + localPeakAmplitude = *realFFTDataPointsPtr; + } + sumMean += *realFFTDataPointsPtr; + complexDataPointsPtr++; realFFTDataPointsPtr++; } @@ -164,24 +177,9 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate if(!repeatDataFlag){ _AverageHistory(_realFFTDataPoints); - double sumMean; - const double fft_bin_size = (_stopFrequency-_startFrequency) / - static_cast(numFFTDataPoints); - - // find the peak, sum (for mean), etc - _peakAmplitude = -HUGE_VAL; - sumMean = 0.0; - for(uint64_t number = 0; number < numFFTDataPoints; number++){ - // find peak - if(_realFFTDataPoints[number] > _peakAmplitude){ - // Calculate the frequency relative to the local bw, adjust for _startFrequency later - _peakFrequency = (static_cast(number) * fft_bin_size); - _peakAmplitude = _realFFTDataPoints[number]; - // _peakBin = number; - } - // sum (for mean) - sumMean += _realFFTDataPoints[number]; - } + // Only use the local info if we are not repeating data + _peakAmplitude = localPeakAmplitude; + _peakFrequency = localPeakFrequency; // calculate the spectral mean // +20 because for the comparison below we only want to throw out bins @@ -231,6 +229,7 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate d_update_time, dataTimestamp, spectrumUpdateEvent->getDroppedFFTFrames()); } + /* if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { if( _openGLWaterfall3DFlag == 1 && (tabindex == d_plot_waterfall3d)) { _waterfall3DDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints, @@ -238,6 +237,7 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate spectrumUpdateEvent->getDroppedFFTFrames()); } } + */ } @@ -268,7 +268,7 @@ SpectrumDisplayForm::resizeEvent( QResizeEvent *e ) if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { s.setWidth(Waterfall3DPlotDisplayFrame->width()); s.setHeight(Waterfall3DPlotDisplayFrame->height()); - emit _waterfall3DDisplayPlot->resizeSlot(&s); + //emit _waterfall3DDisplayPlot->resizeSlot(&s); } s.setWidth(ConstellationDisplayFrame->width()); @@ -295,6 +295,7 @@ SpectrumDisplayForm::customEvent( QEvent * e) waterfall3DMaximumIntensityChangedCB(Waterfall3DMaximumIntensityWheel->value()); // Check for Hardware Acceleration of the OpenGL + /* if(!_waterfall3DDisplayPlot->format().directRendering()){ // Only ask this once while the program is running... if(_openGLWaterfall3DFlag == -1){ @@ -307,6 +308,7 @@ SpectrumDisplayForm::customEvent( QEvent * e) else{ _openGLWaterfall3DFlag = 1; } + */ } if(_openGLWaterfall3DFlag != 1){ @@ -415,6 +417,7 @@ SpectrumDisplayForm::SetFrequencyRange(const double newCenterFrequency, if(fdiff > 0) { std::string strunits[4] = {"Hz", "kHz", "MHz", "GHz"}; + std::string strtime[4] = {"sec", "ms", "us", "ns"}; double units10 = floor(log10(fdiff)); double units3 = std::max(floor(units10 / 3.0), 0.0); double units = pow(10, (units10-fmod(units10, 3.0))); @@ -424,23 +427,27 @@ SpectrumDisplayForm::SetFrequencyRange(const double newCenterFrequency, _stopFrequency = newStopFrequency; _centerFrequency = newCenterFrequency; - _frequencyDisplayPlot->SetFrequencyRange(newStartFrequency, - newStopFrequency, - newCenterFrequency, + _frequencyDisplayPlot->SetFrequencyRange(_startFrequency, + _stopFrequency, + _centerFrequency, UseRFFrequenciesCheckBox->isChecked(), units, strunits[iunit]); - _waterfallDisplayPlot->SetFrequencyRange(newStartFrequency, - newStopFrequency, - newCenterFrequency, + _waterfallDisplayPlot->SetFrequencyRange(_startFrequency, + _stopFrequency, + _centerFrequency, UseRFFrequenciesCheckBox->isChecked(), units, strunits[iunit]); if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { - _waterfall3DDisplayPlot->SetFrequencyRange(newStartFrequency, - newStopFrequency, - newCenterFrequency, + /* + _waterfall3DDisplayPlot->SetFrequencyRange(_startFrequency, + _stopFrequency, + _centerFrequency, UseRFFrequenciesCheckBox->isChecked(), units, strunits[iunit]); + */ } + _timeDomainDisplayPlot->SetSampleRate(_stopFrequency - _startFrequency, + units, strtime[iunit]); } } @@ -530,7 +537,7 @@ SpectrumDisplayForm::Reset() _waterfallDisplayPlot->Reset(); if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { - _waterfall3DDisplayPlot->Reset(); + //_waterfall3DDisplayPlot->Reset(); } } @@ -616,9 +623,11 @@ SpectrumDisplayForm::waterfall3DMaximumIntensityChangedCB( double newValue ) else{ Waterfall3DMaximumIntensityWheel->setValue(Waterfall3DMinimumIntensityWheel->value()); } - + + /* _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(), Waterfall3DMaximumIntensityWheel->value()); + */ } } @@ -633,9 +642,11 @@ SpectrumDisplayForm::waterfall3DMinimumIntensityChangedCB( double newValue ) else{ Waterfall3DMinimumIntensityWheel->setValue(Waterfall3DMaximumIntensityWheel->value()); } - + + /* _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(), Waterfall3DMaximumIntensityWheel->value()); + */ } } @@ -732,8 +743,10 @@ SpectrumDisplayForm::Waterfall3DIntensityColorTypeChanged( int newType ) QMessageBox::information(this, "High Intensity Color Selection", "In the next window, select the high intensity color for the waterfall display", QMessageBox::Ok); highIntensityColor = QColorDialog::getColor(highIntensityColor, this); } + /* _waterfall3DDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor, highIntensityColor); + */ } } @@ -772,12 +785,17 @@ void SpectrumDisplayForm::ToggleTabWaterfall3D(const bool state) { if(state == true) { + /* if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { if(d_plot_waterfall3d == -1) { SpectrumTypeTab->addTab(Waterfall3DPage, "3D Waterfall Display"); d_plot_waterfall3d = SpectrumTypeTab->count()-1; } } + */ + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage)); + d_plot_waterfall3d = -1; + fprintf(stderr, "\nWARNING: The Waterfall3D plot has been disabled until we get it working.\n\n"); } else { SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage));