【发布时间】:2014-12-27 04:34:32
【问题描述】:
我已经阅读 DSP 指南已有 3 年了。直到最近对编程足够熟悉后,我才决定开始尝试基于 FFT 的卷积,确切地说是一维,一实进,一复出。
我偶然发现了一些用于获取 FFT 和 IFFT 的代码并让它工作,我在复频域中得到了一个正确的 DFT,经过一点位操作(将复数数组分离回两个单独的实数和虚数数组)并通过 IFFT 运行它,然后再次进行更多位操作,从而得到预期的原始输入。
现在,也许我对卷积的概念完全错误,但简单地将复杂数组的相似元素相乘,然后通过 IFFT 将结果返回给虚假数字。 为了进行测试,我只是制作了一个斜坡内核,一个狄拉克三角函数作为输入并将结果插入 IFFT,代码没有按预期给出原始内核 .
public void convolution(double [] xReal, double [] xImag,
double [] hReal, double [] hImag){
for (int i = 0; i < n; i++){
xReal[i] *= hReal[i];
xImag[i] *= hImag[i];
}
}
我的问题是:这个用于将复杂 DFT 的元素相乘的代码是否正确。
我一直在寻找简单的卷积代码或只是其背后的数学,但没有这样的运气。我发现的一切都是“频域中的乘法等于时域中的卷积”。
【问题讨论】:
-
如果您的问题直截了当并提出明确的问题,您更有可能获得帮助。事实上,很难说出你在问什么。
-
我在问我用于计算卷积的代码是否给定频域中的复杂 DFT。
标签: java c++ fft convolution