python - stft 中时间箱的数量与信号中的实际时间有什么关系?
问题描述
我有一个 9 分钟的文件,其采样率为 16000。我的信号总共有 9*60*16000=8640000 个样本。我在 python(librosa 包)中做一个 stft 并绘制频谱图。我知道频谱图的频率分辨率等于 Fs(采样频率)/N(FFT 点数)。
如果我用 N-fft= 2048 绘制频谱图,那么我的频谱图的形状为 (1025, 16876),x_axis 显示 9 分钟的时间。如果用 N-fft= 16384 绘制它,那么我的频谱图的形状为 (8193, 2110),x_axis 显示时间为 1 分 10 秒。我不明白频谱图的形状与我们在时间轴上看到的时间之间的关系。我还想知道频谱图轴上的时间与信号中的实际时间之间的关系。
file = ('mm.wav')
k=1
v, sr = librosa.load( file, sr=16000)
t, phase = librosa.magphase(librosa.stft(v, n_fft= 2048))
librosa.display.specshow(librosa.power_to_db(t,ref=np.max),y_axis='linear',x_axis='time',sr=sr)
t.shape
fig.savefig ('2048.png')
解决方案
通常,频谱图是多个(可能重叠)STFT,并且图中的时间与信号中的时间成正比。您的问题看起来可以通过将 x 轴放大 8 倍(N-fft/2048)来解决,尽管我不知道为什么。
推荐阅读
- sql - 在 HeidiSQL 中声明变量
- wpf - 为什么我的最大化和 DragMove 在我的 MouseDown 事件中不起作用?
- flutter - 使用 TextEditingController 在下拉菜单中传递项目,在颤动中
- xamarin.forms - 如何在方法 Resume 中将参数从 MainActivity 传递到 App.cs
- python - 将列表项与其他列值连接起来
- r - 字符匹配时如何获取id
- python - 无法将 TensorFlow (Keras) 模型转换为 ONNX
- jenkins - Jenkins - 用自定义标签替换构建标签
- javascript - 请澄清如何使用Framework7 ajax(触发服务器端处理)
- c# - OleDb 更新数据库.mdb