问题陈述
给出:一个由时间/幅度值组成的时间序列
所需的输出:将给定信号转换为由时间/频率值组成的频域
更多信息
我想对输入中的时间戳与输出中的频率电平进行相同的映射。
为此,我使用了signal.spectrogram
中的SciPy
函数。显然,输入和输出之间存在对应关系。
问题:将输出转换为时间/频率值的首选方法是什么?取最大值是一种好习惯吗?
代码
fs = 1.0
f, t, Sxx = signal.spectrogram(x, fs)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.axis([t.min(), t.max(), f.min(), .02])
plt.show()
答案 0 :(得分:0)
问题:将输出转换为时间/频率值的首选方法是什么?取最大值是一种好习惯吗?
通常,如果您计算频谱图,则希望查看每个时间点周围的窗口中组成信号的频率是多少。这就是为什么您得到显示的热图的原因。 现在,这已经是信号在频域中随时间变化的表示。 如果仅取最大值,则将剪切相关信息,并且所获得的将是不同信号的表示。这不是您想要的,因为从信号处理的角度来看这没有意义。您将仅基于每个时间窗口中最强的频率来表示伪像信号。
还有其他一些方法可以将频谱特征表示为时间的函数,如果频谱图未显示所需的信息,则可能需要探索。例如,尝试探索小波变换,(请参见此处的连续小波变换(cwt) applied to a time series的示例) 您可以使用PyWavelets软件包轻松获得它。