【问题标题】:fourier transformation with missing values具有缺失值的傅立叶变换
【发布时间】:2014-04-15 12:23:42
【问题描述】:

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

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

下图可能显示这种情况

signalpresence  x  x  x  x  x  x  x              x  x  x  x  x  x  x              x  x  x  x  x  x  x              
timesteps       ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^  ^

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

将缺失值设置为零会扭曲输出。

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

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

【问题讨论】:

  • scicomp.stackexchange.com/questions/593/…。软件的答案中有一些很好的链接可能会有所帮助。
  • 傅里叶变换的每个输出值都取决于每个输入值,因此无论您如何“填充”缺失值,输出都会以某种方式失真 - 您不能只是进行“部分变换”以获得某些输出而不是其他输出的正确值。正如@JasonB 所建议的那样,有多种方法可以“填充”这些值以使结果或多或少有用,但是“最佳”解决方案将在很大程度上取决于您的确切问题域以及您要实现的目标。 ..

标签: c++ algorithm fft dft


【解决方案1】:

这实际上并不容易解决,因为这是一个关于如何对缺失数据进行最好的有根据的猜测的问题。 Lomb-Scargle 算法给出了一种频域优化的插值方法,该算法可在 MATLAB 中通过plomb function 获得

更多信息:

【讨论】:

    【解决方案2】:

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

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

    FFT(dataWithZeroesForMissing)
    + c1*FFT(dataWithAllZeroesExceptOneMissingValueSetToOne1)
    + c2*FFT(dataWithAllZeroesExceptOneMissingValueSetToOne2)
    + ...
    

    您的目标是选择“最佳”c1c2 等。具体含义取决于用例。我最好的猜测是“最小化结果的平方和”。

    【讨论】:

    • 我有同样的问题,我认为这将是一个有趣的想法,但我想最小化和平方或多或少相当于线性插值,或者至少它会提供一个平滑的信号信号和它将倾向于最小化高频。然而,它可能是低频的最佳解决方案(当周期大于信号丢失的长度时)另一种解决方案可以连接信号的一部分,同时消除两部分之间的差异,我认为它可能是最公正的高频的方法,但显然不适合低频。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多