问题标签 [fftw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1281 浏览

c - 如何在 C 中批量 FFT

我正在尝试使用以下代码段对 50 个图像进行批量 FFT:

但是,我只能获得第一张图像的 FFT(即第一个 pix1*pix2 元素)。关于如何做到这一点的任何建议?

提前致谢

0 投票
4 回答
5621 浏览

signal-processing - 为什么在时域和频域中执行卷积结果的长度不同?

我不是 DSP 专家,但我知道有两种方法可以将离散时域滤波器应用于离散时域波形。第一个是在时域中对它们进行卷积,第二个是对两者进行 FFT,将两个复频谱相乘,然后对结果进行 IFFT。这些方法的一个关键区别是第二种方法是循环卷积。

例如,如果滤波器和波形都是 N 点长,则第一种方法(即卷积)会产生 N+N-1 点长的结果,其中该响应的前半部分是滤波器填满,第二部分是一半是过滤器排空。为了获得稳态响应,滤波器需要比要滤波的波形具有更少的点。

用第二种方法继续这个例子,假设离散时域波形数据都是实数(不是复数),滤波器的 FFT 和波形都产生 N 点长的 FFT。将两个频谱乘以 IFFT'ing 结果会产生一个时域结果,其长度也为 N 点。这里过滤器填满和清空的响应在时域中相互重叠,并且没有稳态响应。这就是循环卷积的效果。为了避免这种情况,通常滤波器大小会小于波形大小,并且两者都将被补零,以便在两个频谱乘积的 IFFT 之后及时扩展频率卷积的空间。

我的问题是,我经常在知名专家/公司的文献中看到他们有离散(真实)时域波形(N 个点)的工作,他们对其进行 FFT,将其乘以某个滤波器(也是 N 个点),并将结果IFFT用于后续处理。我天真的想法是这个结果不应该包含稳态响应,因此应该包含来自过滤器填充/清空的伪影,这会导致解释结果数据时出现错误,但我一定遗漏了一些东西。在什么情况下这是一种有效的方法?

任何见解将不胜感激

0 投票
3 回答
10536 浏览

c++ - 问题铸造 STL 复杂到 fftw_complex

FFTW 手册说它的类型与 STLfftw_complex中的类有点兼容。std::complex<double>但这对我不起作用:

这给了我一个错误:

我究竟做错了什么?

0 投票
2 回答
5444 浏览

c++ - 如何在 FFTW 库中进行反实数到实数 FFT

我正在尝试使用 FFT 进行一些过滤。我正在使用 r2r_1d 计划,但我不知道如何进行逆变换...

我做的所有事情都正确吗?我很困惑,因为在 FFTW 复杂 DFT 中,您可以通过如下标志设置变换方向:
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

p = fftw_plan_dft_1d(N, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);

0 投票
2 回答
3528 浏览

c++ - FFTW:信号由IFFT后的噪声组成

进行 FFT 和 IFFT 后,我只能听到耳机中的噪音......这是代码:

也许我选择了错误的 FFT 类型?
PS数据是初始信号

更新

好的,现在代码是

问题仍然存在,我的数据阵列已损坏。

更新#2

所以,问题在于我的变换大小和规范化。如果我使用真实到真实的 FFTW_REDFT10 和 FFTW_REDFT01 转换我需要使用哪些转换大小?2*n? 或者是其他东西?然后我需要通过将每个元素除以 2*n 来标准化我的输出信号?
感谢大家的回复。

更新#3

感谢大家再次回复。在你的帮助下,我已经解决了这个问题。这是工作代码:

0 投票
1 回答
1377 浏览

c++ - FFTW 的 fftw_plan_dft_r2c_1d() 在 KissFFT 中的等效函数是什么?

我有一个使用fftw_plan_dft_r2c_1dfftw_plan_dft_c2r_1d来自 FFTW 的项目,以及fftw_execute. KissFFT 中的等价函数是什么?

0 投票
1 回答
825 浏览

android - 在 libgdx FFT 中设置频域

我是傅立叶变换的新手,所以有人可以解释我需要做什么才能在 fftw 中复制这种行为:

使用libgdx 的 FFT 类

我假设我要这样初始化我的 FFT 对象:

但我找不到任何与频域相关的方法。我可以fourier.forward(samples),但它不需要任何其他参数。有人可以提示我在这里需要做什么吗?

0 投票
2 回答
1038 浏览

image-processing - 我在哪里可以找到解释 FFT 相位相关评分的良好信息来源

我一直在寻找 OpenCV 的源代码来理解分数计算。您可能已经注意到,该库可以在具有置信度分数的图像中找到模板。cvMatchTemplate 函数给出模板在图像中的概率和位置。

由于 DFT 很慢,我决定使用 FFTW 库进行相位相关。我得到图像,扩展为 2 的幂的大小,然后对模板执行相同操作,首先计算两者的 FFT,将两个数组相乘,计算逆 FFT,最后对结果进行归一化。

如果我在位图上显示这个结果,它会清楚地显示模板的位置,但是,我很难计算相关分数。我尝试在调试器下逐行运行 cvMatchTemplate 方法,但由于库使用 DFT 和任意图像大小,它没有帮助。该方法中使用的所有表(sum、sqsum 等)都是为相应的任意大小创建的,FFT 使用 2 的幂。

我将不胜感激有关如何根据相位相关结果计算分数的任何信息。有许多资料描述了“拿这个,拿那个,把它们相乘,你看到图像上的白点,是的,你找到了”的方式。我需要一个分数,就像 cvMatchTemplate 一样。

我恳请您将我指向一个站点或包含该计算逻辑的论文或一本书。源代码将是完美的,但无论如何我对此没有希望。

0 投票
2 回答
5817 浏览

audio - Normalising FFT data (FFTW)

Using FFTW I have been computing the FFT of normalized .wav file data. I am a bit confused as to how I should normalise the FFT output, however. I have been using the method which seemed obvious to me, which is simply to divide by the highest FFT magnitude. I have seen division by 1/N and N/2 recommended, however (where I assume N = FFT size). How do these work as normalisation factors? There doesn't seem to me to be an intuitive relation between these factors and the actual data - so what am I missing?

Huge thanks in advance for any help on this.

0 投票
2 回答
3535 浏览

c++ - 如何使用 CUFFT 的批处理模式?

我试图弄清楚如何使用 CUFFT 库中提供的批处理模式。

我基本上有一个 5300 像素宽和 3500 高的图像。目前这意味着我正在使用 FFTW 在这 5300 个元素上运行 3500 个 1D FFT。

这是在批处理模式下运行 CUFFT 库的一个很好的候选问题吗?必须如何设置数据才能解决此问题?

谢谢