问题标签 [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.
c++ - 傅里叶逆变换手动合并实部和虚部
我正在为图像的傅立叶变换制作几个包装器方法并且遇到了问题。每当我使用标准方法时:
反转操作:
一切都好。但是,当我尝试使用这对时:
要提取具体参数,我无法将其重新组合在一起。目前我专注于实数和虚数部分,因为我觉得 Mag/Phi 的工作方式相同,只是首先从 Mag/Phi 转换为实数和虚数。
//re和im正确进入(已验证)
两种方法(使用向量和使用数组 pp)都会产生相同的白色矩形。为了查看它是否有任何作用,我通过了 fft::idft(&re, &re, &img, true); 在这种情况下,两个窗口中的结果相同(一些随机垃圾但相同)
我怀疑问题出在错误的合并程序上,但我没有其他想法如何恢复原始表单?
提前感谢您的见解。
matlab - MATLAB中离散FFT的“频率”偏移
(免责声明:我曾考虑在 math.statsexchange 上发布此内容,但发现类似的问题已移至 SO,所以我在这里)
上下文:
我正在使用 fft/ifft 来确定随机变量总和的概率分布。因此,例如,我有两个均匀的概率分布——在最简单的情况下,区间 [0,1] 上有两个均匀分布。
因此,要获得从这两个分布中采样的两个随机变量之和的概率分布,可以计算每个概率密度的傅里叶变换的乘积。对这个产品做逆 fft,你会得到总和的概率密度。
一个例子:
我的问题是,产生的概率的形状。窝点。功能完善。但是,x 轴不适合x
我一开始创建的,而是移动了。在示例中,峰值在 1.5,而它应该是 0.5。
如果我添加第三个随机变量或修改x
. 但我无法弄清楚如何。
恐怕这可能与我有负值的事实有关x
,而傅立叶变换通常在frequencies < 0
没有意义的时域/频域中工作。
我知道我可以找到例如峰值并将其转移到适当的位置,但看起来很讨厌且容易出错......
很高兴有任何想法!
fft - FFTW中的单精度数学比双精度慢?
我正在查看FFT库的基准,并想知道为什么双精度数学会比单精度数学更快(即使在 32 位硬件上)。
matlab - 如何在 3D 矩阵上使用 FFT 和 IFFT 确定时间维度上的频率
目前,我正在从事一项任务,以从在 Matlab 中播放的电影文件中获取几帧。在参数 X、Y 和时间中创建了一个 3D 矩阵。但我被要求通过使用 FFT 和 IFFT 及时确定频率。
我的问题是如何通过在 3D 矩阵上使用 FFT 和 IFFT 来绘制图形以确定时间维度上的频率?如果有人能提供部分matlab代码将不胜感激。
algorithm - 信号关系和转换:将一个信号转换为另一个信号?
我正在尝试将近岸潮汐信号(点 A)与沿长模型边界的 3 个点(点 BCD)相关联。我想可能在BCD之间建立关系,我们可以将A预测转换为BC和D。目前我正在做一个单相移,高于零电平的幅度比,低于零电平的幅度比和平均电平偏移。
这会在落潮峰和洪水峰时的潮汐信号中产生扭结,并导致模型过度预测落潮。我想知道是否有人知道这种转换的更复杂的关系?
我想捕捉的一件事是高水位和低水位之间的相移差异(例如,不同点的阳性周期与阴性周期的比率可能不同)。
当前流程的示例算法。
顺便说一句:这种关系是基于大约 6 个月的数据。
编辑1:嗯,首先想想两个正弦信号(即幅度,相移),但不是规则的,所以例如周期是12.5小时,但正半和负半的斜率和周期并不是全部相同的。您不需要任何上下文知识。我只是在寻找一种转换算法。
编辑2:
这是时间序列和 fft 比较的图片(fft 专注于高能量频率(12.5 小时(半日)),只是为了说明并非所有频率都可以很好地缩放)。黑色是 A. 零线中的绿色。
matlab - 实值信号频谱
据我所知,幅度部分是偶数对称而相位部分是奇数对称的频谱的IFFT应该是真实的。
让我们考虑这个例子:
很明显,这个频谱满足我上面列出的两个条件。当我使用 Matlab 执行 IFFT 时,我得到:
获得的信号是复值的。为什么?有什么问题?
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);
,所以我想这个话题已经得到解答,但我仍然对为什么会这样感兴趣。
python - Python:将频率响应转换为脉冲响应
我正在使用声学模拟器,它可以为我输入的任何(正实际)频率提供(复杂的)频率响应。
我想生成一个 1024 点的脉冲响应。
我相信我在这里掌握了基本技术:https ://dsp.stackexchange.com/questions/13883/convert-frequency-response-to-impulse-response
但是,我想从命令行实现它。
模拟器生成一个看起来像这样的文件(注意我已经缩短了数字以使其更具可读性):
第二列是以弧度/秒为单位的角频率
第三列是以Hz为单位的频率
第 11 列和第 12 列是 Re(z) 和 Im(z),即该频率的频率响应的实部和虚部
第 13 列是频率响应的幅度,我猜这可以与前两列之一一起丢弃
所以我的问题是:我怎样才能处理这个文件并得到一个脉冲响应?
matlab - matlab中高斯函数的ifft
我已经分析计算了高斯函数的 FFT(均值为零)。现在我想使用 MATLAB 代码对其进行数值 IFFT。由于我是 MATLAB 新手,因此需要帮助。
先感谢您。
matlab - 来自频谱的时间序列
我在将频谱转换为时间序列时遇到了一个小问题。我已经阅读了很多文章,我认为我正在应用正确的程序,但我没有得到正确的结果。你能帮忙找出错误吗?
我有一个时间序列,例如:
当我计算频谱时,我会: %number of points nPoints=length(timeSeries);
我得到:
我认为频谱计算得很好。但是,现在我需要返回并从该频谱中获取时间序列,我会这样做:
但是,情节看起来像:
它比原始系列低一个数量级。有什么推荐吗?