diff options
author | Damien Zammit <damien@zamaudio.com> | 2024-04-24 10:15:55 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2024-04-24 10:31:37 +1000 |
commit | c42f1ee07eba5bcef3cc94da641af53990c166cc (patch) | |
tree | 66b3e9ace0685fe62ff826f52e1f04a19dc6b473 | |
parent | d84f69b9ad5a3d2c3d6265a64df0c72b34aaf165 (diff) |
ZamNoise: Use EM algorithm variation with smaller FFT
-rw-r--r-- | plugins/ZamNoise/Denoise.cpp | 23 | ||||
-rw-r--r-- | plugins/ZamNoise/Denoise.hpp | 6 |
2 files changed, 15 insertions, 14 deletions
diff --git a/plugins/ZamNoise/Denoise.cpp b/plugins/ZamNoise/Denoise.cpp index 8d413f9..080b7dc 100644 --- a/plugins/ZamNoise/Denoise.cpp +++ b/plugins/ZamNoise/Denoise.cpp @@ -21,7 +21,7 @@ #include "Denoise.hpp" #include "bessel.inc" -void Denoise::compute_bark_z(int FFT_SIZE, int rate) +void Denoise::compute_bark_z(int rate) { int k; @@ -32,7 +32,7 @@ void Denoise::compute_bark_z(int FFT_SIZE, int rate) } } -void Denoise::compute_johnston_gain(int FFT_SIZE, double tonality_factor) +void Denoise::compute_johnston_gain(double tonality_factor) { int k; @@ -242,7 +242,7 @@ void Denoise::fft_remove_noise(const float* ins, float* outs, uint32_t frames, f SFM = 10.0*( kinv*sum_log_p - log10(sum_p*kinv) ); tonality_factor = MIN(SFM/-60.0, 1); } - +/* for (k = 1; k <= FFT_SIZE/2 ; ++k) { int j ; @@ -262,12 +262,12 @@ void Denoise::fft_remove_noise(const float* ins, float* outs, uint32_t frames, f masked[k] += MAX((Y2[j]-noise2[j]),0.0)*gain ; } } - +*/ for (k = 1; k <= FFT_SIZE/2 ; ++k) { if(noise2[k] > DBL_MIN) { double gain, Fk, Gk; -/* + double Rpost = MAX(Y2[k]/noise2[k]-1.0, 0.0); double alpha = dn_gamma; double Rprio; @@ -280,7 +280,8 @@ void Denoise::fft_remove_noise(const float* ins, float* outs, uint32_t frames, f gain = gain_em(Rprio, Rpost, alpha); gain_prev[k] = gain; Y2_prev[k] = Y2[k]; -*/ + +/* double Rpost = MAX(Y2[k]/noise2[k]-1.0, 0.0) ; double alpha = dn_gamma ; double Rprio ; @@ -299,7 +300,7 @@ void Denoise::fft_remove_noise(const float* ins, float* outs, uint32_t frames, f } gain_prev[k] = gain ; - +*/ Fk = amount*(1.0-gain); if(Fk < 0.0) Fk = 0.0; @@ -329,7 +330,7 @@ void Denoise::fft_remove_noise(const float* ins, float* outs, uint32_t frames, f Denoise::Denoise(float srate) { int k; - FFT_SIZE = 16384; + FFT_SIZE = 4096; dn_gamma = 0.95; n_noise_samples = FFT_SIZE; rate = (int) srate; @@ -383,7 +384,7 @@ Denoise::~Denoise() { void Denoise::get_noise_sample(float* noisebuffer, fftw_real *left_noise_min, fftw_real *left_noise_max, fftw_real *left_noise_avg) { - int i, k; + int k; for(k = 0 ; k < FFT_SIZE ; k++) { window_coef[k] = 1.0; @@ -419,8 +420,8 @@ void Denoise::get_noise_sample(float* noisebuffer, fftw_real *left_noise_min, ff left_noise_avg[k] /= (double)n_noise_samples; } - compute_bark_z(FFT_SIZE, rate); - compute_johnston_gain(FFT_SIZE, tonality_factor); + compute_bark_z(rate); + compute_johnston_gain(tonality_factor); /* if(freq_filter) { if(estimate_power_floor) { diff --git a/plugins/ZamNoise/Denoise.hpp b/plugins/ZamNoise/Denoise.hpp index 348cd90..c887031 100644 --- a/plugins/ZamNoise/Denoise.hpp +++ b/plugins/ZamNoise/Denoise.hpp @@ -27,7 +27,7 @@ #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define FFTW(func) fftwf_ ## func -#define DENOISE_MAX_FFT 32768 +#define DENOISE_MAX_FFT 8192 #define DENOISE_WINDOW_BLACKMAN 0 #define DENOISE_WINDOW_BLACKMAN_HYBRID 1 #define DENOISE_WINDOW_HANNING_OVERLAP_ADD 2 @@ -40,8 +40,8 @@ public: Denoise(float srate); ~Denoise(); void process(const float* ins, float* outs, float* noisebuffer, uint32_t frames, int noisetoggle); - void compute_bark_z(int FFT_SIZE, int rate); - void compute_johnston_gain(int FFT_SIZE, double tonality_factor); + void compute_bark_z(int rate); + void compute_johnston_gain(double tonality_factor); int get_window_delta(); void compute_sum_window_wgts(); double gain_weiner(double Yk2, double Dk2); |