📜  Python中的 Matplotlib.axes.Axes.specgram()(1)

📅  最后修改于: 2023-12-03 15:34:22.836000             🧑  作者: Mango

Matplotlib.axes.Axes.specgram()介绍

概述

Matplotlib.axes.Axes.specgram()是Matplotlib中的一个函数,用于绘制信号的谱图(频率随时间变化的图像)。这个函数创建一个谱图对象并在指定的坐标系中添加谱图。

语法
Axes.specgram(x, NFFT=None, Fs=None, Fc=None, detrend=None,
window=None, noverlap=None, cmap=None, xextent=None,
xmin=None, xmax=None, vmin=None, vmax=None, *, data=None,
**kwargs)

参数:

  • x : array_like 输入信号。如果是一维数组,会自动转换为二维数组,数组的第一个尺寸必须是时间。
  • NFFT : int, optional 用于FFT的点数。默认为256。
  • Fs : scalar, optional 采样频率。默认为2pi,也就是1。
  • Fc : float, optional 移动一个信号的中心频率。默认为0.0。
  • detrend : callable, optional 指定信号的消除频率漂移的函数。默认为detrend_none。
  • window : callable or ndarray, optional 用于加窗处理的窗口函数。默认为hanning。
  • noverlap : int, optional 窗口重叠的点数。默认为128。
  • cmap : str or Colormap, optional 谱图颜色图例。
  • xextent : None or (xmin, xmax), optional 设置x轴坐标范围,仅在没有给定ax时使用才有效。
  • xmin : float, optional 设置x轴坐标的最小值,仅在没有给定ax时使用才有效。
  • xmax : float, optional 设置x轴坐标的最大值,仅在没有给定ax时使用才有效。
  • vmin : float, optional 谱图的最小值。
  • vmax : float, optional 谱图的最大值。
返回值
  • Pxx : 经过缩放的二维numpy数组,表示频谱密度。
  • freqs : 一维numpy数组,表示频率值。
  • bins : 一维numpy数组,表示时间范围。
使用示例
import numpy as np
import matplotlib.pyplot as plt

# 创建例子信号
dt = 0.0005
t = np.arange(0.0, 20.0, dt)
s1 = np.sin(2*np.pi*100*t)
s2 = 2*np.sin(2*np.pi*400*t)
s3 = 0.5*np.sin(2*np.pi*1000*t)
s = s1 + s2 + s3

# 绘制谱图
fig, (ax1, ax2) = plt.subplots(nrows=2, figsize=(8, 5))
fig.subplots_adjust(hspace=0.4)
Pxx, freqs, bins, im = ax1.specgram(s, NFFT=256, Fs=1/dt, cmap='jet')
ax1.set_ylabel('Frequency [Hz]')
ax1.set_xlabel('Time [s]')
plt.show()

specgram

注意事项
  • Matplotlib.axes.Axes.specgram()只能在二维坐标系中使用。
  • 由于频谱幅度通常很小,可能需要缩放。
参考资料