问题标签 [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.
c - Restoring image from the full spectrum data by means of fftw3
How I can restore image by means of fftw3 if I have full fourier spectrum of image for restoring? I have tried to transmute fftwf_complex **arr1 to fftwf_complex *arr2 and put it into the fftwf_plan_dft_c2r_2d, but on output was a unexpected noise but not the expected image.
Make a inverse fast fourier transform:
Recreating the image for saving to TIFF:
Use FFTSHIFT because the spectrum was put into the IFFT function with IFFTSHIFT:
c++ - 具有 PPL 和并行内存分配的线程 ID
我有一个关于 Microsoft PPL 库和一般并行编程的问题。我正在使用 FFTW 执行大量(100,000)64 x 64 x 64 FFT 和逆 FFT。在我当前的实现中,我使用并行 for 循环并在循环内分配存储数组。我注意到在这些情况下,我的 CPU 使用率最高只有 60-70%。(请注意,这仍然比我测试过的 FFTW 提供的内置线程 FFT 更好地利用)。由于我使用的是 fftw_malloc,是否有可能发生过度锁定而阻止完全使用?
鉴于此,是否建议在主处理循环之前为每个线程预先分配存储数组,这样循环本身就不需要锁?如果是这样,MSFT PPL 库怎么可能做到这一点?我之前一直在使用 OpenMP,在这种情况下,使用提供的函数获取线程 ID 很简单。但是,我在 PPL 文档中没有看到类似的功能。
matlab - FFTW 到顶部 Matlab FFT 的优化
Matlab 中的 FFT 不允许选择有多少线程进行计算(http://stackoverflow.com/questions/9528833/matlabs-fftn-gets-slower-with-multithreading)。默认情况下,它使用独立 matlab 上的所有内核。但是在集群上,默认情况下每个工作人员都使用一个 CPU 启动。您可以强制它使用更多内核(maxNumCompThreads 函数)。这与代数运算完美配合,但 FFT 函数仍然(奇怪?)单核。因此,我使用 fftw 库(如 matlab 所做的那样)编写了一个 mex 文件来计算具有所需内核数的 fft。但是当我尝试使用 FFTW_ESTIMATE 规划器(这是 Matlab 中的默认设置)和清晰的智慧来比较代码时,我的代码仍然比 Matlab fft 慢 3 到 4 倍。
这是我用于 mex 的代码(应用于 2D fft,名为 FFT2mx):
相关的matlab代码:
我使用静态库编译 mex 代码:
一切正常,只是速度较慢。
FFTW 库已使用以下参数进行编译:
我在一个具有 2 个四核 AMD Opteron(tm) 的集群节点上运行此代码,并使用以下命令进行测试:
女巫归来:
如何调整我的 mex 代码?fftw库的编译是否可以优化?有没有办法只使用 ESTIMATE 规划器来加速 fftw 算法?
我正在寻找任何见解。谢谢你。
编辑:
我考虑了您的建议(使用智慧和静态计划)并编写了以下更新代码:
在对函数进行多次调用(2 到 6 次之间)后,我现在遇到了一些分段错误,我不知道为什么。我尝试了不同的方法来通过指针初始化。我还在某处读到该计划的指针必须是静态的才能与相应的静态计划一起使用。你看到我做错了什么吗?
再次感谢您的见解。
3d - 带有 fftw 库的 3d c2c fft
我正在尝试使用 FFTW 库进行 3D FFT,但我在逆变换方面遇到了一些困难。
首先,我通过以下方式进行前言转换:
虽然我的数据是真实数据,但我正在使用复杂到复杂的转换,因为以后想用只支持复杂到复杂转换的 opencl fft 替换它。
在 3D 傅立叶空间中,我做了一个非常简单的低通滤波器:
最后进行逆变换:
结果并不如我所料。在逆变换之后,虚部并不像他们应该的那样全为零。
据我所知,在对真实数据进行正向变换后,只使用了总缓冲区大小的一半,而另一半没有共轭复数值。(请参阅:c2c with real data)如果是这种情况,我必须在反向转换之前自行计算它们,但我无法在 fftw 文档中找到计算一半的提示,哪些不是。
我编写了一个非常简单的 2D-Test-Case 来查看傅立叶空间中的这种对称性:
这给了我以下输出:
据我所知,没有对称值。为什么?
如果有人能给我一个提示,那就太好了。
问候
狼
ctypes - Python Ctypes 和 FFTW 链接
我正在尝试在 python 中使用 ac 数值库,该库依赖于使用 Ctypes 的 fftw3。假设我有一个如下所示的程序:
然后我使用以下方法编译它:
当我尝试使用 ctypes 将它加载到 python 中时,它似乎没有正确链接:
Python 打印:
我最初使用的是全新安装的 fftw 3.1,使用 ./configure make make install 设置,但随后我尝试使用各种不同的选项(如此处概述的“-fPIC”)重新编译fftw。这给出了相同的错误消息,我现在没有想法了。同样的过程也适用于将其他库导入到以前使用 GSL 等外部库的 python 中,所以我不知道 FFTW3 出了什么问题。任何帮助将不胜感激。
〜道格
2d - fftw c2c:转换后的真实数据中缺少对称性
最近我遇到了一些关于使用 fftw 及其 c2c 转换的问题(参见:3d c2c fft with fftw library)。当我发现我在使用 fftw 库时遇到的问题时,我创建了一个新问题,以便以更具体的方式讨论这种情况。由于我正在使用真实数据进行复杂到复杂的转换,因此傅立叶空间中的转换数据应该是对称的: F[n] = con(F[Nn])
现在我对小块测试数据进行了一些转换,以检查转换后的数据是否具有这种对称性。对于一维变换,每件事都按预期工作,但对于更高维度,我得到了真正意想不到的结果。
我正在使用fftwf_plan_dft_2d
将 8x8 灰度图像转换为傅立叶空间,复杂结果由下式给出:
很抱歉这么长的数据列表,但它显示了我的问题。
例如对于F[3]=-182.721 + 15.8486i
我的预期F[64-3] = F[61] = -182.721 - 15.8486i
,但正如你所看到的那样-84.7868 + 9.10052i
。相反, 的共轭F[3]
位于索引 5 处。其他对也是如此。
如果有系统我找不到它。
这是完整的代码:
我会很感激一些帮助。:-D
问候
狼
fft - 带fftw的理想低通滤波器
再次,我仍然试图让我的低通滤波器运行,但我现在不知道为什么它仍然没有运行。我根据FFT Filters和我之前的问题FFT Question来定位我的代码,以便对图像应用理想的低通滤波器。下面的代码只是使图像变暗并在结果图像中放置一些白色像素。
一些帮助将不胜感激。
狼
matlab - 带有 MEX 和 MATLAB 参数问题的 FFTW
我使用 FFTW 库编写了以下 C/MEX 代码,以控制用于从 MATLAB 进行 FFT 计算的线程数。FFTW_ESTIMATE
尽管它比 MATLAB 慢,但该代码与规划器中的参数一起工作得很好(复杂的 FFT 向前和向后) 。但是,当我切换到FFTW_MEASURE
参数来调整 FFTW 规划器时,事实证明,向前应用一个 FFT 然后向后应用一个 FFT 不会返回初始图像。相反,图像按一个因子缩放。使用FFTW_PATIENT
空矩阵给我一个更糟糕的结果。
我的代码如下:
Matlab函数:
FFT 前向:
向后 FFT:
墨西哥功能:
FFT 前向:
FFT 向后:
正如 FFTW 文档中所建议的,此 MEX 函数与上述函数的不同之处仅在于切换指针pr <-> pi
、函数和计划pr2 <-> pi2
的CreatePlan
执行。
如果我跑
分别使用FFTW_MEASURE
和FFTW_ESTIMATE
参数我得到了这个结果。
我想知道这是否是由于我的代码或库中的错误造成的。我围绕智慧尝试了不同的东西,储蓄而不是储蓄。使用 FFTW 独立工具产生的智慧来产生智慧。我没有看到任何改善。谁能建议为什么会这样?
附加信息:
我使用静态库编译 MEX 代码:
FFTW 库尚未编译:
我尝试了不同的标志但没有成功。我在 Linux 64 位站(AMD opteron 四核)上使用 MATLAB 2011b。
opencv - FFTW 与 OpenCV cvDFT
使用 FFTW (http://www.fftw.org/) 而不是 OpenCV 的 cvDFT (http://goo.gl/YCHj0) 时,我可以期待加速吗?
我的程序的运行时间很大程度上取决于逆向和正向 DFT 的应用,我正在考虑使用 FFTW 而不是 OpenCV cvDFT。
IIRC FFTW 进行某种“运行时编译”,而 cvDFT 是一个简单的 FFT 实现,所以我想它可以加快我的处理速度。
所以在我自己尝试之前,我想在这里问一下,以防有人偶然发现同样的问题并在之前解决了它。
提前致谢
openmp - 使用 OpenMP 的 FFTW 文档中存在误解或拼写错误
此报价来自FFTW 手册:
[...] 第三,在创建要并行化的计划之前,您应该调用:
void fftw_plan_with_nthreads(int nthreads);
nthreads 参数表示您希望 FFTW 使用的线程数(或者实际上是最大数)。[...]
使用 OpenMP,要将 FFTW 配置为使用所有当前正在运行的 OpenMP 线程(由 omp_set_num_threads(nthreads) 或
OMP_NUM_THREADS
环境变量设置),您可以这样做 :)fftw_plan_with_nthreads(omp_get_num_threads()
。
我认为最后一个命令是错误的。应该是fftw_plan_with_nthreads(omp_get_max_threads())
。omp_get_num_threads()
将返回当前线程数。但这可能是1
因为有人在一个线程上创建 fftw_plan。omp_get_num_threads()
不会返回 的值OMP_NUM_THREADS
并且不是 的倒数omp_set_num_threads(nthreads)
。
我是对的还是我误解了 FFTW 或 OpenMP API?