具有缺失值的傅里叶变换

vla*_*sch 7 c++ algorithm fft dft

我有一个时间离散信号,可能包含许多缺失值。我想对其进行傅里叶变换。

我该怎么做才能正确处理它们?

下图可能显示这种情况

signalpresence  x  x  x  x  x  x  x              x  x  x  x  x  x  x              x  x  x  x  x  x  x              
timesteps       ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^
Run Code Online (Sandbox Code Playgroud)

缺失值是周期性的,因为它们来自图像传感器的帧间隙,行频率高于实际图像高度。

将缺失值设置为零会导致输出失真。

是否有一个处理时间/值对的库?

(当然它也必须快:-))

Xas*_*ser 5

这实际上解决起来并不简单,因为这是一个如何对丢失的数据进行最好的有根据的猜测的问题。Lomb-Scargle 算法给出了频域优化插值方法,该算法在 MATLAB 中可通过以下plomb函数获得

\n\n

更多信息:

\n\n\n


Cra*_*ney 0

您可以做的一件事是通过对除缺失值之外的全零设置为 1 的向量进行傅里叶变换来确定解如何变化。其中每一个都会为您提供一个向量,输出可以沿该向量变化,而不会破坏非缺失值设置的约束。您可以缩放它们并将它们添加到 FFT 中,该 FFT 是从仅用 0 替换缺失值所产生的向量中获得的。

每个缺失值 FFT 将给出一个线性无关向量。我认为它们都是正弦波,因为 FFT 几乎是它自己的倒数。然后,您的解向量可以将这些正弦波添加到其中,而不会破坏已知输入设置的约束。也就是说,解决方案将采用以下形式:

FFT(dataWithZeroesForMissing)
+ c1*FFT(dataWithAllZeroesExceptOneMissingValueSetToOne1)
+ c2*FFT(dataWithAllZeroesExceptOneMissingValueSetToOne2)
+ ...
Run Code Online (Sandbox Code Playgroud)

您的目标是选择“最佳” c1c2等等。这到底意味着什么取决于用例。我最好的猜测是“最小化结果的平方和”。