Python での Matplotlib.pyplot.specgram()

Suraj Joshi 2023年1月30日
  1. matplotlib.pyplot.specgram() メソッドを用いたスペクトログラムのプロット
  2. scipy.signal.spectrogram() メソッドを用いたスペクトログラムのプロット
Python での Matplotlib.pyplot.specgram()

このチュートリアルでは、matplotlib.pyplot.specgram() メソッドと scipy.signal.spectrogram() メソッドを使って Python でスペクトログラムをプロットする方法を説明します。

スペクトログラムを使って信号の強さの詳細を得ることができます。スペクトログラムの色が濃いほど、その点での信号が強いことを示しています。

matplotlib.pyplot.specgram() メソッドを用いたスペクトログラムのプロット

matplotlib.pyplot.specgram(x,
                           NFFT=None,
                           Fs=None,
                           Fc=None,
                           detrend=None,
                           window=None,
                           noverlap=None,
                           cmap=None,
                           xextent=None,
                           pad_to=None,
                           sides=None,
                           scale_by_freq=None,
                           mode=None,
                           scale=None,
                           vmin=None,
                           vmax=None, *,
                           data=None,
                           **kwargs)

例:matplotlib.pyplot.specgram() メソッドを用いた分光図のプロット

import math
import numpy as np
import matplotlib.pyplot as plt

dt = 0.0001
w = 2
t = np.linspace(0, 5, math.ceil(5 / dt))
A = 20 * (np.sin(3 * np.pi * t))

plt.specgram(A, Fs=1)
plt.title("Spectrogram Using matplotlib.pyplot.specgram() method")
plt.show()

出力:

matplotlib.pyplot.specgram()メソッドを使ってスペクトログラムをプロットする

関数 A=20sin(3*np.pi*t) のスペクトルグラムを matplotlib.pyplot.specgram() メソッドを用いて作成します。このメソッドの引数 fs はサンプリング周波数を表します。

scipy.signal.spectrogram() メソッドを用いたスペクトログラムのプロット

import math
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

dt = 0.0001
w = 2
t = np.linspace(0, 5, math.ceil(5 / dt))
A = 2 * (np.sin(1 * np.pi * 300 * t))

f, t, Sxx = signal.spectrogram(A, fs=1, nfft=514)
plt.pcolormesh(t, f, Sxx)
plt.ylabel("Frequency")
plt.xlabel("Time")
plt.title("Spectrogram Using scipy.signal.spectrogram() method")
plt.show()

出力:

scipy.signal.spectrogram()メソッドを使ったスペクトログラム

関数 A=2sin(300*np.pi*t) のスペクトルグラムを scipy.signal.spectrogram() メソッドを用いて作成します。メソッドの引数 fs はサンプリング周波数を、ntft は使用する FFT の長さを表します。

このメソッドは ftSxx の 3つの値を返します。f はサンプル周波数の配列、t はサンプル時間の配列、SxxA のスペクトルグラムを表します。

このメソッドは入力信号のスペクトログラムプロットを生成しません。図を生成するには matplotlib.pyplot.colormesh() を用いることができます。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn