我正在尝试对两个信号进行简单的卷积。一个是信号(例如音乐),另一个是 IR(类似这种方案的简单延迟:
IR[0] = 1.0
IR[1->511] = 0
IR[512] = 0.5
IR[513->1023] = 0;
所以它应该产生一个小的回声。
我了解到时域中的卷积是频域中的乘法。
所以我的想法是对两个信号(音乐和 IR)进行 FFT,然后将得到的几个数字 re & im(来自 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 个重叠缓冲区(这是所需的数量)并在时间合适时计算两者的 FFT,然后相乘,然后 iFFT 等。
其次是 CDFT(复杂 DFT:re & im in & out),我每两个样本放一个音乐样本(虚部为零),然后做 cdft,相乘等
但两者都不起作用并给出相同的结果:反转和延迟声音的奇怪混合。
请帮忙。
- 项目清单