The impulse response is scaled with 2/rdft_len.
Unified · Split
| @@ -554,6 +554,7 @@ static void generate_min_phase_kernel(FIREqualizerContext *s, float *rdft_buf) · 553 unmodified lines | |||
| 554 | { | 554 | { |
| 555 | int k, cepstrum_len = s->cepstrum_len, rdft_len = s->rdft_len; | 555 | int k, cepstrum_len = s->cepstrum_len, rdft_len = s->rdft_len; |
| 556 | double norm = 2.0 / cepstrum_len; | 556 | double norm = 2.0 / cepstrum_len; |
| 557 | double minval = 1e-7 / rdft_len; | ||
| 557 | 558 | ||
| 558 | memset(s->cepstrum_buf, 0, cepstrum_len * sizeof(*s->cepstrum_buf)); | 559 | memset(s->cepstrum_buf, 0, cepstrum_len * sizeof(*s->cepstrum_buf)); |
| 559 | memcpy(s->cepstrum_buf, rdft_buf, rdft_len/2 * sizeof(*rdft_buf)); | 560 | memcpy(s->cepstrum_buf, rdft_buf, rdft_len/2 * sizeof(*rdft_buf)); |
| @@ -561,11 +562,11 @@ static void generate_min_phase_kernel(FIREqualizerContext *s, float *rdft_buf) · 1 unmodified line | |||
| 561 | 562 | ||
| 562 | av_rdft_calc(s->cepstrum_rdft, s->cepstrum_buf); | 563 | av_rdft_calc(s->cepstrum_rdft, s->cepstrum_buf); |
| 563 | 564 | ||
| 564 | s->cepstrum_buf[0] = log(FFMAX(s->cepstrum_buf[0], 1e-10)); | 565 | s->cepstrum_buf[0] = log(FFMAX(s->cepstrum_buf[0], minval)); |
| 565 | s->cepstrum_buf[1] = log(FFMAX(s->cepstrum_buf[1], 1e-10)); | 566 | s->cepstrum_buf[1] = log(FFMAX(s->cepstrum_buf[1], minval)); |
| 566 | 567 | ||
| 567 | for (k = 2; k < cepstrum_len; k += 2) { | 568 | for (k = 2; k < cepstrum_len; k += 2) { |
| 568 | s->cepstrum_buf[k] = log(FFMAX(s->cepstrum_buf[k], 1e-10)); | 569 | s->cepstrum_buf[k] = log(FFMAX(s->cepstrum_buf[k], minval)); |
| 569 | s->cepstrum_buf[k+1] = 0; | 570 | s->cepstrum_buf[k+1] = 0; |
| 570 | } | 571 | } |
| 571 | 572 | ||