提高我的 Python 频谱图的分辨率

问题描述

如何更改频谱图的分辨率?我正在使用 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

这是我的光谱图:

enter image description here

在 4-14 秒和 0-40 (Hz) 的区域内,只有两个条形,没有比两种颜色更高的分辨率。我希望更具体地看看那里会发生什么。有没有可能提高分辨率?

提前致谢。

解决方法

分辨率本质上受到傅立叶变换的限制,对此您无能为力。不过,我相信您拥有的信号在 4 秒后几乎没有频率信息。您可以尝试使用 Lomb-Scargle periodogram 之类的工具进行调查。

几年前我写了一个你可能会觉得有用的辅助函数(你可以通过 pip 安装: pip install fitwrap 或从 github 下载)。

这是您可以使用的片段,您只需要设置span(窗口尺寸)、您需要的最小和最大频率min_freq max_freq、时间段{{1 }},以及频率区间 n_bins

grid_size 

Lomb

,

您也可以使用 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)

enter image description here