Цитата(phantom @ Nov 20 2008, 18:30)

fontp
Пробовали запихнуть в Вашу программу наши сигналы - тот, что подается на динамик, и записанный в начале трубы, причем в качестве входного пробовали шум, кусок синусоиды и еще несколько вариантов. Проблема в том, что отклик достаточно длинный - пару тысяч отсчетов, так что при небольшом количестве отсчетов ИХ фильтра естественно ничего не получается, а побольше его сделать проблематично - даже для тестовых данных (случайный сигнал на входе и свернутый со случайной ИХ) длиной 10200 и порядком фильтра 1000 fir_covar возвращает код ошибки (-1,-2), а коэффициенты считаются только до 544-го (остальные нули).
Куда Вам столько много? Это подгонка. Порядок нужно ограничивать в вызове функции.
Обычно порядок увеличивают только до тех пор пока ошибка уменьшается резко. Обычно ошибка снижается сначала более резко, а потом менее резко. На перегибе останавливаются :-)
Дальше - это всё подгонка под шум. Так моделируются FIR-системы, есть там специальная даже стат-наука по выбору порядка.
"Моя программа" это всего лишь быстрый алгоритм решения ковариационных уравнений. Можете выписать нормальные уравнения и решать их любой другой программой для решения линейных систем уравнений. При обычной точности вычислений возможно решать системы порядка несколько десятков, особенно если они недостаточно хорошо обусловлены
Это всё ещё без учета того, что вам вообще-то нужен скорее обратный фильтр, чем прямой. Т.е. Ваша задача больше похожа на эквалайзер, чем на эхоподавитель, причем не нужно стремиться к идеальной форме (дельта-функции), поскольку у Вас реакция запаздывающая и идеальную компенсацию получить нельзя. Мне кажется так