Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ MainWindow::MainWindow()
connect(dock, SIGNAL(fftOrZoomChanged(int, int)), plots, SLOT(setFFTAndZoom(int, int)));
connect(dock->powerMaxSlider, SIGNAL(valueChanged(int)), plots, SLOT(setPowerMax(int)));
connect(dock->powerMinSlider, SIGNAL(valueChanged(int)), plots, SLOT(setPowerMin(int)));
connect(dock->timeResolutionSlider, SIGNAL(valueChanged(int)), plots, SLOT(setTimeResolution(int)));
connect(dock->betaSlider, SIGNAL(valueChanged(int)), plots, SLOT(setBeta(int)));
connect(dock->cursorsCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableCursors);
connect(dock->scalesCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableScales);
connect(dock->cursorSymbolsSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), plots, &PlotView::setCursorSegments);
Expand Down
14 changes: 13 additions & 1 deletion plotview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ void PlotView::setFFTAndZoom(int size, int zoom)

void PlotView::setPowerMin(int power)
{
powerMin = power;
powerMin = power;
if (spectrogramPlot != nullptr)
spectrogramPlot->setPowerMin(power);
updateView();
Expand All @@ -396,6 +396,18 @@ void PlotView::setPowerMax(int power)
updateView();
}

void PlotView::setTimeResolution(int resolution)
{
if (spectrogramPlot != nullptr)
spectrogramPlot->setTimeResolution(resolution);
}

void PlotView::setBeta(int beta)
{
if (spectrogramPlot != nullptr)
spectrogramPlot->setBeta(beta);
}

void PlotView::paintEvent(QPaintEvent *event)
{
if (mainSampleSource == nullptr) return;
Expand Down
2 changes: 2 additions & 0 deletions plotview.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public slots:
void setFFTAndZoom(int fftSize, int zoomLevel);
void setPowerMin(int power);
void setPowerMax(int power);
void setTimeResolution(int resolution);
void setBeta(int beta);

protected:
void contextMenuEvent(QContextMenuEvent * event) override;
Expand Down
8 changes: 8 additions & 0 deletions spectrogramcontrols.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,14 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent

layout->addRow(new QLabel(tr("Zoom:")), zoomLevelSlider);

timeResolutionSlider = new QSlider(Qt::Horizontal, widget);
timeResolutionSlider->setRange(0, 99);
layout->addRow(new QLabel(tr("Time resolution:")), timeResolutionSlider);

betaSlider = new QSlider(Qt::Horizontal, widget);
betaSlider->setRange(0, 15);
layout->addRow(new QLabel(tr("Beta:")), betaSlider);

powerMaxSlider = new QSlider(Qt::Horizontal, widget);
powerMaxSlider->setRange(-140, 10);
layout->addRow(new QLabel(tr("Power max:")), powerMaxSlider);
Expand Down
2 changes: 2 additions & 0 deletions spectrogramcontrols.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ private slots:
QSlider *zoomLevelSlider;
QSlider *powerMaxSlider;
QSlider *powerMinSlider;
QSlider *timeResolutionSlider;
QSlider *betaSlider;
QCheckBox *cursorsCheckBox;
QSpinBox *cursorSymbolsSpinBox;
QLabel *rateLabel;
Expand Down
38 changes: 35 additions & 3 deletions spectrogramplot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,14 @@

SpectrogramPlot::SpectrogramPlot(std::shared_ptr<SampleSource<std::complex<float>>> src) : Plot(src), inputSource(src), fftSize(512), tuner(fftSize, this)
{
setFFTSize(fftSize);
zoomLevel = 1;
powerMax = 0.0f;
powerMin = -50.0f;
timeResolution = 0.0;
sampleRate = 0;
beta = 4.0;
frequencyScaleEnabled = false;
setFFTSize(fftSize);

for (int i = 0; i < 256; i++) {
float p = (float)i / 256;
Expand Down Expand Up @@ -274,12 +276,29 @@ std::shared_ptr<AbstractSampleSource> SpectrogramPlot::output()
void SpectrogramPlot::setFFTSize(int size)
{
float sizeScale = float(size) / float(fftSize);

fftSize = size;
fft.reset(new FFT(fftSize));

window.reset(new float[fftSize]);
for (int i = 0; i < fftSize; i++) {
window[i] = 0.5f * (1.0f - cos(Tau * i / (fftSize - 1)));
int zeroCount = (fftSize * timeResolution) / 100;
if ((zeroCount >= 0) && (zeroCount <= fftSize)) {
int windowSize = fftSize - zeroCount;
int leadingZeroCount = zeroCount/2;

for (int i = 0; i < leadingZeroCount; i++) {
window[i] = 0;
}
for (int i = 0; i < windowSize; i++) {
window[i + leadingZeroCount] = kaiser(i, windowSize, beta, 0.0);
}
for (int i = windowSize + leadingZeroCount; i < fftSize; i++) {
window[i] = 0;
}
} else {
for(int i = 0; i < fftSize; i++) {
window[i] = 0;
}
}

setHeight(fftSize);
Expand All @@ -303,6 +322,19 @@ void SpectrogramPlot::setPowerMin(int power)
pixmapCache.clear();
}

void SpectrogramPlot::setTimeResolution(int resolution)
{
timeResolution = resolution;
setFFTSize(fftSize);
invalidateEvent();
}

void SpectrogramPlot::setBeta(float beta)
{
this->beta = beta;
setFFTSize(fftSize);
invalidateEvent();
}
void SpectrogramPlot::setZoomLevel(int zoom)
{
zoomLevel = zoom;
Expand Down
4 changes: 4 additions & 0 deletions spectrogramplot.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public slots:
void setPowerMax(int power);
void setPowerMin(int power);
void setZoomLevel(int zoom);
void setTimeResolution(int res);
void setBeta(float beta);
void tunerMoved();

private:
Expand All @@ -71,6 +73,8 @@ public slots:
int zoomLevel;
float powerMax;
float powerMin;
int timeResolution;
float beta;
off_t sampleRate;
bool frequencyScaleEnabled;

Expand Down