デジタルオーディオあれこれ

半田ごての人。紙と鉛筆だけではちょっと。

もっと低音を。人の耳に合わせたFFT長は、かなり短い。

 音声信号の厄介な所は、あんまり定常状態というものがない。ビデオ信号の方がまだ定常信号と実際の映像とに相関性がある。良く使われる1kHzでの歪を測ったところで、1kHzの音を大層な金をかけた装置で聞く人なんていない。聞くのは生の人間が演奏している楽器であったり生の声。シンセサイザーならば、少しは定常状態に近いとしても。

 

 定常状態とは、1kHzが同じ振幅でずっと続いている場合。生の楽器で、同じ音の大きさを保つことはまずありえない。音程は同じとしても。なので音声装置の解析に関して1kHzの定常状態は現実と乖離していて、測定結果はあまり当てにならない。聴感と測定結果との間に相関が薄いのは、一つにはこれが原因。

 

 定常状態でない場合、過渡応答と言ったりもするけれど、音声に関しては過渡応答が普通であって、そっちを特別扱いする理由は測定側の都合だけ。過渡応答というぐらいなので、何を基準としたら良いかが分からない。方形波の立ち上がりなんかを過渡応答と言ったりもするけれど、それは定常状態と大差がない。インパルスも似たようなもの。要は、何を見たいのがをハッキリさせる事。

 

f:id:xx3stksm:20190218181354j:plain

 例えばこういう信号がある。750Hzのサイン波を0.7秒ぐらいでonにしたりoffにしたり。これを96kHzサンプリングして、128kのFFTサイズで見るとこうなる。どんなFFTソフトでもこうなる。750Hzの所に山が出来るのはまあ当然。しかしそれ以外に、レベルは落ちていくとしても、全ての周波数を含むことになる。

 

 これはFFT的には正しい。人の耳的には間違っている。何故かと言えば、この信号は無音、インパルスのようなブッ、750Hzのサイン波、インパルスのようなブッ、の繰り返しとして聞こえるので。FFTはそれらを全部いっしょこた、にしてしまっている。でもそれはFFTではなくて設定の問題。

 

 96kHzサンプリングの128kとは、128/96≒1.3秒での周波数解析という意味。それはほぼこのバースト信号の一周期なので、人の耳に聞こえる音をまとめて解析する。なのでその範囲であるならば、結果は正しい。無音からサイン波に変わる所と、サイン波から無音に変わる所は、音からも明らかなようにほぼインパルスに一致する。つまり、全ての周波数成分を含むので、その結果上のようなFFT結果になる。

 

 定常状態であれば、特にFFTの長さは考える必要がない。分解能が変わるだけなので、周波数成分が大きく変わる事はない。しかし現実の音を人の耳に合わせて解析するのであれば、人の耳の特性に近いFFTの長さにしなければ、いっしょくた状態で訳が分からなくなる。どのぐらいが適当なのかは、個人差もあるので何とも。

 

 簡単に調べるのであれば、間隔を短くしていく。0.7秒のバーストでは明らかに無音とサイン波やインパルスの部分が分かる。0.05秒(10Hz)のバーストにすると、そろそろ耳で聞いても、いっしょくたに近くなる。まだ個々の音として聞けるけど。更に三倍ぐらい上げると、そろそろ耳で聞いてもいっしょくたで、8192の結果と同じになる。この信号は、WaveGenで簡単に作れる。

 

f:id:xx3stksm:20190218183011j:plain

 

 という訳で、0.05秒(10Hz)のバーストを個々の音として解析できるFFTの長さはというと、4096。黄色の縦線の前後が解析データ。

f:id:xx3stksm:20190218183511j:plain

 見ての通り、同じ信号に対してFFTの長さだけを変えると、8192ではいっしょくた。4096では個々の音を分離できる。時間にすると、4096/96000≒40mS。音の大きさが変わる所では、全く違うスペクトルになる。この場合は、小さ目の750Hz、インパルスのブッ、大きめ750Hz、インパルスのブッ、の繰り返しが辛うじて聞き取れる。その限界値が、4096のFFT長さ。

f:id:xx3stksm:20190218183748j:plain


 勿論2048も可だけど、4096の分解能の約25Hzは普通の人の音感に近そうなので、ひとまず4096。これはあくまでも周期の話なので、48kHzのサンプリングであれば、2048になる。約25Hzの分解能になるためのFFT長という意味。96kHzであれば4096ぐらいであろうと推測できる。つまり、普通の音声信号(定常状態ではない)を耳の特性に近い形で解析するのであれば、96kHzサンプリングならば4096ぐらいが適当。窓関数はハンでよい。この例は、ソフト解析との整合性もあって750=96000/128を使っているので、レクタンギュラー(窓関数なし)も可能。

 

 普通の音声信号は、定常状態とは大きく違っていて、低い方は底なし。定常状態の750Hzの基本波であれば、その倍音成分のみが存在するけれど、大きさが一定の音は現実には存在しない。ピアノにしろバイオリンにしろ。ピチカートならば、大きさの変化にこそ意味がある。その場合は、基本波の周波数とは無関係に、低い方は直流まで底なし。どうしてそうなるかは、簡単な例で直感的に分かる。

 

f:id:xx3stksm:20190218185518j:plain

 

 16Hzのサイン波と1Hzの矩形波を考える。茶色がサイン、赤が矩形波。二つを掛け算したのが水色。8サイクルが無音で、8サイクルが16Hzになる。極端な振幅の変化。水色の周波数成分は、計算するまでもなく見当がつく。矩形波は、1Hz、3Hz、5Hz・・・で出来ているので、1Hzとの掛け算で16±1、3Hzとの掛け算で16±3、5Hzとの掛け算で16±5、・・・。それぞれのレベルは1/nで落ちるので、16±1が一番大きくて16±3がその次。以下はその繰り返し。16±15、の時に1Hzが出る。

 

 下はFFTでの解析結果。直感での計算とほぼ同じ。16Hzだからその倍数しか出ないというのは幻想。それは現実では全く有り得ない定常状態での話。振幅が変わってしまえば、基本波に相当するのはその一周期となり、元の16Hzとは無関係。それは最も高い山の位置に関与するのみ。水色のようなバースト波形の再現には、1Hzまでが必要という事。元が160Hzになると、1Hzのレベルは1/10になるだろうけれど、それでも結構高いレベル。

 

 この振幅の変化とは、別の見方をすると窓関数そのもの。慣例的にFFTというけれど正しくはDFFTで、FFTとDFFTは全くの別物。コンピューターでFFTは扱えない。FFTは無限の数を扱うのでコンピューターにそれは無理。工学で使うのはDFFTしかないと思う。FFTは数学でのみ存在。DFFTは有限の数を扱うので、測定対象には周期性が必須。FFTなら基本的に必要ない。

 

 ところが一般の測定対象は、周期性を持たない。定常状態のサイン波でも、特殊な細工をしない限りは持たない。その非周期信号を、周期信号に変えるためにDFFTでは窓関数が必要になる。窓関数は、周期の始まりと終わりを強制的に0にする。それでもって周期性を確保する。測定対象に某かの数値を掛けるので、当然誤差が出る。本来の成分は分からないという事。

 

 しかし上手い具合にその誤差をかなり小さくする窓関数がある。ハンが最も宜しい。他は基本的に考えなくと良いと思う。一番誤差の小さいのがハンだから。赤がハン。周期の初めと終わりがゼロなので、測定対象が何であっても周期性が確保される。しかし元々の茶色の信号の代わりに、水色を解析するのでかなりの誤差が予想される。

f:id:xx3stksm:20190218191708j:plain

 でも、ところがどっこいで、元々の16Hzの他には16±1Hzが出るだけ。実際のFFTはレベルを補正しているので、誤差としては余計な15Hzと17Hzのみになる。これは分解能で決まる話なので、FFT長を大きくすれば、この余計な2つは元の16Hzに限りなく近づいて無視できる。水色の波形で代用してもほとんど問題はない。矩形波を掛けてしまうと、最初の例のように余計なスペクトルの山になる。

 

 なので、もしも実際の楽器での振幅変化がハンのようなコサインであれば、下に広がる事はほとんどない。それは現実にありえないけど、弾き方次第で下の広がりを大きくしたり小さくしたりは可能という話。窓関数ハンの超絶技巧とか。一般論としては、楽器の基本波は目安にしかならない。実際の演奏では、その下に底なしで広がる。電子レンジのチンとか、玄関のチャイムが無機的に聞こえるのは、普通の音はほぼ全て下に広がるのに対して、下に広がる事がないためと思う。

 

 パイプオルガンは、構造的に風の入り切りしかしないので、振幅の変化はほとんどない。そのためか、自然の楽器の中ではシンセサイザーの音に近い感じがする。エスプレシーボというのは、倍音成分は当然として、弾き方次第で決まる下への広がりにも大きく依存すると思う。一時期、神尾真由子のコーチしていた旧ソビエト人のシュトレーゼマンのように怪しい日本語を話す男が、エスプレシーボとは胸を締め付けられる、だと言ってた。

 

 同じコサインでも、2Hzにしてしまうと事情は大きく変わる。こんな感じ。こんな波形は現実にもあって不思議はない。矩形波での振幅変化はまずありえないけど。でも結果は、矩形波と似たようなもの。とても特殊な場合(ハン)を除いて、大抵の窓関数というのか振幅変化はかなりの低い成分を含む。低い方の落ち方がかなり急になるだけ。

 

f:id:xx3stksm:20190218193254j:plain

 

 現実の問題として、仮にこんな信号が記録されていた場合、15Hz以下が無くなるとどうなるかは簡単にシミュレーションできる。単純に上のFFT結果で15Hz以下をゼロにして、逆FFTで時間軸の信号に戻せば良い。

 

f:id:xx3stksm:20190218193850j:plain

 

 こんな感じの寸胴になる。もしも17Hzから上もなくすと、元の16Hzだけの完全な寸胴になるので、下だけならばこんなもんかも。寸胴になると変化が乏しくなるので、やっぱり迫力というようなものは消えるはず。現実の音声信号とは、いわゆる過渡現象の連続で出来ているので、定常状態での解析にはほとんど意味がない。

 

 定常状態での解析でも、ある程度は低い方のスペクトルが分かるとしても、かなり短い時間で出たり消えたりするものだから、本来の耳で聞いた時と同じような結果を出すのは難しい。そして寸胴の音にしないために必要なのは、とにかく底なしで低い方までの再生能力。イコライザーでは意味がないので、広い空間が必要。

 

 それは狭い都会では到底無理な話なので、分かっていても言わないのか、定常状態での解析しかしていないのか。高い方は音源からの距離ですぐになくなるので、なくても実害なし。生での臨場感を決めているのは、底なしに広がる低音だと思う。実感としても、再生が難しいのはパイプオルガンよりもピアノの低音での連打とか、オーケストラの中のコントラバスのピチカート。大きな振幅変化を持つ低音は難しい。