Wizard Notes

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

Python: A特性や他の特性を使った周波数重み付けの実装 (聴感補正,騒音測定)

f:id:Kurene:20210528232925p:plain

ある音に対して、人間が感じるうるささと音圧レベルの大きさは必ずしも一致していません。

以下の等ラウドネス曲線のように、音圧レベルと周波数によって人間の聴覚の感度は異なっています。

f:id:Kurene:20210528225601p:plain:w450
https://ja.wikipedia.org/wiki/音の大きさ

そのため、音信号の分析、特に騒音の分析では、A特性、B特性、C特性といった周波数重み付けがよく利用されます

すなわち、人間の聴覚の感度に合うように、対象となる音信号の音圧レベルを補正して分析を行います。

Wikipedia の A-weighting の記事では、以下の4つの特性とその算出方法が記載されています。

  • A特性: 等ラウドネス曲線*1 の40phonの逆特性
  • B特性: 〃 の70phonの逆特性
  • C特性: 〃 の100phonの逆特性
  • D特性:
    • 等ノイジネス曲線 (ISO. R 507, 音のやかましさ) に基づく
    • 高レベルの航空機騒音測定向け

騒音のうるささの実用的な測定・分析では、騒音源の音圧レベルや種類、騒音を聞く環境を考慮することが求められます。従って、A特性だけでなく様々な特性が開発されてきました。

今回は、Wikipedia の A-weighting の記事 に基づいて、4つの周波数重み付け特性を実装・プロットしてました。(記事冒頭プロット画像を出力)

サンプルコード

注意点として、下記コードのX_f_splの単位は音圧レベル[dB SPL]、つまり最小可聴値を基準にした絶対数値です。

一方で、オーディオファイルの波形信号の振幅値は基本的に相対値です。

従って、測定時の基準となる音圧レベル(実効値など)を騒音計で記録あるいはマイク感度の校正を行い、それに基づいて測定/録音データ(オーディオファイル)の時間波形の振幅値を補正する必要があります。

参考

*1:Fletcher–Munson curves