python使用stft绘制一个时变信号的时域图、频域图
时间: 2024-05-07 17:21:29 浏览: 105
要使用STFT绘制一个时变信号的时域图和频域图,可以使用Python中的SciPy库和Matplotlib库。下面是一个基本的代码示例:
``` python
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import stft
# 读取音频文件
sample_rate, data = wavfile.read("audio_file.wav")
# 将音频数据转换为单声道
data = np.mean(data, axis=1)
# 设置STFT参数
window = 'hamming'
nperseg = int(0.025 * sample_rate) # 窗口长度为25ms
noverlap = int(0.01 * sample_rate) # 相邻窗口重叠10ms
nfft = 512 # FFT点数
# 计算STFT
f, t, Zxx = stft(data, fs=sample_rate, window=window, nperseg=nperseg,
noverlap=noverlap, nfft=nfft)
# 绘制时域图
plt.subplot(2, 1, 1)
plt.plot(data)
plt.title('Time Domain Signal')
plt.xlabel('Time (samples)')
plt.ylabel('Amplitude')
# 绘制频域图
plt.subplot(2, 1, 2)
plt.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=np.max(np.abs(Zxx)))
plt.title('Frequency Domain Signal')
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.ylim([0, 8000])
plt.colorbar()
plt.show()
```
这个例子假设你有一个名为"audio_file.wav"的音频文件。它首先读取音频数据并将其转换为单声道。然后使用stft()函数计算STFT,并使用Matplotlib库绘制时域图和频域图。时域图显示了信号随时间的变化,而频域图显示了频率随时间的变化。
阅读全文