Очередная попытка.
y[n] = x[n] + a * y[n - 1]
у - выход (динамик)
x - вход (микрофон)
а - коэффициент, зависящий от физических параметров системы
Таким образом я попытался реализовать классику из аналогового мира, там где из сигнала микрофона вычитается сигнал в динамике, так было сделано почти во всех трубочных телефонных аппаратах.
Естественно, это дало результат: свист исчез там, где раньше был, система стала более устойчива. Но пришлось подбирать коэффициент
а.
Такой способ хорош для трубочных средств коммуникации, там где перекрестное проникновение между динамиком и микрофоном постоянно. Тогда можно коэф.
а "вшить" в схему или в программу.
Однако у автора ветки открытая система (переговорное устройство в лифте), где проникновение сигнала и его временные задержки могут изменятся в зависимости от объемов помещения, близости предметов, отражения от стен и т.ж.
Порыв немного в этом направлении, с удовольствием узнал что математика подобных процессов уже давно отработана в общем виде.
Вот здесь описан оптимизирующий алгоритм, который находит коэффициент
а, в том числе и в векторном виде с любой размерностью:
http://en.wikipedia.org/wiki/Least_mean_squares_filter
А вот здесь описан цифровой фильтр с конечным откликом, который может быть использован для подавления акустической обратной связи:
http://en.wikipedia.org/wiki/Finite_impulse_response
Все выглядит несложным. Приступаю к реализации и очередному тестированию.