草庐IT

c++ - 数值不稳定性 FFTW <> Matlab

我正在尝试用数值方法求解Swift-Hohenberg方程http://en.wikipedia.org/wiki/Swift%E2%80%93Hohenberg_equation使用伪谱方案,其中线性项在傅立叶空间中隐式处理,而非线性在实空间中评估。一个简单的欧拉方案用于时间积分。我的问题是,我提出的Matlab代码可以完美运行,而依赖FFTW进行傅立叶变换的C++代码在几千个时间步后变得不稳定并发散。我已经追踪到处理非线性项的方式(请参阅C++代码中的注释)。如果我只使用Phi的实部,就会发生不稳定。然而,由于数值舍入误差,Phi应该只有一个可以忽略不计的虚部,而Matlab正在做

【交叉编译】编译生成 x86、arm 环境下的FFTW库

FFTW是一个快速计算离散傅里叶变换的标准C语言程序集,可计算一维或多维实和复数据以及任意规模的DFT。下面主要介绍的是x86环境下 FFTW库的编译过程,arm环境下的编译过程和FFTW类似,不同之处在于需要手动指定编译环境和编译器。FFTW有三个版本的数据类型:double、float和longdouble,在安装时对应不同的编译选项,最终得到的库也不尽相同。(以安装fftw3.3版本为例)类型库名称编译选项double类型fftw3-3默认安装,无需另加编译选项float类型fftw3f-3--enable-floatlongdouble类型fftw3l-3--enable-long-d

C语言使用CUDA中cufft函数做GPU加速FFT运算,与调用fftw函数的FFT做运算速度对比

目录任务介绍环境所需相关软件下载与安装C语言:不调用库的GPU加速FFT代码C语言:调用fftw库的未使用GPU的FFT代码C语言:调用cufft库的GPU加速FFTgnuplot安装画图,maltab编写的FFT运算结果对比matlab测试信号和测试时的坑任务介绍时隔多年仍然逃不掉写C的命运……因为这个任务周期不短还踩了好多坑,必须记录一下了。任务简单要求就是使用C语言编写一个GPU加速的快速傅里叶变换(FFT)分为GPU加速的FFT代码改写、未使用GPU的FFT编写、运算速度对比、运算结果测试(与matlab结果对比),只要按照我文章写的顺序做就行环境所需相关软件下载与安装VisualSt

linux - 为什么我不能用 LD_LIBRARY_PATH 覆盖动态库的搜索路径?

编辑:我解决了这个问题,解决方案如下。我正在专用于科学计算的共享计算集群中构建代码,因此我只能控制我的主文件夹中的文件。虽然我以fftw为例,但我想了解具体原因,为什么我尝试设置LD_LIBRARY_PATH不起作用。我像这样在我的主文件夹中构建fftw和fftw_mpi库./configure--prefix=$HOME/install/fftw--enable-mpi--enable-sharedmakeinstall构建良好,但在install/fftw/lib中,我发现新构建的libfftw3_mpi.so链接到错误版本的fftw库。$lddlibfftw3_mpi.so|gr

linux - 为什么我不能用 LD_LIBRARY_PATH 覆盖动态库的搜索路径?

编辑:我解决了这个问题,解决方案如下。我正在专用于科学计算的共享计算集群中构建代码,因此我只能控制我的主文件夹中的文件。虽然我以fftw为例,但我想了解具体原因,为什么我尝试设置LD_LIBRARY_PATH不起作用。我像这样在我的主文件夹中构建fftw和fftw_mpi库./configure--prefix=$HOME/install/fftw--enable-mpi--enable-sharedmakeinstall构建良好,但在install/fftw/lib中,我发现新构建的libfftw3_mpi.so链接到错误版本的fftw库。$lddlibfftw3_mpi.so|gr

c++ - 加速 FFTW 修剪以避免大量零填充

假设我有一个序列x(n)这是K*N长而且只有第一个N元素不为零。我假设N,例如N=10和K=100000.我想通过FFTW计算这样一个序列的FFT。这相当于拥有一个长度为N的序列并对K*N进行零填充.自N和K可能是“大”,我有一个重要的零填充。我正在探索是否可以节省一些计算时间,避免显式零填充。案例K=2让我们首先考虑案例K=2.在这种情况下,x(n)的DFT可以写成如果k是偶数,即k=2*m,然后这意味着DFT的这些值可以通过长度为N的序列的FFT来计算,而不是K*N.如果k是奇数,即k=2*m+1,然后这意味着DFT的这些值可以通过长度为N的序列的FFT再次计算,而不是K*N.因此

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

在进行FFT和IFFT之后,我只能听到耳机中的噪音...这是代码:double*spectrum=newdouble[n];fftw_planplan;plan=fftw_plan_r2r_1d(n,data,spectrum,FFTW_REDFT10,FFTW_ESTIMATE);fftw_execute(plan);fftw_destroy_plan(plan);plan=fftw_plan_r2r_1d(n,spectrum,data,FFTW_REDFT01,FFTW_ESTIMATE);fftw_execute(plan);fftw_destroy_plan(plan);也许

c++ - 使用 FFTW 库 C++ 计算 FFT 和 IFFT

我正在尝试计算FFT,然后计算IFFT,只是为了尝试是否可以返回相同的信号,但我不确定如何完成它。这就是我进行FFT的方式:plan=fftw_plan_r2r_1d(blockSize,datas,out,FFTW_R2HC,FFTW_ESTIMATE);fftw_execute(plan); 最佳答案 这是一个例子。它做了两件事。首先,它准备一个输入数组in[N]作为余弦波,其频率为3,幅度为1.0,并对其进行傅里叶变换。因此,在输出中,您应该在out[3]处看到一个峰值,在out[N-3]处看到另一个峰值。由于余弦波的幅度为1

c++ - 使用 fftw 和窗口函数生成正确的频谱图

对于一个项目,我需要能够从.WAV文件生成频谱图。我已阅读以下内容:获取N(变换大小)个样本申请window功能使用样本进行快速傅里叶变换标准化输出生成频谱图在下图中,您可以看到两个使用hanning的10000Hz正弦波的频谱图。窗函数。在左侧,您会看到audacity生成的频谱图右边是我的版本。如您所见,我的版本有更多的线条/噪音。这是在不同的垃圾箱中泄漏吗?我如何才能像大胆生成的那样获得清晰的图像。我应该做一些后期处理吗?我还没有做任何规范化,因为不完全理解如何做。更新我找到了this解释如何在C++中生成频谱图的教程。我编译了源代码以查看我能找到哪些差异。老实说,我的数学很生疏

windows - 将 FFTW 链接到 Matlab Mex 文件

我正在尝试在mex文件中运行FFTW代码。这严格用于开发和测试目的。经过一番谷歌搜索后,我看到其他人曾尝试做类似的事情并且遇到了相关问题,但我还没有找到任何解决方案。尝试运行mex文件时,Matlab告诉我:???Errorusing==>chirpTransform.mxCtaInvalidMEX-file'\removed\my\directory\+chirpTransform\mxCta.mexw32':Thespecifiedprocedurecouldnotbefound..我正在使用gnumex和MinGW来构建mex文件,因为LCC似乎有一些问题。我尝试使用FFTW站点