Как отобразить красивый водопад FFT

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

Начните с существующего файла fft, который можно найти по адресу 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'

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


person Edeation Confluence    schedule 03.07.2019    source источник
comment
Как заявил hotpaw2, для получения спектрограммы данных необходимы преобразования Фурье скользящих временных окон данных. Вы можете проверить спектрограмму. страница Scipy.   -  person Ömer Şayli    schedule 21.03.2020


Ответы (1)


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

person hotpaw2    schedule 03.07.2019