短时傅里叶变换pycharm代码实现
时间: 2024-07-08 11:01:30 浏览: 105
短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种信号处理技术,用于分析时间上局部化的非平稳信号。在PyCharm中实现STFT,通常会用到Python的科学计算库如NumPy和matplotlib来进行数学运算和可视化。
以下是一个简单的STFT Python代码示例,使用NumPy和matplotlib:
```python
import numpy as np
import matplotlib.pyplot as plt
# 假设我们有一个音频信号
from scipy.io import wavfile
rate, signal = wavfile.read('your_audio.wav') # 替换为你的音频文件路径
def stft(signal, window_size=1024, hop_size=512, fs=rate):
nperseg = window_size
noverlap = hop_size
freq, time, stft_matrix = np.abs(np.fft.rfft(signal, nperseg=nperseg, axis=-1, win=np.hanning(nperseg), workers=-1)), \
np.arange(0, len(signal) - nperseg, hop_size), \
np.abs(np.fft.stft(signal, nperseg=nperseg, hop_length=hop_size, window=np.hanning))
return freq, time, stft_matrix
windowed_signal, t, stft_data = stft(signal)
# 可视化结果
fig, axs = plt.subplots(3, 1, figsize=(10, 8), sharex=True)
axs.plot(t, signal)
axs.set_title('Original Signal')
axs.imshow(stft_data.T, aspect='auto', origin='lower', extent=[t.min(), t.max(), freq.min(), freq.max()])
axs.set_title('STFT Magnitude')
axs.specgram(signal, NFFT=nperseg, Fs=fs, xextent=(t.min(), t.max()))
axs.set_title('Scipy specgram')
plt.tight_layout()
plt.show()
阅读全文