Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Python PyFilterBankで環境音をオクターブバンド分析

はじめに

音信号の分析では、時間波形を直接分析するのではなく、様々な周波数分析手法を利用します。

比較的細かい周波数成分を見る方法としては、

がよく使われています。これらのライブラリは音楽分析モジュール LibROSA に実装されており、簡単に利用することができます。

LibROSA:Pythonで手軽に始める音楽データ分析 - Wizard Notes

一方、分析する周波数が大域的である分析方法として、オクターブバンドフィルタバンク(オクターブバンド分析)のような手法が挙げられます。

環境音や騒音の分析などで利用されていることが多い印象です。

Python でオクターブバンド分析が実装されているライブラリを探したところ、PyFilterBank というライブラリを見つけました。

以下では、PyFilterBank を使ったオクターブバンド分析のサンプルコードを作成しましたので、結果と合わせて紹介したいと思います。

PyFilterBank の概要

PyFilterBank は、様々なフィルタバンクを提供するPython向けライブラリです。

以下のフィルタバンクを利用できます。

  • オクターブバンド
  • メルフィルタバンク
  • ガンマトーン
  • 周波数重み付けフィルタ
    • A特性
    • B特性
    • C特性

siggigue.github.io

インストール方法

pip install git+https://github.com/SiggiGue/pyfilterbank.git

オクターブバンド分析用クラス

pyfilterbank.octbank.FractionalOctaveFilterbank クラスのインスタンスを作ることで、numpyの信号に対してオクターブバンド分析を適応することができます。

class pyfilterbank.octbank.FractionalOctaveFilterbank(
    sample_rate=44100, #サンプリング周波数
    order=4, #フィルタ次数(偶数)
    nth_oct=3.0, #1オクターブ当たりのバンド数
    norm_freq=1000.0,  # 基準周波数
    start_band=-19, 
    end_band=13, 
    edge_correction_percent=0.01, 
    filterfun='cffi'
)

サンプルコード

実行結果

以下の動画からオーディオファイルを抽出して分析しました。 www.youtube.com

f:id:Kurene:20201223131505p:plain

オクターブバンド分析の参考文献