【问题标题】:Phase spectrum with python and FFTpython和FFT的相位谱
【发布时间】:2019-10-25 20:17:57
【问题描述】:

我正在尝试计算正弦曲线的相位谱。 以下代码生成初始相位为零的 1Hz 正弦波。

import numpy
from numpy import pi, sin, arange
from pylab import plot, show, xlabel, ylabel, xlim, grid

sampling_rate = 500
sampling_time = 1 / sampling_rate
length = 1 # in seconds
n = sampling_rate * length # number of points

time = arange(0, n * sampling_time, sampling_time)
# Generate sinusoid: frequency=1Hz, phase=0
signal = sin(2 * pi * time)

fft = numpy.fft.fft(signal)
fft_phase = numpy.angle(fft)
fft_freq = numpy.arange(n) * sampling_rate / n

plot(fft_freq, fft_phase)
ylabel("FFT Angle")
xlabel("Frequency (Hz)")
xlim(left=0, right=5)
grid(True)
show()

但结果与我的预期不符。它具有 1 Hz 分量的非零相位:

显示 1 Hz 谐波的相位不正确。代码(或方法)有什么问题?

【问题讨论】:

    标签: python numpy signal-processing fft


    【解决方案1】:

    当幅度为零时,相位由数值不精确给出。

    如果您显示由fft 计算的值,您会看到您期望为 0 的值实际上是 1e-16 或类似的顺序。这是浮点计算中的舍入导致的数值不精确。

    解决方法是计算幅度和相位,如果幅度太小则忽略相位分量。

    【讨论】:

    • 1 Hz 分量的幅度不是零。我同意你写的所有其他内容。但它不能解释 1 Hz 分量的不正确相位。
    • @tmporaries: 似乎是 -pi/2,正如预期的那样。余弦的相位为 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多