获得 numpy.fft 相位或角度的正确方法

问题描述

也许我对 fft 的理解有误,但我想知道如何正确理解以下内容。对于幅度谱,我得到:

amplitude_spectrum

这完全符合预期。代码如下:

import scipy.signal as signal
import numpy as np
import matplotlib.pyplot as plt

f1 = 500
f2 = 1000
f3 = 2500

t0 = np.linspace(0,4,48000,endpoint=True)
y0 =   1.0*np.sin(2.*np.pi*f1*t0) \
     + 0.2*np.sin(2.*np.pi*f2*t0+0.5*np.pi) \
     + 0.1*np.sin(2.*np.pi*f3*t0)

wind = signal.tukey(y0.shape[0],alpha=0.20)
avgw = np.mean(wind)
yfft = np.fft.fft(wind*y0)
N    = int(len(yfft)/2+1)
y1   = np.abs(yfft[:N])/(N/2.0)/avgw
dt   = np.mean(t0[1:]-t0[:-1])    
df   = 1.0/dt                     
f1   = np.linspace(0,df/2.0,N,endpoint=True)
plt.plot(f1,y1)

现在我还想获得角度以在 1000 处找到 0.5*np.pi=90° 相移。来自以下代码

yphs = np.angle(yfft,deg=True)
plt.plot(f1,yphs[:N]) # not finished but just to see what's the data

我得到的是:

phase_spectrum

显然我搞错了什么。

谁能帮我得到正确的结果?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)