Как отобразить хороший водопад FFT - PullRequest
0 голосов
/ 03 июля 2019

Цель состоит в том, чтобы отобразить красивый водопад из существующего БПФ

Начните с существующего БПФ, которое можно найти на https://docs.scipy.org/doc/scipy/reference/tutorial/fftpack.html

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'

В чем проблема? Спасибо за помощь.

1 Ответ

0 голосов
/ 03 июля 2019

Чтобы отобразить водопад, вам нужен двумерный массив БПФ (обычно с разными временными окнами), а не только один результат БПФ.

...