1) детектор:
приближенно-среднеквадратический d(n) = x(n)^2; dy[n] = A*dy[n-1] + (1-A)*d(n); od[n] = sqrt[d];
амплитудный d(n) = |x(n)|; dy[n] = A*dy[n-1] + (1-A)*d(n); od[n]=dy[n];
пиковый: d(n) = |x(n)|; if (dy[n] < d(n)) dy[n]=d[n] else dy[n]=dy[n]*A; od[n]=dy[n];
2) найти величину K, обратную к уровню сигнала - od. Чем больше od, тем на мсеньшее надо умножить. Можно например по таблице исходя из порядка od, можно натурально 1/od.
3) ну и домножить сигнал на эту величину. out[n]=x[n]*K[n]