■はじめに
WaveSpectraは言わずとしれた、
国内でもっとも普及していると思われるefuさん作のスペクトラムアナライザの機能を持ったフリーウェアです。
使い勝手がよいので私も
エフェクターの周波数特性、エフェクターの周波数特性(その2)、エフェクターの周波数特性(その3)で使用しています。
そのWaveSpectraがV1.40以降
驚異的と思えるほどの機能を搭載されたので、皆さんに紹介がてらエフェクターの周波数特性のはかり方について考えてみようと言うのが今回の目的です。
■準備
まず、efu's pageに行って、
WaveSpectra
(ダウンロードページはこちら)
と
WaveGene
(ダウンロードページはこちら)
およびWaveGeneのユーザー波形データ
(ダウンロードページはこちら)
の最新版をダウンロードしてください。
これらのS/Wはレジストリを書き換えたりしない良心的な設計でなので、適当なフォルダに一緒に
放り込んで解凍すればインストール完了です。
(アンインストールもファイルを消すだけで終わります。)
■使い方の基本
まず、
WaveSpectraを用いた周波数特性の測定についての
(2)直接WGのスイープ信号を用いる方法。(WSのピークホールド機能を用いる方法)
周期スイープを用いた周波数特性の測定についての
(1)WGのユーザー波形で周期スイープを用いる方法。
を頭にたたき込んでおいてください。
(と言うか、ここに書いてある事を実行するという話がすべてです。
この2つを理解してたら、
これから先に続く私の駄文を読む必要はありません。)
■レベル調整
鋭意作成中(こう御期待)
■周波数特性測定
鋭意作成中(こう御期待)
■特徴
私は離散系の話と連続系の話がうまく分離できていないので、説明として適切でない部分があるかもしれません。注意お願いします。
- インパルス
δ関数(デルタ関数:波高値無限大で幅0のパルス:周波数領域では無限大まで一定レベル)を喰わせれば、周波数応答が取れる事はフーリエ変換が式で示された頃からの古い伝統を持っていると思われる方法。
しかし、実際、波高値も幅も有限の値を使わざるを得ないので以下の問題が発生する。
- 歪みが発生するようなシステムだと波高値に制限が出る。
- 波高値と比較して実効値が著しく低くなるため、波高値を満足するためには極端に広いダイナミックレンジが要求され、実効値を満足させるにはノイズに埋もれさせないようなS/Nの良いシステムが要求される。
- δ関数の代用に幅Tのパルスを使用すると1/Tの周波数にディップが発生する。
- S/Nをあげようと思ってT周期で繰り返すパルスを利用すると1/T以下の周波数応答は取れないし、T周期の整数倍でしかスペクトルが現れない。
- ホワイトノイズ
-
自然界から比較的作りやすいノイズの為、アナログ回路ではよく使われていた。
(代表的な例は:熱雑音V=√(4kTBR)k:ボルツマン係数 T:絶対温度 B:帯域幅 R:抵抗値)
- また、ホワイトノイズは各周波数に対して一様に分布するので、帯域Aと1oct上の帯域A'を比較する場合、A'の方が2倍の帯域を含むため、周波数をlog軸で表した場合、高域に行くほど+3dB/octで上昇する。
- ディジタル回路でだけでホワイトノイズを生成するには、アナログ回路かS/Wの助けを借りるしかないので、普通は後述のM系列ノイズを使う。
- WaveGeneでは一様乱数をボックス=ミューラー法で正規化してホワイトノイズを生成しているらしい。
- ピンクノイズ
-
アナログ回路で作る場合はホワイトノイズに-3dB/octのLPFを通して生成される。-3db/octと言う、
電圧的には中途半端な特性になっているので測定器で使えるような正確なピンクノイズを生成するにはちょっと技術がいる。
- 後述する掃引正弦波による方法と比較して、回路は簡単なので位相特性を測定する必要のない
音響用途では多数使われた。
-
WaveGeneでは正規乱数で発生したホワイトノイズにディジタルフィルタを通してピンクノイズを生成しているらしい。
- M系列ノイズ
- LFSR(Linear Feedback Shit Register:線形饋環シフトレジスタ)と呼ばれる回路で生成される。その名の通りシフトレジスタにEXORを使って饋環をかけただけの回路なので非常に簡単に実装でき高速動作が可能なのでしばしば利用される。通信業界ではPN(Psuedo Noise:疑似ノイズ)と呼ばれて古くから符号のスクランブル(暗号化や帯域を拡張する手段)として広く利用されてきた。
- 音響関係では自己相関関数の特徴を利用した物が先行したような気がする。
- MLS(Maximum Length Sequence:最長シーケンス)って言う人もいる。
- 基本的にホワイトノイズと同様に一様のスペクトルを生成するが、生成多項式に依存する周期で繰り返されるために、T周期で繰り返すパルスを利用すると1/T以下の周波数応答は取れない。
- ノイズとして発生可能な最高周波数もLFSRのクロック周波数Tに依存する。
- M系列ノイズは直交符号なのでたぶん(^_^;)位相特性も測れる。
- 色々書いた後に気が付いたのですが、かつさんの所のSpeaker workshop による音響測定にMLSによる測定の、極めて大ざっぱな話(^^;):にだいたい書いてあります。
- 掃引正弦波
-
波高値一定の正弦波の周波数を一定の速度で上昇もしくは下降させて、その応答をとる方法。
ホワイトノイズと比較して位相特性が容易に取れるため、古い時代のスペクトラムアナライザ
なんかでよく使っていた。
- 理論的にはδ関数と周波数軸上での位相特性が異なるだけで、波高値と実効値がさほど変わらない波形を使えるので有利な方法と思う。
- アナログ回路で組む場合は掃引用の低周波の鋸歯状波→(周波数軸がLOGの場合)指数変換回路→正弦波VCOと言う構成を測定器の精度で作らなければならないので、かなり難しい回路だったと思われる。(でもスペクトラムアナライザで使えるようなきれいなピンクノイズは作りにくかったのかもしれない。)
- 音響用途などではDDS(Direct Digital Synthesizer)が比較的容易に作れるので、現在では容易に実現できるようになった。
■掃引正弦波による方法の問題
この部分については、特に数学的裏付けが怪しく、私が感じた事をそのまま書いていますので、
参考にされる方は注意して下さい。(得意な方はコンテンツ作成時に、素人の陥りやすい間違いとして注意して頂けたら幸いです。)
こんな経緯で掃引正弦波による周波数解析が主流になったのだと思うけど、高周波ではいざ知らず、
音響用途の低周波で使用すると結構難しかったりする。(音響用途の低周波=キャリア周波数がDCでサイドバンドが片一方しかない信号)
- フーリエ変換
理工学系の大学を卒業した人だったら一度は本気でフーリエ変換を考えた事があると思うので、
あまり問題ないのですが、一般の人は楽器の基音と倍音の関係でとらえている人が多いと思います。
その関係で、音楽をフーリエ変換したらベースの音が基音になると思っている人が多いのですが、
一番低い周波数は、1/(1曲の長さ)ですし、頻繁に出てくる低域の周波数はリズムを刻んでいるBeatが出てくると思います。
そう、フーリエ変換をするには測定すべきデータをすべて取り終わった後でないと、周波数の分析が出来ないと言う事です。
- 窓関数
窓関数なんて書くとDFTやFFTの所で出てくる用語だから、ディジタルの話であって、アナログオーディオには関係ないと思う人がいると思うので、ちょっと書きます。
私は窓関数とは基本的にリアルタイム性に関係する事であって、ディジタル、アナログの話には
関係ないんじゃないかと思っています。
なんで、そう考えているかは下の実験をしてみたらわかると思います。
- キャリアもモジュレータも聴覚域の正弦波にAM変調をかけた正弦波を用意します。
金属的でイヤな音色が聞こえると思いますが、この状態でモジュレータの周波数をがんがん落としていきます。
すると、モジュレータの周波数が数Hz位になったところから、イヤな音色が消え正弦波にトレモロをかけた音(周期的に音量が変化する)に変わります。
- キャリアもモジュレータも聴覚域の正弦波にFM変調をかけた正弦波を用意します。
AM変調の時よりもっと刺激的な音色が聞こえますが、これもモジュレータの周波数をがんがん落としていくと、イヤな音から正弦波にビブラートがかかった音に変わります。
- ディレイマシーンがあればこんな事も可能です。
原音に1msecのディレイを加えて加算します。(普通のディレイマシーンの使い方です。)この場合、音色が変わって(遠くのジェット機の音を聞いた場合や、コンクリートの土管の中にいる音にちょっと似ています。)聞こえます。この状態でディレイタイムをどんどん長くしていきます。
すると20msecあたりから二重に音が聞こえてきて、最終的にはエコーのような音になります。
これらの話で共通する事は、ある一定以上の周波数では音色の変化として音の違いを感じているのに、ある周波数から音色ではなく別の尺度に切り替わっている事です。(というか、ある一定以上の周波数では様々な尺度が音色という表現に統合されるっていうのが正しいのかもしれません。)
こういう事から想像するに、聴覚の低域限界として、物理的な制限(キャビティーの長さとか)の他にも、生活に必要なリアルタイム性から、聴覚というのは窓関数のような時間が関係する物があって窓関数の中にある変化に対しては音色として認識し、それ以外では別の感覚として認識しているような気がします。
ちなみに人の聴覚の最低弁別周波数=20Hzの1パルスで音程が認識できるとすると(1/(20Hz)=50msec)位の窓関数が必要になるので、上の実験から求まる数字とあながち無関係ではないと思います。(もっとも周波数分解能と完全な連携は取れないので窓関数という呼び方はふさわしく無いのかもしれませんが…)
こんな事を書くと、文献を示せとか、ブラインドテストしろとか
色々言う人がいると思います。理屈は間違っているかもしれませんが、私は上の実験で、そう感じるし、他の人もそう感じるだろうと思っているので、わざわざ苦労してブラインドテストしてデータを集めるつもりもありませんし、文献を探す気すらおきません。
前書きが長くなりましたが…、
何を言いたかったというと、時間の分解能についても音を測定するのに重要なファクターであり、それはディジタル、アナログに関係なくあるという事が言いたかっただけです。本題に戻って、今、考えるべき問題である掃引正弦波による方法の問題について考えようと思います。
- 周波数が掃引すること自体の問題
FFTはリアルタイムの周波数解析S/Wですから、サンプリング周波数でサンプル数個(サンプル時間)分切り出して、サンプル時間に切りとった波形が繰り返されている物と仮定して計算します。
ですから、本来はサンプル時間の中で正弦波の周波数は一定でないと困るのに、
実際は周波数が変わっているため、正弦波にランプ波のFM変調がかかった波形をサンプルすることになります。そのため、スペクトルで見るとメインローブの高さは低くなり、幅はふくらみます。またFM変調がかかっている事になるため、サイドローブの高さは高くなっているはずです。(詳細はFM変調を調べてみて下さい。)
これを回避するにはサンプル時間内で正弦波の発振器側の掃引周波数が無視できる位、遅くするか、FFTがサンプルを切り出すタイミングと同期して発振器側の周波数をずらして、メインローブの低下を見込む位しか方法がありません。
更に悲しい事にFFTの周波数分解能を向上させるためには、可能な限り長いサンプル時間で切り出した方が有利なので(1/サンプル時間が周波数分解能になる)、正確にとろうと思えば思うほど周波数掃引に時間がかかる事になります。
- 指数掃引することに起因する問題
スペクトラムアナライザの周波数軸はlog表記されているので、ある周波数を掃引するのにT時間かかるとすると、1oct上の周波数ではT/2、更に1oct上ではT/4と、高い周波数になればなるほど、一定時間で掃引する周波数の幅は指数的に増えていきます。
そうすると、上の周波数が掃引すること自体の問題で発生する問題は1oct上では2倍、さらに1octでは4倍と顕著になっていきます。
正弦波掃引した周波数をWaveSpectraで測定して、高域でどんどん周波数応答が下がってくるように
観察されるのは、この問題が主では無いかと私は考えています。
本当を言うとこの部分、式を使って説明したかったのですが、現在の私では気合いを含めて、ちょっと力不足です。
- ピークホールドすることに起因する問題
上の周波数が掃引すること自体の問題でメインローブの幅が太くなると言いましたが、ピークホールドという演算をする事で、メインローブの太さが災いして、巨大なメインローブの裾が
近隣にある細かいディップを塗りつぶしてしまう可能性があります。
これを回避するにはメインローブの幅が可能な限り線スペクトルに近くなるようにするしかありません。つまり掃引周波数を無視できる位、遅くする事を意味します。
こういう不適切なデータと知らずに理論派のオヤさんにケンカを売った猛者がいたみたいで、オヤさんはそう言う人達に対してTips and tricks of tasting loudspeakersで反省を促しているのです。
じゃあ、掃引正弦波によって測定したかったらどうするかというと…
efuさんがWaveSpectraを用いた周波数特性の測定についてで示しているとおり長時間かけてリニアスイープで掃引するしか方法が無いと思います。
■使い分けの方法
じゃあ、どうやって使い分けたらよいのか?考えてみました。
鋭意作成中(こう御期待)
■理論的背景
オヤさんがhasidaさんに紹介し、hasidaさんのコンテンツを見て知った、なかなか良くできてるコンテンツ(グラフが動いたり凄いです。)
ディジタル信号処理の
線形システムあたりを理解するのが今回の話を理解する鍵となるように思います。
WaveSpectraと
WaveGeneの今回のバージョンアップは今回の話はさらに先の話でTSP(Time Stretched Pulse)という技術が背景にあります。
私も理解しているわけでは無いので、整理されていませんが、情報提供という意味で列挙します。
(才能のあるor頭の柔らかい人がこれらの文献を参考に優れたコンテンツを作成して下さる事を期待して情報をまとめています。)
-
Angelo FarinaさんのSimultaneous measurement of impulse response and distortion with a swept-sine techniqueこれは
有名な論文らしく、色々なところで参照されています。対数掃引正弦波に対する応答のディコンボリューションによるインパルス応答と歪の同時計測の話が載っているようです。(私は英語が不自由なため、リンクを先に張っておき追々理解しようと思っています。)
-
2009年 5月10日(日)23時08分21秒にefuさんから教えてもらった非常に簡明でわかりやすい説明。
しくみを簡単に説明すると、要はインパルス応答を連続的に見ているということです。
普通にインパルスを1波だけ加えて、その応答をフーリエ変換すると周波数特性が得られますね。
それをサンプル長で繰り返すと連続的に描画できます。
ただインパルスではパワーが小さいので、TSPの手法でスイープやノイズにして使っているということです。
インパルスをフーリエ変換して逆変換すると、当然ですが元のインパルスへ戻ります。
逆変換の前に、スペクトルの位相だけを連続的に(周波数の2乗で)変化させてから逆変換するとスイープになります。
位相をランダムに変化させてから逆変換するとノイズになります。
いずれも振幅はいじっていないので周波数特性はフラットです。
ヘルプにも書いたように、周期スイープの他に周期ノイズも使ってみてください。
さらに動作中にユーザー波形からパルス列に切り替えてみてください。
S/Nの改善度がわかると思います。
-
線形システムについてある程度理解しているのであれば、rarakiさんご紹介の、東大(現千葉工大)の橘秀樹氏による解説記事
空気調和・衛生工学における数学の利用(5)インパルス応答と周波数応答関数の基礎
#ただし、「はじめに」の5行目「インパルス対応」は「インパルス応答」の間違い。
#とか、相当に端折って書かれていますので読むのに注意が必要です。
-
専門家ではなく市井で最も早い時期にTSPについて言及していた、オヤさんのDaredevil 2.0のSpeaker Workshop非公式チュートリアル非公式邦訳版のネタでBBSが盛り上がり、私はここで初めてTSPについて知りました。
-
上記BBSで話題になった、日本語でかなり早い時期にTSPを説明したコンテンツ
TSPを用いたインパルス応答の測定
-
上記BBSで話題になった時、hasidaさんが作ったExcelを使ったコンテンツは、感覚的理解に大いに役立ちました。インパルスとスイープ信号
-
九州大学には音響情報処理工学演習という講座があるようです。音響情報処理工学演習教科書を見る限りでは、今回の話を体系的にわかりやすくて説明していそうです。特に音響情報処理工学演習(第8,9回)インパルス応答の測定はもろヒットしている感じがします。
こんな授業をいっぺん受けてみたいです。
-
次の3つは学生さんの卒業論文で、TSPの解説ではありませんが、比較的読みやすいです。
TSP信号の最適信号レベルの研究
TSP信号を用いた音響系評価の研究
Log-TSP 信号を用いたスピーカの高調波歪測定の再現性について
-
rarakiさんに伺った参考になりそうな日本の書籍
日本語の書籍なら、日本音響学会編の音響テクノロジーシリーズ
5 - 8巻あたりでしょうか。
#ただし歴史的経緯と日本国内事情により専ら時間引き伸ばしパルスによる
#インパルス応答, 周波数応答関数の計測が主です。
#なお、対象を線形時不変システムと看做せ外来雑音が無視できる限りにおいては、
#入出力相互相関関数を求めることによる系の同定に関して本質的な差異はない
#ものの、現実の計測では外来雑音の抑圧や対象とする系の非線形性に起因する
#誤差に関して色々各論があります。
■最後に
正直言って私はFFTなんてとうの昔に忘れてしまって、数学的背景を全く失ってしまったので、
今回の話には不適な人材です。
でも、WS+WGの組み合わせの驚異的な使い勝手の良さは、今後の教育、学習環境として、
アピールした方が社会の為になると考え、良く分からないながらがんばって
コンテンツ作成しました。
あと、Made in Japanの心意気として海外の人にWS+WGをアピールしたかったのも、ちょっとあります。(^^;)
内容的に問題があると指摘がありましたら、わかる範囲で修正しますが…
指摘できる能力のある方、自身に「コンテンツを作成してもらいたい」と言うのが本音です。
どなたかトライしませんか?
■謝辞
まずはefu's pageのefuさんに感謝します。efuさんは最高のS/WWaveSpectra及びWaveGeneを世界に向けて無償で提供してくださる上に、図々しい私のお願いを聞いて下さりHPのコンテンツ追加をして下さったり、色々原理についてわかりやすい説明をしていただきました。
hasidaの部屋のhasidaさんのExcel表
の説得力で私は感覚的にTSPを理解しました。
私にとってのTSPはDaredevil 2.0のオヤさん
のBBSで2年位前話題になった事がきっかけになりました。
そして、ノータリンの私につきあってくれる、一庵堂ヨタと〜くの常連の皆さんに感謝します。
Last Up Date '09/06/01
Last Up Date '09/05/25