Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/rnnoise.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2017-08-15 00:59:38 +0300
committerJean-Marc Valin <jmvalin@jmvalin.ca>2017-08-15 00:59:38 +0300
commit8ce828999ccca5bf7a965c0da792bd43e235d8f1 (patch)
treef909a865cb2648b454411a4aac9404d98b817234
parent74c193805a716b073469b092c9e0bf96076d2293 (diff)
More refactoring
-rw-r--r--src/denoise.c90
1 files changed, 43 insertions, 47 deletions
diff --git a/src/denoise.c b/src/denoise.c
index 1230760..f1d2e42 100644
--- a/src/denoise.c
+++ b/src/denoise.c
@@ -263,6 +263,9 @@ static int frame_analysis(DenoiseState *st, kiss_fft_cpx *X, float *Ex, float *f
float x[WINDOW_SIZE];
int i;
float E = 0;
+ float *ceps_0, *ceps_1, *ceps_2;
+ float spec_variability = 0;
+ float Ly[NB_BANDS];
RNN_COPY(x, st->analysis_mem, FRAME_SIZE);
for (i=0;i<FRAME_SIZE;i++) x[FRAME_SIZE + i] = in[i];
RNN_COPY(st->analysis_mem, in, FRAME_SIZE);
@@ -305,58 +308,51 @@ static int frame_analysis(DenoiseState *st, kiss_fft_cpx *X, float *Ex, float *f
features[NB_BANDS+3*NB_DELTA_CEPS] = .01*(pitch_index-300);
}
}
+ if (features == NULL) return 1;
+ for (i=0;i<NB_BANDS;i++) {
+ Ly[i] = log10(1e-2+Ex[i]);
+ E += Ex[i];
+ }
+ if (!TRAINING && E < 0.04) {
+ /* If there's no audio, avoid messing up the state. */
+ RNN_CLEAR(features, NB_FEATURES);
+ return 1;
+ }
+ dct(features, Ly);
+ features[0] -= 12;
+ features[1] -= 4;
+ ceps_0 = st->cepstral_mem[st->memid];
+ ceps_1 = (st->memid < 1) ? st->cepstral_mem[CEPS_MEM+st->memid-1] : st->cepstral_mem[st->memid-1];
+ ceps_2 = (st->memid < 2) ? st->cepstral_mem[CEPS_MEM+st->memid-2] : st->cepstral_mem[st->memid-2];
+ for (i=0;i<NB_BANDS;i++) ceps_0[i] = features[i];
+ st->memid++;
+ for (i=0;i<NB_DELTA_CEPS;i++) {
+ features[i] = ceps_0[i] + ceps_1[i] + ceps_2[i];
+ features[NB_BANDS+i] = ceps_0[i] - ceps_2[i];
+ features[NB_BANDS+NB_DELTA_CEPS+i] = ceps_0[i] - 2*ceps_1[i] + ceps_2[i];
+ }
+ /* Spectral variability features. */
+ if (st->memid == CEPS_MEM) st->memid = 0;
+ for (i=0;i<CEPS_MEM;i++)
{
- if (features != NULL) {
- float *ceps_0, *ceps_1, *ceps_2;
- float spec_variability = 0;
- float Ly[NB_BANDS];
- E = 0;
- for (i=0;i<NB_BANDS;i++) {
- Ly[i] = log10(1e-2+Ex[i]);
- E += Ex[i];
- }
- if (!TRAINING && E < 0.04) {
- /* If there's no audio, avoid messing up the state. */
- RNN_CLEAR(features, NB_FEATURES);
- return 1;
- }
- dct(features, Ly);
- features[0] -= 12;
- features[1] -= 4;
- ceps_0 = st->cepstral_mem[st->memid];
- ceps_1 = (st->memid < 1) ? st->cepstral_mem[CEPS_MEM+st->memid-1] : st->cepstral_mem[st->memid-1];
- ceps_2 = (st->memid < 2) ? st->cepstral_mem[CEPS_MEM+st->memid-2] : st->cepstral_mem[st->memid-2];
- for (i=0;i<NB_BANDS;i++) ceps_0[i] = features[i];
- st->memid++;
- for (i=0;i<NB_DELTA_CEPS;i++) {
- features[i] = ceps_0[i] + ceps_1[i] + ceps_2[i];
- features[NB_BANDS+i] = ceps_0[i] - ceps_2[i];
- features[NB_BANDS+NB_DELTA_CEPS+i] = ceps_0[i] - 2*ceps_1[i] + ceps_2[i];
- }
- /* Spectral variability features. */
- if (st->memid == CEPS_MEM) st->memid = 0;
- for (i=0;i<CEPS_MEM;i++)
+ int j;
+ float mindist = 1e15f;
+ for (j=0;j<CEPS_MEM;j++)
+ {
+ int k;
+ float dist=0;
+ for (k=0;k<NB_BANDS;k++)
{
- int j;
- float mindist = 1e15f;
- for (j=0;j<CEPS_MEM;j++)
- {
- int k;
- float dist=0;
- for (k=0;k<NB_BANDS;k++)
- {
- float tmp;
- tmp = st->cepstral_mem[i][k] - st->cepstral_mem[j][k];
- dist += tmp*tmp;
- }
- if (j!=i)
- mindist = MIN32(mindist, dist);
- }
- spec_variability += mindist;
+ float tmp;
+ tmp = st->cepstral_mem[i][k] - st->cepstral_mem[j][k];
+ dist += tmp*tmp;
}
- features[NB_BANDS+3*NB_DELTA_CEPS+1] = spec_variability/CEPS_MEM-2.1;
+ if (j!=i)
+ mindist = MIN32(mindist, dist);
}
+ spec_variability += mindist;
}
+ features[NB_BANDS+3*NB_DELTA_CEPS+1] = spec_variability/CEPS_MEM-2.1;
return TRAINING && E < 0.1;
}