mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-27 06:08:37 -05:00
SpectrumVisualProcessor thread fixes, spectrum label optimize
This commit is contained in:
parent
7a0f523eaf
commit
13140ec28c
@ -133,26 +133,30 @@ void SpectrumPanel::drawPanelContents() {
|
|||||||
long long leftFreq = (double) freq - ((double) bandwidth / 2.0);
|
long long leftFreq = (double) freq - ((double) bandwidth / 2.0);
|
||||||
long long rightFreq = leftFreq + (double) bandwidth;
|
long long rightFreq = leftFreq + (double) bandwidth;
|
||||||
|
|
||||||
long long firstMhz = (leftFreq / 1000000) * 1000000;
|
long long hzStep = 1000000;
|
||||||
long double mhzStart = ((long double) (firstMhz - leftFreq) / (long double) (rightFreq - leftFreq)) * 2.0;
|
|
||||||
|
|
||||||
long double mhzStep = (100000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
long double mhzStep = (100000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
||||||
double mhzVisualStep = 0.1f;
|
double mhzVisualStep = 0.1;
|
||||||
|
|
||||||
|
std::stringstream label;
|
||||||
|
label.precision(1);
|
||||||
|
|
||||||
if (mhzStep * 0.5 * viewWidth < 40) {
|
if (mhzStep * 0.5 * viewWidth < 40) {
|
||||||
mhzStep = (250000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
mhzStep = (250000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
||||||
mhzVisualStep = 0.25f;
|
mhzVisualStep = 0.25;
|
||||||
}
|
|
||||||
|
|
||||||
if (mhzStep * 0.5 * viewWidth > 400) {
|
|
||||||
mhzStep = (10000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
|
||||||
mhzVisualStep = 0.01f;
|
|
||||||
}
|
|
||||||
|
|
||||||
long double currentMhz = trunc(floor(firstMhz / 1000000.0));
|
|
||||||
|
|
||||||
std::stringstream label;
|
|
||||||
label.precision(2);
|
label.precision(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mhzStep * 0.5 * viewWidth > 350) {
|
||||||
|
mhzStep = (10000.0 / (long double) (rightFreq - leftFreq)) * 2.0;
|
||||||
|
mhzVisualStep = 0.01;
|
||||||
|
label.precision(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
long long firstMhz = (leftFreq / hzStep) * hzStep;
|
||||||
|
long double mhzStart = ((long double) (firstMhz - leftFreq) / (long double) (rightFreq - leftFreq)) * 2.0;
|
||||||
|
long double currentMhz = trunc(floor(firstMhz / (long double)1000000.0));
|
||||||
|
|
||||||
|
|
||||||
double hPos = 1.0 - (16.0 / viewHeight);
|
double hPos = 1.0 - (16.0 / viewHeight);
|
||||||
double lMhzPos = 1.0 - (5.0 / viewHeight);
|
double lMhzPos = 1.0 - (5.0 / viewHeight);
|
||||||
|
@ -14,7 +14,7 @@ SpectrumVisualProcessor::SpectrumVisualProcessor() : lastInputBandwidth(0), last
|
|||||||
|
|
||||||
fft_ceil_ma = fft_ceil_maa = 100.0;
|
fft_ceil_ma = fft_ceil_maa = 100.0;
|
||||||
fft_floor_ma = fft_floor_maa = 0.0;
|
fft_floor_ma = fft_floor_maa = 0.0;
|
||||||
desiredInputSize = 0;
|
desiredInputSize.store(0);
|
||||||
fft_average_rate = 0.65;
|
fft_average_rate = 0.65;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,19 +27,25 @@ bool SpectrumVisualProcessor::isView() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::setView(bool bView) {
|
void SpectrumVisualProcessor::setView(bool bView) {
|
||||||
|
busy_run.lock();
|
||||||
is_view.store(bView);
|
is_view.store(bView);
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::setFFTAverageRate(float fftAverageRate) {
|
void SpectrumVisualProcessor::setFFTAverageRate(float fftAverageRate) {
|
||||||
this->fft_average_rate = fftAverageRate;
|
busy_run.lock();
|
||||||
|
this->fft_average_rate.store(fftAverageRate);
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
float SpectrumVisualProcessor::getFFTAverageRate() {
|
float SpectrumVisualProcessor::getFFTAverageRate() {
|
||||||
return this->fft_average_rate;
|
return this->fft_average_rate.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::setCenterFrequency(long long centerFreq_in) {
|
void SpectrumVisualProcessor::setCenterFrequency(long long centerFreq_in) {
|
||||||
|
busy_run.lock();
|
||||||
centerFreq.store(centerFreq_in);
|
centerFreq.store(centerFreq_in);
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
long long SpectrumVisualProcessor::getCenterFrequency() {
|
long long SpectrumVisualProcessor::getCenterFrequency() {
|
||||||
@ -47,7 +53,9 @@ long long SpectrumVisualProcessor::getCenterFrequency() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::setBandwidth(long bandwidth_in) {
|
void SpectrumVisualProcessor::setBandwidth(long bandwidth_in) {
|
||||||
|
busy_run.lock();
|
||||||
bandwidth.store(bandwidth_in);
|
bandwidth.store(bandwidth_in);
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
long SpectrumVisualProcessor::getBandwidth() {
|
long SpectrumVisualProcessor::getBandwidth() {
|
||||||
@ -55,12 +63,14 @@ long SpectrumVisualProcessor::getBandwidth() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int SpectrumVisualProcessor::getDesiredInputSize() {
|
int SpectrumVisualProcessor::getDesiredInputSize() {
|
||||||
return desiredInputSize;
|
return desiredInputSize.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::setup(int fftSize_in) {
|
void SpectrumVisualProcessor::setup(int fftSize_in) {
|
||||||
|
busy_run.lock();
|
||||||
|
|
||||||
fftSize = fftSize_in;
|
fftSize = fftSize_in;
|
||||||
desiredInputSize = fftSize;
|
desiredInputSize.store(fftSize);
|
||||||
|
|
||||||
if (fftwInput) {
|
if (fftwInput) {
|
||||||
free(fftwInput);
|
free(fftwInput);
|
||||||
@ -82,7 +92,7 @@ void SpectrumVisualProcessor::setup(int fftSize_in) {
|
|||||||
fftwf_destroy_plan(fftw_plan);
|
fftwf_destroy_plan(fftw_plan);
|
||||||
}
|
}
|
||||||
fftw_plan = fftwf_plan_dft_1d(fftSize, fftwInput, fftwOutput, FFTW_FORWARD, FFTW_ESTIMATE);
|
fftw_plan = fftwf_plan_dft_1d(fftSize, fftwInput, fftwOutput, FFTW_FORWARD, FFTW_ESTIMATE);
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVisualProcessor::process() {
|
void SpectrumVisualProcessor::process() {
|
||||||
@ -102,6 +112,7 @@ void SpectrumVisualProcessor::process() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
iqData->busy_rw.lock();
|
iqData->busy_rw.lock();
|
||||||
|
busy_run.lock();
|
||||||
|
|
||||||
std::vector<liquid_float_complex> *data = &iqData->data;
|
std::vector<liquid_float_complex> *data = &iqData->data;
|
||||||
|
|
||||||
@ -118,6 +129,7 @@ void SpectrumVisualProcessor::process() {
|
|||||||
if (!iqData->frequency || !iqData->sampleRate) {
|
if (!iqData->frequency || !iqData->sampleRate) {
|
||||||
iqData->decRefCount();
|
iqData->decRefCount();
|
||||||
iqData->busy_rw.unlock();
|
iqData->busy_rw.unlock();
|
||||||
|
busy_run.unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +137,7 @@ void SpectrumVisualProcessor::process() {
|
|||||||
|
|
||||||
int desired_input_size = fftSize / resamplerRatio;
|
int desired_input_size = fftSize / resamplerRatio;
|
||||||
|
|
||||||
this->desiredInputSize = desired_input_size;
|
this->desiredInputSize.store(desired_input_size);
|
||||||
|
|
||||||
if (iqData->data.size() < desired_input_size) {
|
if (iqData->data.size() < desired_input_size) {
|
||||||
// std::cout << "fft underflow, desired: " << desired_input_size << " actual:" << input->data.size() << std::endl;
|
// std::cout << "fft underflow, desired: " << desired_input_size << " actual:" << input->data.size() << std::endl;
|
||||||
@ -304,5 +316,6 @@ void SpectrumVisualProcessor::process() {
|
|||||||
|
|
||||||
iqData->decRefCount();
|
iqData->decRefCount();
|
||||||
iqData->busy_rw.unlock();
|
iqData->busy_rw.unlock();
|
||||||
|
busy_run.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ private:
|
|||||||
|
|
||||||
double fft_ceil_ma, fft_ceil_maa;
|
double fft_ceil_ma, fft_ceil_maa;
|
||||||
double fft_floor_ma, fft_floor_maa;
|
double fft_floor_ma, fft_floor_maa;
|
||||||
float fft_average_rate;
|
std::atomic<float> fft_average_rate;
|
||||||
|
|
||||||
std::vector<double> fft_result;
|
std::vector<double> fft_result;
|
||||||
std::vector<double> fft_result_ma;
|
std::vector<double> fft_result_ma;
|
||||||
@ -66,7 +66,8 @@ private:
|
|||||||
|
|
||||||
std::vector<liquid_float_complex> shiftBuffer;
|
std::vector<liquid_float_complex> shiftBuffer;
|
||||||
std::vector<liquid_float_complex> resampleBuffer;
|
std::vector<liquid_float_complex> resampleBuffer;
|
||||||
int desiredInputSize;
|
std::atomic_int desiredInputSize;
|
||||||
|
std::mutex busy_run;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user