SciPy で離散データの包絡線を求める

SciPy で離散データの包絡線を求める方法についてメモ。
Hilbert 変換で実信号から解析信号を生成するとデジタル信号の包絡線を簡単に求めることができます。
その他の方法にはローパスフィルタや argrelextrema 関数を使った方法等がありますが、ヒルベルト変換を使うのが一番簡単です。

# coding: utf-8
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

# 時系列のサンプルデータ作成
n = 512                         # データ数
dt = 0.01                       # サンプリング間隔
t = np.linspace(1, n, n)*dt-dt
y = np.sin(2*np.pi*t)*np.sin(2*20*np.pi*t)

yh = signal.hilbert(y)

plt.figure(figsize=(12,9))
plt.plot(t, y)
plt.plot(t, abs(yh), linewidth=2)
plt.axis("tight")
plt.xlabel("Time [s]")
plt.ylabel("Amplitude")
plt.show()

15072101.png

コメント

Comments powered by Disqus
書籍更新情報
2017-01-16
Pythonによる科学技術計算 基礎編
1.3版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストアで販売中です
Pythonによる科学技術計算 基礎編
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share