我尝试绘制某些特定信号的specgram,但我得到的只是一个空白的情节:
我不知道为什么会这样。这是我用来绘制信号和规格本身的代码:
import pylab as py
'''
PLOT SIGNAL
Additional info about the signal:
Sampling frequency = 1024.
Total samples = 1127.
'''
ax1 = py.subplot(2, 1, 1)
py.plot(np.arange(np.size(signal)), signal)
'''
PLOT SPECGRAM
'''
py.subplot(2, 1, 2, sharex=ax1)
Pxx, freqs, bins, im = py.specgram(signal, NFFT=1024, Fs=1024, noverlap=900,
cmap=py.cm.gist_heat)
py.show()
提前谢谢。
答案 0 :(得分:0)
要共享x轴,您应该将其缩放到时间而不是样本编号。正如@Ajean建议的那样,更改每个周期图中的样本数量可以更全面的覆盖。
首先是一些假数据(2048个样本):
a = np.linspace(0, 10*np.pi,2048)
b = np.linspace(0, 23*np.pi,2048)
s1 = np.sin(a)
s2 = np.sin(a*2)
s3 = np.cos(b)
s4 = np.cos(b*2)
s5 = np.sin(b)
signal = s1+s2+s3+s4+s5
然后x轴表示时间(采样率= 200 sa / S)
fs = 200
x = np.arange(2048) / fs
这些图使用x轴的时间 - 需要通知采样率(Fs
)。每个情节都有这个共同点:
ax = plt.subplot(2, 1, 1)
plt.plot(x, signal)
plt.subplot(2, 1, 2, sharex = ax)
` NFFT = 1024
spectrum, freqs, t, im = plt.specgram(signal, NFFT = 1024, noverlap = 512, Fs = fs)
plt.show()
plt.close()
NFFT = 256
spectrum, freqs, t, im = plt.specgram(signal, NFFT = 256, noverlap = 128, Fs = fs)
NFFT = 64
spectrum, freqs, t, im = plt.specgram(signal, NFFT = 64, noverlap = 32, Fs = fs)
通过减少样本数,specgram在图中有更多的周期图。 specgram的x轴表示用于计算周期图的每个段的中点。
在最后一个图中,最后一个周期图以10.08秒为中心,包括9.92-10.24秒的数据。 specgram在时间历史之前停止,因为它已用完数据 - 下一个周期图将以第二个10.24为中心,包括10.08-10.40秒的数据,最后一个样本为10.24秒,所以另一个无法制作64个样本周期图。
我想你可以弄清楚为什么你的情节会如此。