首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy.signal.spectrogram频率分辨率

scipy.signal.spectrogram频率分辨率
EN

Stack Overflow用户
提问于 2018-02-02 20:43:33
回答 1查看 5.1K关注 0票数 3

scipy.signal.spectrogram计算信号的频谱图,但我看不到增加此频谱图的频率分辨率的选项。考虑到documentation提供的代码,如何实现这一点呢?

代码语言:javascript
复制
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise

f, t, Sxx = signal.spectrogram(x, fs)
plt.pcolormesh(t, f[0:10], Sxx[0:10,])
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-02 20:49:44

频谱分辨率由快速傅立叶变换中使用的点数确定,而快速傅立叶变换由nperseg参数控制。要提高分辨率,需要增加每次FFT计算的输入点数量。例如,将点数从默认值256增加到双倍分辨率(即512点),您可以这样调用scipy.signal.spectrogram

代码语言:javascript
复制
f, t, Sxx = signal.spectrogram(x, fs, nperseg=512)

请注意,您还可以使用:

代码语言:javascript
复制
f, t, Sxx = signal.spectrogram(x, fs, nfft=512)

在FFT中使用更多的点,但不是每个段更多的输入点(即每个段的零填充)。这实际上会产生一个频谱图,其中插入了额外的频率点。它不会增加分辨率(即频率非常相似的两个音调不会更容易区分),但附加点将使结果看起来更平滑。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48582986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档