问题描述
如何更改频谱图的分辨率?我正在使用 matplotlib.pyplot.specgram
function。
我想我必须放大窗口,但我不知道该怎么做。在这里问可能很容易,但我希望得到答案。
这是我的代码:
import numpy as np
import matplotlib.pyplot as plot
#Import data
a1.resize(np.size(a1))
signaldata = a1
samplingFrequency=2000
plot.subplot
plot.specgram(signalData,Fs=samplingFrequency)
plot.xlabel('Time in seconds')
plot.ylabel('Frequency')
plot.ylim(0,100)
plot.show()
这是我的信号数据:a1
这是我的光谱图:
在 4-14 秒和 0-40 (Hz) 的区域内,只有两个条形,没有比两种颜色更高的分辨率。我希望更具体地看看那里会发生什么。有没有可能提高分辨率?
提前致谢。
解决方法
分辨率本质上受到傅立叶变换的限制,对此您无能为力。不过,我相信您拥有的信号在 4 秒后几乎没有频率信息。您可以尝试使用 Lomb-Scargle periodogram 之类的工具进行调查。
几年前我写了一个你可能会觉得有用的辅助函数(你可以通过 pip 安装:
pip install fitwrap
或从 github 下载)。
这是您可以使用的片段,您只需要设置span
(窗口尺寸)、您需要的最小和最大频率min_freq
max_freq
、时间段{{1 }},以及频率区间 n_bins
。
grid_size
,
您也可以使用 arlpy
python 包,它具有使用散景图的内置交互功能。您可以直接执行 pip install arlpy
或在 github 上找到此处。您也可以使用框和滚轮进行放大。
import arlpy.plot
import numpy as np
arlpy.plot.specgram(np.random.normal(size=(10000)),fs=10000,clim=30)