ノート/ノート
訪問者 819     最終更新 2014-05-13 (火) 08:30:11

一般化調和解析による音階抽出

ピアノ音源の音階抽出結果1 単音の場合

サンプリング周波数 44100Hz (帯域 22050Hz)
フレーム標本点数 1024点、 フレーム長 23mS

周波数解像度は、一般化調和解析の場合、どうなるだろうか? 窓付きのFFTでは、低い周波数に対して解像度が確保できない問題がある。一般化調和解析ではこれが解決されるという議論があるが、本当か? 

楽曲の音階推定の場合、次々と異なる音が鳴るので、どうしてもある時間区間で区切ってその区間内の周波数成分分析を行う必要があるだろう。区間(フレーム)に切る限り、その区間超より周期が長いような波動は、分析しづらいだろう。たとえば、1区間に1周期が入っていればそれなりに分析可能と思うが、もし1区間に1/10周期しか入っていないとその1/10周期から波長を推定することになるわけで、精度が落ちるだろう。

仮に(全く根拠のない仮説だが)、一定精度を保つためには区間(フレーム)内に1/2周期が入っていることが必要だとする。すると、フレーム長が23mSであるから、これが1/2周期に当たる音波の周波数は、1/(23mS×2) = 22Hz程度だろうか?

実際に測定したデータから見てみよう。ソースはRWCのピアノデータ(wavファイル)である。それぞれの音で、最大強度スペクトルから-2.0までの強度範囲を取り、かつ11Hz以上の周波数成分のみを取っている。

51.wav (C, 523.25Hz)

123456
成分1523(12.91)523(12.88)523(12.83)523(12.77)523(12.71)523(12.63)
成分2

もう少し時間が経つと(第11フレームから)2倍波が-2.0より大きくなる。

39.wav (C, 261.62Hz)

123456
成分1260(16.50)260(16.35)260(16.13)262(15.94)264(15.82)522(15.71)
成分2523(16.13)522(16.08)522(15.99)522(15.92)523(15.77)261(15.62)
成分31048(14.73)1050(14.59)1051(14.49)1050(14.42)1049(14.30)1047(14.24)

27.wav (C, 130.81Hz)

123456
成分1263(15.73)264(15.64)127(15.50)126(15.41)125(15.32)126(15.25)
成分2131(15.56)130(15.48)260(15.41)261(15.23)261(15.08)261(14.98)
成分3

22.wav (G, 98Hz)

123456
成分197(16.60)97(16.64)98(16.53)98(16.61)98(16.55)98(16.51)
成分2394(15.28)390(15.10)392(14.98)394(15.08)393(15.01)388(14.76)
成分3

21.wav (F#, 92.5Hz)

123456
成分192(16.39)91(16.25)92(16.24)92(16.24)92(16.09)93(16.05)
成分2370(15.46)370(15.42)372(15.27)372(15.33)370(15.12)371(15.06)
成分3

ここから急に分布の形が変わり、さまざまなおかしな点が見られる。

20.wav (F, 87.31Hz)

123456
成分1354(14.40)356(14.31)355(14.33)354(14.20)354(14.05)352(13.83)
成分2876(14.44)875(14.28)877(14.30)877(14.22)878(14.06)879(14.13)
成分3263(13.81)265(13.80)268(13.82)270(13.80)270(13.74)268(13.73)
成分485(13.66)85(13.45)85(13.22)85(12.94)84(12.72)83(12.71)
成分5610(13.32)610(13.17)611(13.00)610(13.83)434(12.27)434(12.39)
成分6435(12.75)437(12.48)435(12.26)608(12.49)610(12.29)

19.wav (E, 82.41Hz)

123456
成分1253(15.81)244(15.91)241(15.94)241(15.83)244(15.83)246(15.62)
成分279(15.46)77(15.26)78(15.32)78(15.24)79(15.20)81(15.10)
成分3162(14.62)163(14.27)166(14.26)171(14.19)165(14.46)167(14.58)
成分4327(14.37)407(14.78)404(14.78)406(14.75)408(14.75)409(14.62)
成分5414(14.70)330(14.49)331(14.41)329(14.38)328(14.31)329(14.40)
成分6825(14.03)826(14.04)576(13.64)

18.wav (D#, 77.78Hz)

123456
成分1163(15.57)160(15.53)149(15.32)148(15.18)156(15.02)163(15.26)
成分2227(14.88)234(14.68)235(15.00)234(14.77)235(14.74)229(14.82)
成分385(13.69)75(13.66)90(13.66)80(13.60)77(13.62)89(13.45)

念のため、純音でこの周波数領域の分析をしてみると、問題は出ていない。
正確には、周波数に端数があると、GHA分析では整数周波数を抜き取ろうとするので、残渣が生まれ、それがほかの(もっと高い)周波数生分と認識される傾向がある。しかし、レベルが低いので、足きりをすると出てこなくなる。

pure82_4Hz.wav (82.4Hz 純音)

123456
成分182(20.35)82(20.35)82(20.34)82(20.35)82(20.35)82(20.35)

レベルの低い周波数成分も書き出すと(レベル10以下は略)

123
成分182(20.35)82(20.35)82(20.34)
成分254(11.61)112(11.66)111(11.69)
成分3108(11.14)55(10.78)55(10.78)

pure87_3Hz.wav (87.3Hz 純音)

123456
成分187(20.35)87(20.35)87(20.34)87(20.35)87(20.35)87(20.35)

これらから、ピアノの単音については、

ここまで分かったところで、次に2つ以上の音が鳴らされたときの音程抽出を試みる。

ピアノ音源の音階抽出結果2 単音を2個重畳した場合

単純に単音を2つ加算しただけのデータを用いると、何が起こるか。

51_58.wav (ピアノ単音 C 523.25Hz G 786Hz を重畳して合成)

123456
成分1523(13.71)523(13.80)523(13.85)521(13.95)521(14.04)522(14.09)
成分2786(13.67)785(13.56)785(13.46)785(13.37)785(13.30)785(13.26)
成分31047(11.39)1048(11.02)

成分3はフレーム1、2で見えているが、3以降はレベルが3.0以上下回っている。出ている場合もレベルが明らかに(2.5程度以上)低いので、区別できるだろう。
成分1のパワーが徐々に増えているのが気になる。2つの音の先頭位置がずれているのかも知れない。

51_63,wav (ピアノ単音 C 523.25Hz C 1050Hz を重畳して合成)

123456
成分1522(10.67)522(10.75)522(10.80)523(10.86)522(10.97)522(11.09)
成分21049(10.38)1049(10.27)1049(10.13)1050(10.00)1050( 9.82)785( 9.69)
成分31576( 7.89)1576( 7.81)2109( 7.85)2110( 8.21)
19( 8.14)

オクターブ違いの音なので、高調波が重なるはずだが、レベル差を見る限りは成分1と2はほぼ同じパワーレベルになっている。重なるはずの成分2がことさら大きいことはないし、他方で成分3やそれ以下のレベルの高調波はレベルが十分に低い。

>>> 一般化調和解析(2)へ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-05-13 (火) 08:30:11 (1139d)