Цитата(bahurin @ Jan 5 2011, 18:57)

Берете кусок длиной N берете его fft умножаете на АЧХ берете ifft. Если все правильно сделано мнимая часть ifft должна быть очень маленькой почти 0. Поэтому берем только реальную часть ifft. Из этой реальной части выбираем центральные N/2 отсчетов, т.е от N/4 до 3N/4 - это результат. После сдвигаем исходный сигнала на N/2, снова берем N отсчетов и снова fft-умножение-ifft и выборка центральных N/2 отсчетов. Т.о. вы сдвигаетесь каждый раз на N/2 отсчетов, но делаете N точечное fft и выбираете из результата ifft тоже N/2 отсчетов, дырок нет. В первом буфере первые N/4 отсчетов в результате нули, а центральные N/2 отсчетов которые вы выбираете из результата идут встык друг с другом.
Соглашусь с
Alexey Lukin.
Похоже на неправильное описание метода overlap-save.
Проблема в том, что, для избежания циклической свертки, FFT одного из сигналов должно быть получено от блока, содержащего половину нулей.
Цитата(phantom @ Jan 5 2011, 22:04)

Как я понимаю, у elk-a правильно реализована блочная свертка с ИХ, когда входной сигнал и ИХ представлены по-блочно, с разными длинами блоков и вопрос только в том, как преобразовать (отфильтровать) исходную ИХ с использованием эквалайзера (и можно ли это сделать в принципе).
Совершенно верно. Насчет разных длин блоков - ну вы, однако, прям мои мысли читаете

Цитата(Alexey Lukin @ Jan 5 2011, 21:18)

Желание elk повторно использовать имеющиеся FFT — понятно! Но пока что нам нигде подробно не рассказали, какие же FFT уже имеются, с каким шагом по времени они идут, что делают и т.д...
Ок, рассказываю подробнее. Имеются FFT от блоков ИХ разного размера (non-uniform partitioned convolution, описанная у Gardner). Самый маленький размер блока ИХ равен длине блока входного сигнала (который может быть 512, 1024 и т.д.). Для каждого размера блоков используется схема overlap-save, т.е. FFT считаются от блоков ИХ, дополненных нулями, а блоки входного сигнала берутся с перекрыванием.
Насчет шага по времени - не совсем понятно, что имеется в виду... Блоки сигнала приходят на обработку поочередно, общая длина сигнала заранее неизвестна. Допустим, что имеется достаточное время для обработки каждого блока согласно описанной схеме.
Цитата(Alexey Lukin @ Jan 5 2011, 22:45)

Если задача действительно такая, то обрабатываем имеющуюся ИХ эквалайзером (в процессе чего она может несколько удлиниться) — и производим свёртку уже имеющимся алгоритмом (но с новым ядром).
Алексей, хотелось бы все-таки услышать Ваш комментарий по поводу правильности способа получения FFT эквалайзера, описанного в моем предыдущем посте...
Или это какая-то страшная тайна ?