心地よい音について調べていて、1/fゆらぎの計算方法について興味を持った。
少し複雑でわかりにくかったので、忘れないようにメモしておく。
まず、1/fとは何か調べてみると、どうやら以下の式のことを言うらしい。
P = 1 / f (P:パワー、f:周波数)
これの意味として、パワースペクトルのグラフを描いたとき、
周波数が高くなるほど信号が減衰していっており、
その減衰率が、Pがfに反比例するグラフに近いとき、1/fゆらぎがあるという。
音には高さのほかに音色という概念がある。
ピアノの「ラ」とバイオリンの「ラ」では音色が違う。
音色の違いは周波数特性によるものだ。
「ラ」の音だからといって、その音に440Hzの周波数だけ含まれているとは限らない。
色々な雑音(ノイズ)が含まれていて、基本音として440Hzが聞こえるというだけだ。
このことを踏まえて下記式を紐解く。
P = 1 / f (P:パワー、f:周波数)
fが440Hz(ラ)のときP1とする。
では、fが倍音の880Hz(1オクターブ上のラ)のときP2とすると、
P2はP1の半分に減衰する。
つまり、周波数をx倍した場合、音の強さが1/x倍になっているとき、
1/fゆらぎがあり、心地よい音になるということだ。
1/fゆらぎを画像検索すると、P = 1 / fのグラフが出てくる。
反比例のグラフは曲線になるはずだが、グラフが右肩下がりの直線になっているものを見かける。
軸をよく見ると横軸も縦軸も対数になっている。
つまり以下のように式を変形している。
P = 1 / f = f ^ -1
両辺に対数を取って、
logP = log(f ^ -1) = -logf
つまりlogPはlogfに比例する。このとき係数は-1で右肩下がりとなる。
ここまで分かれば、1/fゆらぎ検出プログラムを作ることもできる。
具体的には、fftで音圧からパワースペクトルを計算して、
fとPを対数に変換し単回帰直線の傾きを求める。
その傾きが-1に近いかを判定すればよい。
以上。
コメント