mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2024-11-10 04:37:37 +01:00
bugfix + improved NFM IF noise reduction (less distortion)
This commit is contained in:
parent
15010cff01
commit
cee0f75870
@ -65,6 +65,50 @@ namespace dsp {
|
||||
generic_block<FMIFNoiseReduction>::tempStart();
|
||||
}
|
||||
|
||||
void setTapCount(int tapCount) {
|
||||
assert(generic_block<FMIFNoiseReduction>::_block_init);
|
||||
std::lock_guard<std::mutex> lck(generic_block<FMIFNoiseReduction>::ctrlMtx);
|
||||
generic_block<FMIFNoiseReduction>::tempStop();
|
||||
generic_block<FMIFNoiseReduction>::unregisterInput(_in);
|
||||
|
||||
_tapCount = tapCount;
|
||||
|
||||
fftwf_destroy_plan(forwardPlan);
|
||||
fftwf_destroy_plan(backwardPlan);
|
||||
fftwf_free(delay);
|
||||
fftwf_free(fft_in);
|
||||
fftwf_free(fft_window);
|
||||
fftwf_free(amp_buf);
|
||||
fftwf_free(fft_cout);
|
||||
fftwf_free(fft_fcout);
|
||||
|
||||
delay = (complex_t*)fftwf_malloc(sizeof(complex_t)*STREAM_BUFFER_SIZE);
|
||||
fft_in = (complex_t*)fftwf_malloc(sizeof(complex_t)*_tapCount);
|
||||
fft_window = (float*)fftwf_malloc(sizeof(float)*_tapCount);
|
||||
amp_buf = (float*)fftwf_malloc(sizeof(float)*_tapCount);
|
||||
fft_cout = (complex_t*)fftwf_malloc(sizeof(complex_t)*_tapCount);
|
||||
fft_fcout = (complex_t*)fftwf_malloc(sizeof(complex_t)*_tapCount);
|
||||
delay_start = &delay[_tapCount];
|
||||
|
||||
memset(delay, 0, sizeof(complex_t)*STREAM_BUFFER_SIZE);
|
||||
memset(fft_in, 0, sizeof(complex_t)*_tapCount);
|
||||
memset(amp_buf, 0, sizeof(float)*_tapCount);
|
||||
memset(fft_cout, 0, sizeof(complex_t)*_tapCount);
|
||||
memset(fft_fcout, 0, sizeof(complex_t)*_tapCount);
|
||||
|
||||
for (int i = 0; i < _tapCount; i++) {
|
||||
fft_window[i] = window_function::blackman(i, _tapCount - 1);
|
||||
}
|
||||
|
||||
forwardPlan = fftwf_plan_dft_1d(_tapCount, (fftwf_complex*)fft_in, (fftwf_complex*)fft_cout, FFTW_FORWARD, FFTW_ESTIMATE);
|
||||
backwardPlan = fftwf_plan_dft_1d(_tapCount, (fftwf_complex*)fft_cout, (fftwf_complex*)fft_fcout, FFTW_BACKWARD, FFTW_ESTIMATE);
|
||||
|
||||
spdlog::info("FM IF Noise reduction set to {0} taps", _tapCount);
|
||||
|
||||
generic_block<FMIFNoiseReduction>::registerInput(_in);
|
||||
generic_block<FMIFNoiseReduction>::tempStart();
|
||||
}
|
||||
|
||||
void setLevel(float level) {
|
||||
_level = powf(10.0f, level / 10.0f);
|
||||
}
|
||||
|
@ -384,6 +384,9 @@ private:
|
||||
vfo->setSampleRate(selectedDemod->getIFSampleRate(), bandwidth);
|
||||
}
|
||||
|
||||
// Configure bandwidth
|
||||
setBandwidth(bandwidth);
|
||||
|
||||
// Configure FM IF Noise Reduction
|
||||
setFMIFNREnabled(FMIFNRAllowed ? FMIFNREnabled : false);
|
||||
|
||||
@ -395,6 +398,7 @@ private:
|
||||
setSquelchEnabled(squelchEnabled);
|
||||
|
||||
// Configure noise blanker
|
||||
fmnr.block.setTapCount((selectedDemod->getIFSampleRate() < 100000.0f) ? 8 : 32);
|
||||
nb.block.setLevel(nbLevel);
|
||||
setNoiseBlankerEnabled(nbEnabled);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user