小编bra*_*man的帖子

Matplotlib谱图强度图例(colorbar)

我正在使用matplotlib的specgram函数来生成谱图.我试图在光谱图的右侧包含一个颜色条,以指示dB到颜色的映射.

但是出于某种原因,颜色条指示的dB没有意义.

也许我没有正确生成颜色条?也许有一些参数需要传递给specgram?

我正在生成的信号是一个1Khz,2Vpp的正弦波,采样频率为32Khz.

我期待频谱图上的暗红色峰值对应0dB(意味着+ 1V是我的参考)

有人知道我的方法有什么问题吗?

def plot_specgram(data, title='', x_label='', y_label='', fig_size=None):
    fig = plt.figure()
    if fig_size != None:
        fig.set_size_inches(fig_size[0], fig_size[1])
    ax = fig.add_subplot(111)
    ax.set_title(title)
    ax.set_xlabel(x_label)
    ax.set_ylabel(y_label)
    pxx,  freq, t, cax = plt.specgram(data, Fs=32000)
    fig.colorbar(cax).set_label('Intensity [dB]')

plot_specgram(a,title='Spectrogram', x_label='time (in seconds)', y_label='frequency', fig_size=(14,8))
Run Code Online (Sandbox Code Playgroud)

这就是我得到的光谱图:

结果情节

python matplotlib spectrogram

6
推荐指数
1
解决办法
7083
查看次数

了解 matplotlib 幅度_频谱输出

我在理解 matplotlib 的mplitude_spectrum 函数调用生成的输出时遇到问题。

我生成了一个频率为 50khz 的正弦波,

f_s = 488000.0 # Hz
t = np.arange(0.0, 1.0, 1/f_s)
s1 = 100*np.sin(2*np.pi*50000*t)
Run Code Online (Sandbox Code Playgroud)

然后,除以 FFT 箱数后绘制所得幅度谱

s1_magspec = plt.magnitude_spectrum(s1,Fs=f_s)
plt.plot(s1_magspec[0]/len(s1_magspec[0]))
Run Code Online (Sandbox Code Playgroud)

结果是 50khz 的单个尖峰,但幅度为 50,而不是预期的 100。

有人能解释这是为什么吗?

以下是 ipython 笔记本的链接,描述了上述代码和结果图:

http://nbviewer.ipython.org/gist/bkinman/22cc15d3ad3b9b2db09e

python signal-processing matplotlib

4
推荐指数
1
解决办法
2395
查看次数