在数学中,您可以对函数进行二重导数或二重积分。在许多情况下,执行双导数对实际的现实情况进行建模,例如寻找物体的加速度。
由于傅里叶变换将一个实数或复数信号作为输入,并产生一个复数信号作为输出,因此没有什么能阻止您获取该输出并再次应用傅里叶变换......有什么实际用途吗?这?它有助于模拟一些复杂的现实世界情况吗?
使用相同的逻辑,没有什么能阻止您对原始时域输入信号进行傅里叶逆变换……这会有用吗?为什么或者为什么不?
在数学中,您可以对函数进行二重导数或二重积分。在许多情况下,执行双导数对实际的现实情况进行建模,例如寻找物体的加速度。
由于傅里叶变换将一个实数或复数信号作为输入,并产生一个复数信号作为输出,因此没有什么能阻止您获取该输出并再次应用傅里叶变换......有什么实际用途吗?这?它有助于模拟一些复杂的现实世界情况吗?
使用相同的逻辑,没有什么能阻止您对原始时域输入信号进行傅里叶逆变换……这会有用吗?为什么或者为什么不?
不,两次傅立叶变换相当于时间反转(或您所在的任何维度的反转)。您只需乘以一个常数,该常数取决于您用于傅里叶变换的缩放类型。
应用于时域信号的傅里叶逆变换只是给出频率反转的频谱。请查看此答案以获取更多详细信息。
“有实际应用吗?” 肯定是的,至少要检查代码和绑定错误。特别是对于海量数据或大量迭代
“理论上,理论和实践是匹配的。在实践中,他们不会。” 所以,从数学上讲,不,正如马特回答的那样。因为(正如已经回答的那样), (直到一个潜在的比例因子)。但是,它在计算上可能很有用,因为上述方程通常是通过离散傅里叶变换及其快速化身 FFT 实现的。
第一个原因来自于检查傅立叶实现(无论是由您、其他人还是从库编写)是否对您的数据执行了它应该做的事情的意愿。样本排序、比例因子、输入类型(真实性、位深度)或长度的限制是傅里叶实现(如 FFT)的潜在后续错误的来源。因此,作为健全性检查,检查实现的版本是否至少近似地继承了理论属性总是好的。正如您将看到的,如 Machupicchu 所示,您不会完全恢复反转的实数输入:通常,虚部不完全为零,实部是预期的,但由于计算机计算不完善,相对误差很小(浮点数)在与机器相关的公差内. 这在下图中可见。FFT 对随机的 32 个样本信号应用两次,然后翻转。如您所见,误差很小,使用双精度浮点数。
如果错误不是相对较小,那么您使用的代码可能存在错误。
第二个涉及巨大的数据量或大量的迭代 FFT 计算,例如断层扫描。在那里,先前的小相对误差可以累积和传播,甚至在此处引起计算发散或误差。这在下图中可见。对于不太长的信号(样本),我们执行以下迭代:
其中表示 FFT。显示的图形是二次抽样的。我们计算最大误差在每次迭代中。
如您所见,由于信号的大小,误差的数量级发生了变化。另外,最大误差稳步增加。经过次迭代后,它仍然足够小。但是你可以猜到,对于一个的体素立方体,以及数百万次迭代,这个错误可能变得不可忽略。
限制错误,并在迭代中评估其行为可能有助于检测此类行为,然后通过适当的阈值或舍入来减少。
附加信息:
2D 傅里叶变换 (2D DFT) 用于图像处理,因为图像可以被视为 2D 信号。例如,对于灰度图像,,这意味着在坐标和处图像具有强度值 z。看看这个例子:
https://ch.mathworks.com/help/matlab/ref/fft2.html
尝试这个:
x=imread('cameraman.tif');
X=fft2(fft2(x));
imagesc(abs(X));
并比较:
x=imread('cameraman.tif');
X= ifft2(fft2(x));
imagesc(abs(X));
而是那样。我将 fft2 应用到了几次,而不是第二次应用了 ifft2。我认为这说明了@Matt L. 所说的:
“进行两次傅里叶变换相当于时间反转”,
您可以看到图像是倒置的,因为在 ifft() 中 -i 是负数而不是正数。
我也为一维信号(例如时间)做了它: