Я пытаюсь сделать простую свертку двух сигналов. Одним из них является сигналом (музыка, например), а другой является ИК (простая задержка, как такой схеме:.Выполнение работы FUR
IR[0] = 1.0
IR[1->511] = 0
IR[512] = 0.5
IR[513->1023] = 0;
поэтому он должен сделать небольшое эхо
Я узнал, что в свертке временная область, является умножением в частотной области
, поэтому я хочу взять БПФ обоих сигналов (музыку и ИК) и умножить полученные пары чисел re & im (from re + im * i), затем возьмите iFFT и полюбуйтесь результатом.
fft(fftMusic);
fft(fftIR);
for (int i = 0; i < n; i++)
fftMusic[i] = fftMusic[i] * fftIR[i];
ifft(fftusic);
for (int i = 0; i < n; i++)
fftMusic[i] = fftMusic[i] * 2/double(n);
Проблема только в том, что она не работает.
Я пробовал как RFDT, так и CFDT, и я получаю странный результат: мой сигнал задерживается, но в обратном. Это вещь FFT?
Первый для RDFT (Real DFT: re in, re & im out), я добавил + n/2 нулевые сэмплы в конце или как музыку, так и IR для свертки, затем использовал 4 перекрытых буфера (это требуемое количество) и рассчитывается, когда настало время БПФ и затем перемножить, то Иффт и т.д.
Второй для CDFT (комплекс ДПФ: повторное & им в & из), я поставил образец музыки каждые два образец (и ноль для мнимой части), затем сделал cdft, умноженный и т. д.
, но оба они не работают и дают тот же результат: странное сочетание звуков с обратным и замедленным звуком.
, пожалуйста, помогите.
- Элемент списка
Вы должны прочитать [методы перекрытия-добавления/перекрытия-сохранения] (http://en.wikipedia.org/wiki/Overlap-add_method) –
Я уже использую метод overlapp-add, я не знаю, почему ovelapp-save улучшит (может быть, производительность немного) результаты. но все равно спасибо. – IonOne
OK - вы можете использовать либо overlap-add, либо overlap-save, чтобы вы не получали круговую свертку - из вашего вопроса было неясно, хотя вы уже используете overlap-add. Очевидно, проблема кроется в другом месте. –