如何在 python 中使用 STFT 绘制频谱图?

Jay*_*hna 1 signal-processing numpy spectrogram python-3.x

我计算了 uint8 I/Q 数据的 STFT,并将其存储在一个 numpy 矩阵中,其中每一行存储一个窗口的 STFT,如下面的 sudo 代码所示。

#k= length of window
#fs= Sampling frequency
#n= Number of STFT calculated
#matrix= Initially empty numpy array

for i in range(0,n):
  t=data[start:end,:]   #start & end calculated with each iteration
  t=t.flatten()
  t=t-127.5
  array = np.empty(t.shape[0]//2, dtype=np.complex128)
  array.real = t[::2]
  array.imag = t[1::2]

  transform=(np.fft.fft(temp_array))
  line = 2*abs(transform)/k

  #Inserting row into numpy array
  if(i==0):
     matrix = np.hstack((matrix, line))
  else:
     matrix = np.vstack((matrix, line))
Run Code Online (Sandbox Code Playgroud)

现在如何绘制频率与时间的频谱图?

小智 7

你能做的就是使用这个

第一种方法:

import scipy.io.wavfile as wav
import scipy.signal as signal
from matplotlib import pyplot as plt

sample_rate, samples = wav.read(filename)
f, t, Zxx = signal.stft(samples, fs=sample_rate)
plt.pcolormesh(t, f, np.abs(Zxx), cmap=cmap)
Run Code Online (Sandbox Code Playgroud)

或第二种方法:

plt.specgram(samples, cmap=cmap, Fs=sample_rate)
Run Code Online (Sandbox Code Playgroud)

我发现第二个可视化效果更好。但不知道如何使第一个看起来和第二个一样好。