はじめに
pythonでエンベロープ曲線を描きたくなったので、備忘録として。
エンベロープ曲線とは
信号包絡線(エンベロープ)は、信号の上部だけに接するような曲線で、ピーク検出に使います。
イメージとRコード例は下記が参考になります。
pythonコード
pythonでやるには、scipy.signal.hilbertの結果の絶対値を取るだけでできます。
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
#適当な波形を作成
dt = 0.01
t = np.arange(0, 1, dt)
x = np.cos(2*np.pi * 50 * t)
x *= (1 + 0.7 * np.sin(2*np.pi * 3 * t))
#エンベロープ曲線を作成
x_env = np.abs(signal.hilbert(x))
#作図
plt.plot(t, x, label="x")
plt.plot(t, x_env, label="envelope")
plt.legend()
plt.show()
上コードの実行結果が下の図です。
いい感じ!簡単ですが以上です。
実行環境
- Mac OS 11.6.3
- VS Code 1.64.2
- Python 3.9.7
- Numpy 1.20.1
- Scipy 1.6.1
- Matplotlib 3.3.4