【问题标题】:Amplitude of rfft for real-valued array实值数组的 rfft 幅度
【发布时间】:2021-05-18 11:17:58
【问题描述】:

我正在计算长度为 3000(以 100 Hz 采样)的信号的 RFFT,其中只有实值条目:

from scipy.fft import rfft
coeffs = rfft(values)
coeffs = np.abs(coeffs)

使用rfft 我只得到一半的系数,即对称系数被丢弃(由于实值输入)。

将值按coeffs = (2 / len(values)) * coeffs 缩放以获得幅度是否正确?

编辑:下面我附上了加速度计和陀螺仪的幅度与频率(箱)的图(阴影区域是标准偏差)。对于加速度计,第一个 FFT 箱中的能量远高于其他箱中的能量(第一个箱中> 2,其他箱中大约

这是否意味着对于加速度计,FFT 看起来不错,但对于陀螺仪,它更糟?此外,在 100 Hz 处切断 FFT(即只取

【问题讨论】:

    标签: python scipy fft


    【解决方案1】:

    我在this post 中提供的近似关系不管你是否丢弃一半的系数都成立。

    因此,如果该帖子中指出的条件适用于您的情况,那么您可以通过

    来估计主要正弦分量的幅度
    approx_sinusoidal_amplitude = (2 / len(values)) * np.abs(coeffs[k])
    

    对于一些指数k 对应于正弦分量的频率(根据我在另一篇文章中指出的限制,在你的情况下,它必须等于或接近 100/3000 ~ 0.033Hz 的倍数)。对于主要的正弦分量,该指数通常对应于频谱中的局部峰值。但是请注意,如果您的信号是各种频率分量的混合,则各个分量可能会影响频谱,从而使峰值无法清晰显示。

    【讨论】:

    • 在我的例子中,它是来自智能手机的加速度计读数(例如 x 方向)。传感器以 100 Hz 采样,我查看 30 秒的窗口(= 3000 个元素)。如何检查您提到的限制是否成立?
    • 一般来说,如果您绘制频谱图,您应该看到能量是否集中在单个 FFT bin 上。如果是这种情况,近似值可能是合理的。但是对于您刚才提到的特定类型的应用程序,很可能(除非智能手机被绑在具有相当精确的周期性运动的设备上)能量分布在 2 个或更多相邻的 bin 上,此时近似值迅速降级。
    • 我用两个情节和附加信息编辑了我的原始帖子。
    • 你知道我在编辑中提出的问题的答案吗?
    • 一些事情:1) bin 0 中的能量代表信号的恒定偏差。我猜您的加速度计中的 x 分量指向下方并报告由于重力而平均为正的值。 2)如果你的加速度计确实有任何周期性的正弦信号,与这个恒定的偏差相比,它相对较小,所以有点迷失在那里。 3)在陀螺仪上你没有那种偏差,所以你可以更好地看到信号的“其余部分”。但是由于频谱相对较宽,信号不太可能具有很多可区分的周期性正弦形式。
    猜你喜欢
    • 2021-05-24
    • 2020-08-23
    • 2015-02-06
    • 1970-01-01
    • 2016-04-13
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多