第八回 音楽的な?!TSP
(2004.4.28)

さて、このコラムの第二回では インパルス応答を取得するに当たってノイズや歪みの影響を最小限に止めるため、 TSPという波形が使われることを説明しました。
で、このTSPを使って何回かインパルス応答を採取していますと、 どうもいま1つ気にかかることがありました。
それは、TSPは周波数が直線的にシフトする正弦波のようなもの なので、音楽的に重要な意味を持つ低周波が 占める時間の割合が小さいということです。
大体人間が音色や音程を判断するのに使っている周波数というのは、5KHzくらいまでなのもで、 それよりも高い周波数は、空気感とか、存在感とか表現される、もちろん在った方がハイファイなのですが、 あまり音楽の中身としての意味が薄い帯域だったりします。
ギターアンプは5KHzくらいから上の帯域はほとんど出ないのですが、 それでも音楽として訴える情報量は十分に保たれています。
しかし、通常のTSPでは、例えばサンプリング周波数を44.1KHzとした場合、 5KHzから下の帯域が占める時間割合は単純計算で4分の1(※)しかありません。
音楽的には重要度の低い高周波に、多くの時間(言い換えればエネルギー)を 使ってしまうわけで、 より音楽的と言える低周波は、相対的に歪みやノイズの影響を受けやすくなってしまうのではないか、 と思われます。

※・・・44.1KHzのサンプリング周波数で扱うことができる帯域は22.05HKzまでです。念のため、、

また、暗騒音(環境ノイズ)のスペクトラム分布も普通は低周波が優勢です。
ファンの音とか、車の音とか、ハードディスクのシーク音ですら、 多くのエネルギーは3KHz以下の帯域に集中しています。 発音源に対してあらゆる物、それこそ空気自体がローパスフィルタになるわけで、 身の回りの音の大半は、低周波のスペクトルが中心となるわけです。
とすれば、ただでさえTSPの時間割合が小さい低周波は、ますますS/N比が悪くなるということになろうかと思いわれます。

さらにもう一つオマケとして、前回紹介しました、Bend-UpするTSPで歪みをアタック前に持ってくる小技を 使う場合も、低周波ほどピュアな帯域と、倍音域が時間的に接近するため、倍音の余韻部分が、ピュアな帯域に重なりやすくなってしまいます。
(今この意味が分からなくても全然大丈夫。後段でバッチリ図解します。)

で、考えた結果。。
TSPの生成アルゴリズムを改良(?)して、低周波帯域をより間延びさせるってのはどうかと。
まあ、アイデアは単純なので多分もうやってる人は居るでしょうけど、、
掻い摘んで説明しますと、周波数領域において、位相を周波数に比例して回転させると、時間域ではインパルスの位置が変わります。
今度は、位相を周波数の自乗に比例して回転させると、時間域では、周波数が時間に対して直線的にシフトする波形となります。 これがぶっちゃけTSPなわけです。
じゃ、その中間あたり、位相を周波数の1.5乗に比例して回転させてみてはどうだろうか?
と思い作った波形をスペクトラム表示した結果を下に示します。

 
周波数が低い成分ほど、割り当てられている時間が長いことが分かります。
(実際は1.5乗だと低域が間延びし過ぎる感じがしたので1.4乗となってます。) 普通のTSPのスペクトラム表示と見比べると、如何に曲がっているかが分かると思います。

周波数特性がフラットのままだと、低周波が間延びしている分、振幅が小さくなってしまいます。 そこで、低周波をブーストしてバランスを取っています。
便宜上これを変則TSPと、呼ぶことにしましょう。

変則TSPは、通常のTSPと違い、低周波と高周波で、エネルギーが異なるため、 単に波形を逆転するだけでは、逆TSPは得られません。 変則TSPを作った時と、逆のバランスを持ったTSP波形でなくてはなりません。
また、もう1点困った点として、変則TSPは波形が0に収束しません
頭からお尻までずーと音が鳴っているのです。 これでは頭やお尻の不連続部分で倍音が発生してしまって、上手くインパルス応答が採取できないのではないかと思われる方 もいらっしゃろうかと思います。
しかし、実は変則TSPは(実は正規のTSPも)波形の頭とお尻が綺麗に繋がっているのです。 なので詳しくは後述しますが、ぴっちりと隙間を空けずにループ再生して、録音した後で頭の部分を削ってしまえば、余計な倍音は発生しません。
逆に第三回でお話しました、隙間を空けるタイプの同期加算は使えません。実を言うと正規のTSPであっても、 隙間を空けると僅かにノイズが発生するのですが、僅かなので普通は問題にならないようになっています。

では、実際に手順を説明する前に、この変則TSPの波形データを挙げておきます。 24Bits・44.1KHzのWAVファイルとなっております。サンプル数は131072(2の17乗)です。
変則TSP
逆・変則TSP

今回は説明を分かりやすくするため、同期加算を行いません。
変則TSPを、隙間を空けないで3回ループ再生させながら、再生音を別トラックに録音します。
最初の1回目は、不連続な部分を含んでいますので、使えません。 それで2回目以降の変則TSPの応答を使うわけですが、 ループ再生が2回だけですとお尻の方でも不連続、というか再生が終了している部分が発生してしまい、連続して再生された部分を取り出すのが難しくなってしまうので、 余裕をみて3回繰り返すわけです。
僕が使っているCoolEditPro改めAdobe Audition1.0の画面では下図のようになります。 マルチトラック対応の波形編集ソフトでは概ね同じような画面イメージになるかと思われます。

録音しましたら、1回目の変則TSPの応答部分は飛ばして、2回目の変則TSP応答をきっちりサンプル数(131072)の長さで切り取ります。 2回目の変則TSP応答がどこから始まっているのかが、見た目では判断しづらいと思われるかも知れませんが、 先にも説明しましたが、TSPは波形の頭とお尻が繋がっているので、切り取る波形の長ささえきっちりとしていれば、 開始位置は特にシビアに気にする必要はありません。2回目のループのど真ん中あたりで切り取ってしまっても構いません。 そのために3回ループ再生しているわけですし!

なお、同期加算をする場合は、同じようなイメージで頭とお尻の余計な波形を切り捨てた後に行います。
その際、変則TSP長(131072)の整数倍の長さで切り取ることになるので、 あらかじめExcel等で、倍数表を作っておくと良いです。
モノグサな人はこちらにCSV形式で作られた倍数表を用意しましたので、ダウンロードしてみて下さい。 128倍まで計算してあります。

さて、最後は、切り取った変則TSP応答の波形から、インパルスを復元します。 今度は、切り取った波形を隙間を空けずに3つ貼り付けて下さい。
1個だけだと、頭の部分に無音が挿入されてしまうため、正しいインパルス応答が得られないため、 2個目以降のインパルス応答成分を使いたいのですが、 2個目のインパルス応答の全長を得るために、合計で3回のループが必要になります。
そして、逆・変則TSPを畳み込んで、インパルス応答を復元します。
図で見たほうが分かりやすいので、下図に示します。

さらに得られたインパルス応答を、スペクトラム表示してみましょう。 ノイズ成分を分かり易く表示するため、10000%でノーマライズしています。

図で見ると分かるとおり、インパルスの瞬間、0Hzを起点にして、過去に向かって飛び出すようにBend-upする周波数成分があります。 これは、主にマイクやスピーカーの歪み成分です。
通常のTSPでは、歪み成分が直線的に離れていくため、残響が多い場合は、インパルスの主成分と重なり易くなります。 しかし、変則TSPを使うことで、歪み成分の影響をより小さくすることができるのです。

それでは、最後に通常のTSPを使った場合と、変則TSPの場合で、取得されるインパルス応答の違いを確かめて見ましょう。ソニーのヘッドホンMDR-CD900STの音を、40cm位離して、ベリンガーのB-5で録音しました。 ヘッドホンですので、音量は小さいですし、周囲はパソコンはもとよりエアコンなども稼動しており、騒音レベルが高い悪条件になっております。というかしました。
取得したインパルス応答を元に、楽音を加工したものがコチラから再生できます。
最初が変則TSP、2回目が通常のTSPを使って取得した、インパルス応答を元に畳み込みました。
如何でしょうか?どちらがそれらしい音に聞こえますか?

追記!!(2004/7/15)
最近どうも工学スジ(?)からのアクセスが多いのですが、 思い当たる節といへばやはりこのコラム位ですね。。
なので、高額スジの方々のために変則TSPを作った際のソースコードを公開します。
ご自身の研究等にお役立て下さい。
ソースコード
コマンドラインでの起動に対応しようとして頓挫した汚いコードですが、 メンテするのが面倒なのでご了承下さい。
各スペクトラムに重みを付けているのですが、その係数がpowerrという変数です。 この辺の数学テクニックを知らないため、何となく振幅が一定になるくらいの、 適当なカーブとなっております。
FFTのライブラリはこちらのもを 使わせて頂きました。

参考URL
東京電機大学 ・音響信号処理研究室

ここの[研究]→[卒業論文]にTSP関係で役に立つ情報が満載のPDFファイルがあります。

前の記事へ | 次の記事へ | 戻る