развертка (deconvolution)

From
Aleksey Vaneev (2:5003/115.1)
To
Evgenij Masherov ()
Date
2003-03-20T22:26:04Z
Area
RU.ALGORITHMS
20 марта 2003, Evgenij Masherov to Aleksey Vaneev:

 AV>> 88200. Алиасинга точно нет.
 EM> Разве что на высших гармониках... После микрофона какие-нибудь фильтры
 EM> стоят?

Думаю, нет. Максимум - фильтр на АЦП. Но на самом деле, так как фактическая разрядность записи 16 битная, частоты выше 30 кГц практически не просматриваются - вероятно, активно поглощаются воздухом. Но верхняя часть спектра не критична - достаточно из 88200 восстановить 44100 Гц файлы.

 EM> Комплексные спектры-то?

Да.

 EM> И еще. Деление спектров = умножение на обратный = свертка. Циклическая
 EM> свертка. Т.е. конец наложится на начало. Надо дополнять нулями не
 EM> меньше, чем было в исходном сигнале. Лишнее, после восстановления,
 EM> отбрасывать.

Да, понятно. Только это все равно не помогает.

А что есть обратный спектр? Как его вычислить можно?

 EM> Эээ... Численно равен и не похож на слух??? Мистика...
 EM> Может, что-то в аппаратуре воспроизведения глючит?
 EM> А некорректность по Адамару - то, что требует загрублять задачу, а не
 EM> выжимать максимум...

Да, еще один момент. Восстановить то, что ожидалось, все же удалось. Но не понимаю - почему. К слову, кроме 12 секундного тестового тона был записан также 6 секундный.

Я сделал простую вещь - деконволюцию обоих этих откликов. Получил два "неправильных" отклика. Потом допустил, что отклик комнаты у них одинаковый, и поделил отклик, полученный от 12 секундного тона на отклик 6 секундного тона. В результате получил тот самый паразитный импульс. Потом отклик от 6с тона поделил на него и получил практически идеальный искомый отклик (с единичным первым импульсом).

Вот теперь думаю, почему это сработало. Правда, осталась еще одна проблема - в первоначально полученном 6с отклике присутствует "обратный образ" тестового тона - то есть синусоида с понижающейся частотой. На циклическое наложение непохоже - пробовал дополнять нулями с избытком. Подозреваю, проблема опять из-за искажений.

Решил бороться с этой проблемой фильтрацией. Кстати, а таким образом можно фильтровать адаптивно с помощью FFT? Беру фильтруемый блок, накладываю на него окно -> БПФ -> анализ и фильтрация (по ячейкам БПФ) -> обратное БПФ и вуаля? Окно таким образом выбирается, чтобы каждый новый блок накладывался с 50% покрытием на предыдущий. Думаю, подавители шумов также работают?

Да, еще по ходу дела - ты не знаешь алгоритм свертки overlap-and-save? Где-то я встречал краткое описание, но оно было слишком для меня кратким.

 e-mail: picoder at mail ru

--- GoldED+/W32 1.1.5-20020105
 * Origin:  (2:5003/115.1)