diff options
author | Paul B Mahol <onemda@gmail.com> | 2023-05-01 20:01:50 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2023-05-01 20:07:06 +0200 |
commit | 561746591660b456e092324f03d393d6dd9147b1 (patch) | |
tree | 79dccc7c1ea156e7ea92c6f4a8cc4807b3dd63ec | |
parent | f09280dfc47298e47a2e2576c8c37d1c8d4b03b2 (diff) | |
download | ffmpeg-561746591660b456e092324f03d393d6dd9147b1.tar.gz |
avfilter/af_anlms: improve documentation and extend option
-rw-r--r-- | doc/filters.texi | 7 | ||||
-rw-r--r-- | libavfilter/af_anlms.c | 11 |
2 files changed, 12 insertions, 6 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index 48b321b621..a63304ccd9 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -2674,10 +2674,13 @@ Pass the 1st input. Pass the 2nd input. @item o -Pass filtered samples. +Pass difference between desired, 2nd input and error signal estimate. @item n -Pass difference between desired and filtered samples. +Pass difference between input, 1st input and error signal estimate. + +@item e +Pass error signal estimated samples. Default value is @var{o}. @end table diff --git a/libavfilter/af_anlms.c b/libavfilter/af_anlms.c index a2c854b0b8..5b412b87cc 100644 --- a/libavfilter/af_anlms.c +++ b/libavfilter/af_anlms.c @@ -34,6 +34,7 @@ enum OutModes { DESIRED_MODE, OUT_MODE, NOISE_MODE, + ERROR_MODE, NB_OMODES }; @@ -73,6 +74,7 @@ static const AVOption anlms_options[] = { { "d", "desired", 0, AV_OPT_TYPE_CONST, {.i64=DESIRED_MODE}, 0, 0, AT, "mode" }, { "o", "output", 0, AV_OPT_TYPE_CONST, {.i64=OUT_MODE}, 0, 0, AT, "mode" }, { "n", "noise", 0, AV_OPT_TYPE_CONST, {.i64=NOISE_MODE}, 0, 0, AT, "mode" }, + { "e", "error", 0, AV_OPT_TYPE_CONST, {.i64=ERROR_MODE}, 0, 0, AT, "mode" }, { NULL } }; @@ -102,7 +104,7 @@ static float process_sample(AudioNLMSContext *s, float input, float desired, const int order = s->order; const float leakage = s->leakage; const float mu = s->mu; - const float a = 1.f - leakage * mu; + const float a = 1.f - leakage; float sum, output, e, norm, b; int offset = *offsetp; @@ -116,7 +118,7 @@ static float process_sample(AudioNLMSContext *s, float input, float desired, norm = s->eps + sum; b = mu * e / norm; if (s->anlmf) - b *= 4.f * e * e; + b *= e * e; memcpy(tmp, delay + offset, order * sizeof(float)); @@ -129,8 +131,9 @@ static float process_sample(AudioNLMSContext *s, float input, float desired, switch (s->output_mode) { case IN_MODE: output = input; break; case DESIRED_MODE: output = desired; break; - case OUT_MODE: /*output = output;*/ break; - case NOISE_MODE: output = desired - output; break; + case OUT_MODE: output = desired - output; break; + case NOISE_MODE: output = input - output; break; + case ERROR_MODE: break; } return output; } |