问题标签 [ifft]

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 回答
2512 浏览

c++ - 傅里叶逆变换手动合并实部和虚部

我正在为图像的傅立叶变换制作几个包装器方法并且遇到了问题。每当我使用标准方法时:

反转操作:

一切都好。但是,当我尝试使用这对时:

要提取具体参数,我无法将其重新组合在一起。目前我专注于实数和虚数部分,因为我觉得 Mag/Phi 的工作方式相同,只是首先从 Mag/Phi 转换为实数和虚数。

//re和im正确进入(已验证)

两种方法(使用向量和使用数组 pp)都会产生相同的白色矩形。为了查看它是否有任何作用,我通过了 fft::idft(&re, &re, &img, true); 在这种情况下,两个窗口中的结果相同(一些随机垃圾但相同)

我怀疑问题出在错误的合并程序上,但我没有其他想法如何恢复原始表单?

提前感谢您的见解。

0 投票
1 回答
1125 浏览

matlab - MATLAB中离散FFT的“频率”偏移

(免责声明:我曾考虑在 math.statsexchange 上发布此内容,但发现类似的问题已移至 SO,所以我在这里)

上下文:

我正在使用 fft/ifft 来确定随机变量总和的概率分布。因此,例如,我有两个均匀的概率分布——在最简单的情况下,区间 [0,1] 上有两个均匀分布。

因此,要获得从这两个分布中采样的两个随机变量之和的概率分布,可以计算每个概率密度的傅里叶变换的乘积。对这个产品做逆 fft,你会得到总和的概率密度。

一个例子:

我的问题是,产生的概率的形状。窝点。功能完善。但是,x 轴不适合x我一开始创建的,而是移动了。在示例中,峰值在 1.5,而它应该是 0.5。

如果我添加第三个随机变量或修改x. 但我无法弄清楚如何。

恐怕这可能与我有负值的事实有关x,而傅立叶变换通常在frequencies < 0没有意义的时域/频域中工作。

我知道我可以找到例如峰值并将其转移到适当的位置,但看起来很讨厌且容易出错......

很高兴有任何想法!

0 投票
1 回答
1625 浏览

fft - FFTW中的单精度数学比双精度慢?

我正在查看FFT库的基准,并想知道为什么双精度数学会比单精度数学更快(即使在 32 位硬件上)。

0 投票
1 回答
591 浏览

matlab - 如何在 3D 矩阵上使用 FFT 和 IFFT 确定时间维度上的频率

目前,我正在从事一项任务,以从在 Matlab 中播放的电影文件中获取几帧。在参数 X、Y 和时间中创建了一个 3D 矩阵。但我被要求通过使用 FFT 和 IFFT 及时确定频率。

我的问题是如何通过在 3D 矩阵上使用 FFT 和 IFFT 来绘制图形以确定时间维度上的频率?如果有人能提供部分matlab代码将不胜感激。

0 投票
3 回答
377 浏览

algorithm - 信号关系和转换:将一个信号转换为另一个信号?

我正在尝试将近岸潮汐信号(点 A)与沿长模型边界的 3 个点(点 BCD)相关联。我想可能在BCD之间建立关系,我们可以将A预测转换为BCD。目前我正在做一个单相移,高于零电平的幅度比,低于零电平的幅度比和平均电平偏移。

这会在落潮峰和洪水峰时的潮汐信号中产生扭结,并导致模型过度预测落潮。我想知道是否有人知道这种转换的更复杂的关系?

我想捕捉的一件事是高水位和低水位之间的相移差异(例如,不同点的阳性周期与阴性周期的比率可能不同)。

当前流程的示例算法。

顺便说一句:这种关系是基于大约 6 个月的数据。

编辑1:嗯,首先想想两个正弦信号(即幅度,相移),但不是规则的,所以例如周期是12.5小时,但正半和负半的斜率和周期并不是全部相同的。您不需要任何上下文知识。我只是在寻找一种转换算法。

编辑2:

这是时间序列和 fft 比较的图片(fft 专注于高能量频率(12.5 小时(半日)),只是为了说明并非所有频率都可以很好地缩放)。黑色是 A. 零线中的绿色。

水位 [m] 时间序列(顶部)和 fft 分析(底部)

0 投票
1 回答
482 浏览

matlab - 实值信号频谱

据我所知,幅度部分是偶数对称而相位部分是奇数对称的频谱的IFFT应该是真实的。

让我们考虑这个例子:

很明显,这个频谱满足我上面列出的两个条件。当我使用 Matlab 执行 IFFT 时,我得到:

获得的信号是复值的。为什么?有什么问题?

0 投票
1 回答
954 浏览

opencv - OpenCV DFT_INVERSE 与 Matlab 的 ifft 不同

我尝试使用 opencv 的 dft 函数过滤信号。我尝试这样做的方法是在时域中获取信号:

使用以下方法将其转换为 FOURIER 域:

消除不需要的频率:

将其转换回时域:

为了检查我的结果,我将它们与 Matlab 进行了比较。我采用相同的信号 x,将其转换为 FOURIERx_mfft = fft(x);结果与我从 opencv 得到的结果相似,除了在 opencv 中我只得到左侧,而在 matlab 中我也得到对称值。在此之后,我在 Matlab 中将值设置为 0,x_mfft(0) and x_mfft(8:32)现在信号看起来完全相同,除了在 Matlab 中它们是复数形式,而在 opencv 中它们是分开的,实部在一个通道中,虚部在另一个通道中。

问题是,当我使用 matlab 执行逆变换时x_mfilt = ifft(x_mfft),结果与我使用 opencv 得到的完全不同。 MATLAB

cv::dft(x_fft, x_filt, cv::DFT_INVERSE, 0) 之后的 OpenCV;

频道 1:

频道 2:

我错过了什么?结果不应该相似吗?如何检查opencv中的逆变换是否正确完成?

后来的编辑:在解决了几个小时的问题后,我决定绘制 Matlab 和 OpenCV 的结果,令我惊讶的是,它们非常相似。

虚部 在此处输入图像描述

实物部分: 在此处输入图像描述

所以很明显,这是关于 SCALE 因素的。在将它们逐个元素划分之后,这个因子显然是 32 - 信号的长度。有人可以解释为什么会这样吗?显而易见的解决方案是使用cv::dft(x_fft, x_filt, cv::DFT_INVERSE+cv::DFT_SCALE, 0);,所以我想这个话题已经得到解答,但我仍然对为什么会这样感兴趣。

0 投票
1 回答
4961 浏览

python - Python:将频率响应转换为脉冲响应

我正在使用声学模拟器,它可以为我输入的任何(正实际)频率提供(复杂的)频率响应。

我想生成一个 1024 点的脉冲响应。

我相信我在这里掌握了基本技术:https ://dsp.stackexchange.com/questions/13883/convert-frequency-response-to-impulse-response

但是,我想从命令行实现它。

模拟器生成一个看起来像这样的文件(注意我已经缩短了数字以使其更具可读性):

  • 第二列是以弧度/秒为单位的角频率

  • 第三列是以Hz为单位的频率

  • 第 11 列和第 12 列是 Re(z) 和 Im(z),即该频率的频率响应的实部和虚部

  • 第 13 列是频率响应的幅度,我猜这可以与前两列之一一起丢弃

所以我的问题是:我怎样才能处理这个文件并得到一个脉冲响应?

0 投票
1 回答
400 浏览

matlab - matlab中高斯函数的ifft

我已经分析计算了高斯函数的 FFT(均值为零)。现在我想使用 MATLAB 代码对其进行数值 IFFT。由于我是 MATLAB 新手,因此需要帮助。

先感谢您。

0 投票
1 回答
2313 浏览

matlab - 来自频谱的时间序列

我在将频谱转换为时间序列时遇到了一个小问题。我已经阅读了很多文章,我认为我正在应用正确的程序,但我没有得到正确的结果。你能帮忙找出错误吗?

我有一个时间序列,例如: 在此处输入图像描述

当我计算频谱时,我会: %number of points nPoints=length(timeSeries);

我得到:

在此处输入图像描述

我认为频谱计算得很好。但是,现在我需要返回并从该频谱中获取时间序列,我会这样做:

但是,情节看起来像:

在此处输入图像描述

它比原始系列低一个数量级。有什么推荐吗?