【发布时间】:2023-03-30 03:02:01
【问题描述】:
这是一个将 fft 相位绘图与 2 种不同方法进行比较的代码:
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
phase = np.pi / 4
f = 1
fs = f*20
dur=10
t = np.linspace(0, dur, num=fs*dur, endpoint=False)
y = np.cos(2 * np.pi * t + phase)
Y = scipy.fftpack.fftshift(scipy.fftpack.fft(y))
f = scipy.fftpack.fftshift(scipy.fftpack.fftfreq(len(t)))
p = np.angle(Y)
p[np.abs(Y) < 1] = 0
fig, ax = plt.subplots(2, 1)
ax[0].plot(t, y)
ax[1].plot(f*fs, p, label='from fft')
ax[1].phase_spectrum(y, fs, window=None, label='from phase_spectrum')
plt.legend()
plt.show()
结果如下:
这是信号周期数不是整数时的结果:
我有几个问题:
- 为什么使用phase_spectrum 或使用fft 的相位图和角度如此不同?使用 fft 然后使用 np.angle 会产生很好的结果,但是我们如何解释幅度谱的结果呢?
- 这是一个非常简单的情况,we have sine periodic signal with N periods 如果我有一个宽带信号并且我想在 f 处提取相位,我该怎么做?例如,这里使用示例中介绍的两种方法,我不确定我是否可以提取精确的相位。使用 phase_spectrum,在 f = 1 时,我无法找到 pi/4。然后使用 fft 和 np.angle,为了提取好的相位,我需要确保周期的信号数是整数。
【问题讨论】: