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 | 555 | int k, cepstrum_len = s->cepstrum_len, rdft_len = s->rdft_len; |
| 556 | 556 | double norm = 2.0 / cepstrum_len; |
| 557 | + double minval = 1e-7 / rdft_len; | |
| 557 | 558 | |
| 558 | 559 | memset(s->cepstrum_buf, 0, cepstrum_len * sizeof(*s->cepstrum_buf)); |
| 559 | 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 | 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[1] = log(FFMAX(s->cepstrum_buf[1], 1e-10)); | |
| 565 | + s->cepstrum_buf[0] = log(FFMAX(s->cepstrum_buf[0], minval)); | |
| 566 | + s->cepstrum_buf[1] = log(FFMAX(s->cepstrum_buf[1], minval)); | |
| 566 | 567 | |
| 567 | 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 | 570 | s->cepstrum_buf[k+1] = 0; |
| 570 | 571 | } |
| 571 | 572 | |