<p>分辨率本质上受到傅里叶变换的限制,对此你无能为力。不过,我相信你的信号,在4秒后几乎没有频率信息。您可以尝试使用<a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lombscargle.html" rel="nofollow noreferrer">Lomb-Scargle periodogram</a>之类的工具进行一些研究</p>
<p>几年前,我编写了一个助手函数,您可能会发现它很有用(您可以通过pip安装:
<code>pip install fitwrap</code>或从<a href="https://github.com/AndreaAmico/fitwrap" rel="nofollow noreferrer">github</a>下载)</p>
<p>这里有一个您可以使用的代码片段,您只需要设置<code>span</code>(窗口维度)、所需的最小和最大频率<code>min_freq</code>{<cd4>}、时间单元<code>n_bins</code>和频率单元<code>grid_size </code></p>
<pre><code>import fitwrap as fw
import matplotlib.pyplot as plt
span = 0.4
n_bins = 100
grid_size = 100
min_freq = 0.01
max_freq = 40
t_tot = 1/samplingFrequency*signaldata.shape[0]
t = np.linspace(0, t_tot, signaldata.shape[0])
tmin = np.min(t)
tmax = np.max(t)
x_bins = np.linspace(tmin+span, tmax-span, n_bins)
spectrogram = np.zeros([grid_size, x_bins.shape[0]])
for index, x_bin in enumerate(x_bins):
mask = np.logical_and((x_bin-span)<=t, (x_bin+span)>=t)
frequency_grid, lombscargle_spectrum = fw.lomb_spectrum(t[mask], signaldata[mask],
frequency_span=[min_freq, max_freq], grid_size=grid_size)
spectrogram[:, index] = lombscargle_spectrum
plt.imshow(spectrogram, aspect='auto', extent=[x_bins[0],x_bins[-1],
frequency_grid[0],frequency_grid[-1]], origin='lower')
plot.xlabel('Time in seconds')
plot.ylabel('Frequency')
</code></pre>
<p><a href="https://i.stack.imgur.com/Ooklc.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Ooklc.png" alt="Lomb"/></a></p>