summaryrefslogtreecommitdiffstats
path: root/src/modules/echo-cancel/adrian-aec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/echo-cancel/adrian-aec.c')
-rw-r--r--src/modules/echo-cancel/adrian-aec.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/modules/echo-cancel/adrian-aec.c b/src/modules/echo-cancel/adrian-aec.c
index 6793e59d..04b31e91 100644
--- a/src/modules/echo-cancel/adrian-aec.c
+++ b/src/modules/echo-cancel/adrian-aec.c
@@ -107,8 +107,7 @@ AEC* AEC_init(int RATE, int have_vector)
// mapped to 1.0 with a limited linear function.
static float AEC_dtd(AEC *a, REAL d, REAL x)
{
- float stepsize;
- float ratio, M;
+ float ratio, stepsize;
// fast near-end and far-end average
a->dfast += ALPHAFAST * (fabsf(d) - a->dfast);
@@ -129,16 +128,13 @@ static float AEC_dtd(AEC *a, REAL d, REAL x)
// ratio of NFRs
ratio = (a->dfast * a->xslow) / (a->dslow * a->xfast);
- // begrenzte lineare Kennlinie
- M = (STEPY2 - STEPY1) / (STEPX2 - STEPX1);
- if (ratio < STEPX1) {
+ // Linear interpolation with clamping at the limits
+ if (ratio < STEPX1)
stepsize = STEPY1;
- } else if (ratio > STEPX2) {
+ else if (ratio > STEPX2)
stepsize = STEPY2;
- } else {
- // Punktrichtungsform einer Geraden
- stepsize = M * (ratio - STEPX1) + STEPY1;
- }
+ else
+ stepsize = STEPY1 + (STEPY2 - STEPY1) * (ratio - STEPX1) / (STEPX2 - STEPX1);
return stepsize;
}