1
0
Fork 0

avfilter/af_anlms: improve documentation and extend option

This commit is contained in:
Paul B Mahol 2023-05-01 20:01:50 +02:00
parent f09280dfc4
commit 5617465916
2 changed files with 12 additions and 6 deletions

View File

@ -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

View File

@ -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;
}