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

由于傅立叶变换将实数或复数信号作为输入,并产生一个复杂的信号作为输出,没有什么阻止您获取该输出并再次应用傅立叶变换...这样做有实际用途吗?使用这种逻辑,没有什么可以阻止您对原始时域输入信号进行傅立叶逆变换...这会成为现实吗?有用?为什么或为什么不呢?

#1 楼

“有实际用途吗?”绝对可以,至少要检查代码和绑定错误。尤其是对于海量数据或大量迭代操作
“理论上,理论和实践都是匹配的。实际上,它们是不匹配的。”因为(如已经回答的),$ \ mathcal {F} \ left(\ mathcal {F} \ left(x(t)\ right)\ right)= x(-t)$(取决于潜在的比例因子)。
但是,由于上面的方程通常是通过离散傅立叶变换及其快速化身FFT实现的,因此它在计算上是有用的。 ,无论是由您,其他人还是从库进行编码,都可以对您的数据进行处理。样本排序,缩放因子,输入类型的限制(真实性,位深度)或长度是诸如FFT等傅立叶实现的潜在后续误差的来源。因此,作为健全性检查,最好检查已实现的版本至少(至少近似地)继承理论属性。正如您将看到的,如Machupicchu所示,您不能完全恢复真实的反向输入:由于计算机计算不完善,虚部通常不完全为零,并且真实部分是预期的,但是相对误差很小(浮点)在与机器相关的公差范围内。在下面的图片中可以看到这一点。将FFT应用于随机的32个采样信号两次,然后翻转。如您所见,使用双精度浮点数的错误很小。

如果错误不是相对较小,则您使用的代码中可能存在错误。
第二个问题涉及巨大的数据量或大量的迭代FFT计算,例如层析成像。此处,先前的较小相对误差会累积和传播,甚至在此处引起一些细节的计算差异或误差。在下面的图片中可以看到这一点。对于不太长的信号$ x_0 $($ 10 ^ 6 $个样本),我们执行以下迭代:$$ x_ {k + 1} = \ mathrm {Re} \ left(\ mathcal {f} \ left(\ mathcal {f} \ left(\ mathcal {f} \ left(\ mathcal {f} \ left(x_ {k} \ right)\ right)\ right)\ right)\ right)\ right)$$
其中$ f $表示FFT。显示的图被二次采样。并且我们在每次迭代时计算最大误差$ \ max | x_ {k} -x_ {0} | $。

您可以看到,由于误差的大小顺序已更改。信号的大小。另外,最大误差稳定增加。在$ 1000 $迭代之后,它仍然足够小。但是您可以猜测,在$ 1000 x 1000 xvoxel多维数据集以及数百万次迭代的情况下,此错误可能变得不可忽略。
界定错误并评估其在迭代中的行为可能有助于检测到这种情况。行为,然后通过适当的阈值化或舍入来减少。
其他信息:

快速傅立叶变换中舍入误差的累积
快速傅立叶所涉及的某些运算的误差分析变换
快速傅立叶变换的舍入误差分析


评论


$ \ begingroup $
我真的很喜欢这个答案,我会把它标记为已接受的答案,但是我认为,大多数遇到此问题的人都将寻找Matt所提供的理论信息。 +1虽然是一个很好的答案。
$ \ endgroup $
–tjwrona1992
19年8月24日,3:20

$ \ begingroup $
非常感谢您的评论。但是,我用适当的数字更新了答案,以表明离散傅立叶实现中的错误很重要。
$ \ endgroup $
– Laurent Duval
19年8月24日在22:05

#2 楼

不,两次进行傅立叶变换等效于时间反演(或您所处的任意维度的反演)。您只需获得$ x(-t)$乘以一个常数,该常数取决于用于傅立叶变换的缩放比例类型。

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

评论


$ \ begingroup $
你只是递归地吹动了我的心。
$ \ endgroup $
–tjwrona1992
19年8月21日在14:12

$ \ begingroup $
我能说明一下马特。我说过,但是我的代码是二维的吗?即我们得到f(-x,-y)
$ \ endgroup $
–马丘比丘
19年8月21日在14:25

$ \ begingroup $
@Machupicchu,是的,看起来不错。
$ \ endgroup $
–tjwrona1992
19年8月21日在14:52



$ \ begingroup $
哈哈,那么您可以选择我的答案广告中排名第一的^^(他有53K代表,因此对他来说不会有任何区别哈哈)
$ \ endgroup $
–马丘比丘
19年8月21日在14:53



$ \ begingroup $
在我说完之后,我意识到可能有比双傅立叶变换更简单的方法来对信号进行时间反转哈哈
$ \ endgroup $
–tjwrona1992
19年8月21日在14:54



#3 楼

虽然连续两次直接进行傅立叶变换只会给您带来微不足道的时间倒置,而无需FT来实现,倒计时要便宜得多,但通过执行傅立叶变换,应用其他操作然后再进行一次操作,可以完成一些有用的工作傅立叶变换的结果。最著名的例子是自相关,它是信号与其自身的卷积。如果天真地进行卷积,则卷积为O(n2),但通过傅立叶变换绕行时,卷积仅为O(n·log n)。因此,通常通过对信号进行FT'处理,取绝对平方并对时域进行IFT处理来实现自相关。

评论


$ \ begingroup $
另外,还有倒频谱,即傅立叶变换的对数的傅立叶逆变换。它可以用来检测周期信号。
$ \ endgroup $
–奥利·尼米塔洛(Olli Niemitalo)
19年8月25日在6:56



#4 楼

由于可以将图像视为2D信号,因此在图像处理中使用了2D傅里叶变换(2D DFT)。例如。对于灰度图像$ I $,$ I(x,y)= z $,这意味着在坐标$ x $和$ y $处,图像具有强度值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.所说的话:

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

您可以看到图像由于-i虚数的负数,而不是ifft()中的正数。



我也对一维信号(例如时间)执行了此操作:



评论


$ \ begingroup $
我知道有一个2D傅立叶变换之类的东西,但这与获取输入信号并通过算法运行它,然后获取该运行的输出并再次运行它不同。
$ \ endgroup $
–tjwrona1992
19年8月21日在14:08



$ \ begingroup $
傅立叶变换是可分离的。
$ \ endgroup $
–马丘比丘
19年8月21日在14:09

$ \ begingroup $
我的问题也将适用于2D傅立叶变换。理论上,您可以获取2D输入信号,应用2D傅立叶变换,然后获取2D输出信号并将其用作输入,然后再次应用2D傅立叶变换。
$ \ endgroup $
–tjwrona1992
19年8月21日在14:09

$ \ begingroup $
如果执行以下操作,请在Matlab中查看会发生什么情况:cf.我更新了答案
$ \ endgroup $
–马丘比丘
19年8月21日在14:10



$ \ begingroup $
我建议您使用实部而不是绝对值
$ \ endgroup $
– Laurent Duval
19年8月21日在21:43

#5 楼

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



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

这种效果还使信号对多径/衰落更具弹性,可以消除(或“消零”)整个频道。本文介绍了由于两个到达时间略有不同的信号副本的相消干扰,这种多路径传播如何在接收到的无线电信号的频率通带中产生深频谱零点。 OFDM中的空值可以取出一个或多个子载波。单载波QAM中的相同null可能会丢弃连续相邻符号的脉冲串,具体取决于该时刻的特定数据模式。在极端情况下,甚至可能会丢失信号采集。然后,它依靠FEC的力量来恢复原始数据序列。


评论


$ \ begingroup $
哇,这真有趣!谢谢! :)
$ \ endgroup $
–tjwrona1992
19年8月23日在1:39

#6 楼

该信息由用户“ 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之间使用中间步骤。您也可以滥用它来滤除其他频率。”