目标是显示现有fft的漂亮瀑布
从可以在https://docs.scipy.org/doc/scipy/reference/tutorial/fftpack.html上找到的现有fft开始
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from scipy.fftpack import fft
from mpl_toolkits.mplot3d import Axes3D
N = 600
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
import matplotlib.pyplot as plt
plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]))
plt.grid()
plt.show()
结果是预期的光谱。现在我们要绘制一个瀑布,如https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#wireframe-plots所示 我们想要这样的东西:
x, y = (xf, np.arange(N))
X,Y=np.meshgrid(x,y)
Z = yf
Axes3D.plot_wireframe(X, Y, Z,rstride=1,cstride=len(xf), lw=.5, alpha=0.5)
plt.show()
其中X是Fft的频率范围,Y是图号轴的坐标范围,Z是具有Fft数据的二维数组。但是我们得到了这个错误:
TypeError: plot_wireframe() missing 1 required positional argument: 'Z'
出什么问题了? 感谢您的帮助。
答案 0 :(得分:0)
要显示瀑布,您需要一个二维FFT数组(通常具有不同的时间窗口),而不仅仅是一个FFT结果。