有执行双傅立叶变换的实际应用程序吗?…或在时域输入上进行傅立叶逆变换?


11

在数学中,您可以采用函数的双导数或双积分。在许多情况下,执行双导数模型可以模拟实际的实际情况,例如找到对象的加速度。

由于傅立叶变换将实数或复数信号作为输入,并产生复数信号作为输出,因此没有什么会阻止您获取该输出并再次应用傅立叶变换...在此方面有任何实际用途吗?这个?它有助于对一些复杂的现实情况进行建模吗?

按照相同的逻辑,没有什么可以阻止您对原始时域输入信号进行傅立叶逆变换了……这会有用吗?为什么或者为什么不?

Answers:


9

“有实际用途吗?” 绝对可以,至少要检查代码和绑定错误。

“理论上,理论和实践是匹配的。实际上,它们是不匹配的。” 因此,从数学上讲,不是的,正如Matt回答的那样。因为(如已经回答的), FFXŤ=X-Ť(直到潜在的比例因子)。但是,由于上式通常是通过离散傅立叶变换及其快速化身FFT实现的,因此在计算上可能有用。

第一个原因来自于检查傅立叶实现的意愿,无论该实现是由您,其他人还是从库进行编码的,是否都应该对您的数据进行处理。样本排序,缩放因子,输入类型的限制(真实性,位深度)或长度是诸如FFT等傅立叶实现方法潜在的后续误差的来源。因此,作为健全性检查,最好检查已实现的版本至少(至少近似地)继承理论属性。正如您将看到的,如Machupicchu所示,您不能完全恢复真实的反向输入:由于计算机计算不完善,虚部通常不完全为零,实际部分是预期的,但是相对误差很小(浮点)在与机器相关的公差范围内。在下面的图片中可以看到这一点。将FFT应用于随机的32个采样信号两次,然后翻转。如您所见,使用双精度浮点数的误差很小。

数据,其双翻转FFT和误差

如果错误不是很小,则您使用的代码中可能存在错误。

第二个问题涉及巨大的数据量或大量的迭代FFT计算,例如层析成像。此处,先前的较小相对误差会累积和传播,甚至在此处引起某些细节的计算差异或误差。在下面的图片中可以看到这一点。对于不那么长的信号X01个Ë6个样品),我们执行以下迭代:

Xķ+1个=[RËFFFFXķ
,其中F最大值|Xķ-X0|

数据,四倍FFT和迭代中的最大误差

如您所见,由于信号的大小,误差的数量级已经改变。另外,最大误差稳定增加。经过次迭代后,它仍然足够小。但是您可以猜测,如果使用 x x -voxel多维数据集以及数百万次迭代,此错误可能变得不可忽略。10001000×1000×1000

界定错误并在迭代中评估其行为可能有助于检测此类行为,然后通过适当的阈值化或舍入来减少错误。

附加信息:


1
我确实很喜欢这个答案,我会把它标记为已接受的答案,但是我认为,大多数提出此问题的人都将寻找Matt所提供的理论信息。+1虽然是一个很好的答案。
tjwrona1992

1
我真的很感谢您的评论。但是,我已经用适当的数字更新了答案,以表明离散傅立叶实现中的错误很重要。
洛朗·杜瓦尔

17

X-Ť乘以一个常数,该常数取决于用于傅立叶变换的缩放比例类型。

应用于时域信号的傅立叶逆变换仅给出具有频率倒置的频谱。请查看此答案以获取更多详细信息。


4
您只是递归地吹了我的心。
tjwrona1992

我要说明一下马特。我说过,但是我的代码是二维的吗?即我们得到f(-x,-y)。
Machupicchu

@Machupicchu,是的,看起来不错。
tjwrona1992

哈哈,那么您可以选择我的答案广告,排名第一的^^(他有53K代表,因此对他来说没有任何区别哈哈)
Machupicchu

在我说完之后,我才意识到,可能有比双傅立叶变换更容易的方法来对信号进行时间反转哈哈
tjwrona1992 '19

16

虽然走的是傅里叶变换直接连续两次只是给你一个简单的时间反转,这将是便宜得多,而不FT实现,还有就是可以通过采取傅立叶变换,应用一些其他的操作再次完成,然后有用的东西傅立叶变换的结果。最著名的例子是自相关,它是信号与其自身的卷积。如果天真的卷积是On 2),但是只有On ·log n),通过傅立叶变换绕道而行。因此,通常通过对信号进行FT'处理,取绝对平方并进行IFT将其返回时域来完成自相关。


2
此外,还有倒谱,即傅立叶变换的对数的傅立叶逆变换。它可以用来检测周期信号。
Olli Niemitalo

12

一世一世Xÿ=žXÿ

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.说的话:

“两次进行傅立叶变换等效于时间倒置”,

您可以看到图像是反转的,因为-i虚构的是负数,而不是ifft()中的正数。

在此处输入图片说明

我也对一维信号(例如时间)进行了处理:

在此处输入图片说明


我知道有一个2D傅立叶变换之类的东西,但这与获取输入信号并通过算法运行它,然后获取该运行的输出并再次运行它是不同的。
tjwrona1992

1
傅立叶变换是可分离的。
Machupicchu

我的问题还将适用于2D傅立叶变换。理论上,您可以获取2D输入信号,应用2D傅立叶变换,然后获取2D输出信号并将其用作输入,然后再次应用2D傅立叶变换。
tjwrona1992

如果您执行以下操作,请在Matlab中查看会发生什么情况:cf. 我更新了答案
Machupicchu

1
我建议您使用实部而不是绝对值
Laurent Duval

6

要回答第二个问题,在数字通信有在手机使用的技术,现在是很好地利用应用IFFT将时域信号。 OFDM在发射机处将IFFT应用于数据的时域序列,然后在接收机处通过FFT将其反转。虽然文献喜欢使用IFFT-> FFT,但实际上哪一个先出现并没有区别。

OFDM发射机图

这里的主要好处与左撇子的答案密切相关。有一种失真称为多径衰落在人口稠密的城市地区,手机必须处理很多。我们喜欢将多径衰落建模为具有未知系数的卷积。因为事件链看起来类似于IFFT-> Transmit-> Apply multipath-> Receive-> FFT,所以多径衰落将通过FFT,并成为具有未知值的简单点对点乘法。这些值比卷积系数容易预测和纠正。

这种效果还使信号对多径/衰落更具弹性,可以消除(或“消隐”)整个频道。 本文介绍了如何

由于在稍微不同的时间到达的信号的两个副本的相消干扰,这种多径传播会在接收到的无线电信号的频率通带中产生深频谱零点。OFDM中的空值可以取出一个或多个子载波。单载波QAM中的相同null可能会丢弃连续相邻符号的脉冲串,具体取决于该时刻的特定数据模式。在极端情况下,甚至可能会丢失信号采集。然后,它依赖于FEC的功能来恢复原始数据序列。


哇,这真是有趣!谢谢!:)
tjwrona1992

1

该信息由用户“ Birdwes”提供,但是他没有足够的声誉可以自己发布该信息,因此我将在此处为他发布,因为它确实相关且有用。

“在这个论坛上我没有足够的观点来添加评论,所以我在这里做:看看Accord.Math Hilbert Transform的源代码,您将看到为什么这可以成为可行的选择:https: //github.com/primaryobjects/Accord.NET/blob/master/Sources/Accord.Math/Transforms/HilbertTransform.cs

实际用途包括构建SSB发射机或几乎任何调制方案。查找IQ调制,您将了解为什么-90度的相移很重要。三角原理的产物。例如https://user.eng.umd.edu/~tretter/commlab/c6713slides/ch7.pdf

希尔伯特变换在将负分量清零的FFT之间使用中间步骤。您也可以滥用它来滤除其他频率。”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.