1.インパルスとスイープ信号

他のページとは殆ど脈絡無いこの頁、http://www.daredevil.cn/ のBBS(アクセス不能になってしまいました)で話題になったことのあるテーマに関するものです。背景を書くのは余りに大変なので極端に手短に書きますが、

・スピーカ(に限りませんが)の特性はインパルス応答で表現できる。
・インパルスとはあらゆる周波数を均等に含むものである。
・スイープ信号は帯域の範囲では周波数を均等に含みインパルスに類似する。

といった話をexcelを使って実感するための頁でございます。

早速ですが、「可能な範囲で」あらゆる周波数を重ね合わせてインパルスを作ってみましょう

これは、±180度の範囲で、cos(t)+cos(2t)+....+cos(180t) を1度おきに計算したものです。但し横幅をFFTの「窓」だとみなすと、・その窓で扱える全ての周波数が、・同じ振幅を持ち、・時刻0で位相が揃った、という場合です。時刻0で(180個の総和ですから)180、それ以外の時刻では0と-1になりました。

0と-1のままでもいいのですが、「窓」で扱えているとも言いがたいcos(180t)だけ半分にして足すことにすると、時刻0で179.5、それ以外の時刻は-0.5で揃います。この先も、説明文中の式に関わらず、グラフを作る際にcos(180t)だけは半分にして足しています。これをやるとやらないとで見た目のギザギザが変わってきます。離散フーリエ変換を勉強すると「半分」の意味が分かりますが、当面気にしなくても大丈夫です。

この「全ての周波数の総和」において、各周波数の位相を少しずつずらしてみます。最初は
cos(t-a)+cos(2t-2a)+....+cos(180t-180a)
とやってしまったのですが、これはインパルスの時刻がずれるだけ、
cos(t-a)+cos(2(t-2a))+....+cos(180(t-180a))
とずらさないと面白くありません。最後の180次高調波が10度ずれるようにするとこうなります。

インパルスがくずれてきました。

これを180次で120度ずれるようにすると、

俄然「リニア・スイープ」になってきます。先ほどの例でもそうでしたが、位相のずらし量の倍ぐらいの範囲に「リニアスイープ」波形が広がります。

さらに180次で180度ずらしてしまうと、

「リニア・スイープ」の最初の山に高調波が重畳してきます。

ここまでのところでは、位相ずらしは「線形」にやっていましたが、「log」でずらしてみると・・

ここでは180次にかけて360度ずらしていますので、低周波の始まりのところに高周波部分が重なっていますが、むしろ-180度のところをスタートと見ると、ほぼ「ログ・スイープ」に見えます。振幅が高周波に向かって増えていますが、そういえば振幅一定のログスイープは高周波に向かって-3dB/octで落ちる特性だという話があったっけ、なるほど・・・です。

これらグラフを作るのに使ったエクセルファイルはこちら(10Mbyteあります、ご注意ください)の「リニア・ログスイープ」のシートです。パラメータとして入力するセルは黄色の2箇所(位相ずらし量と、リニア/ログの選択)だけで上記のような絵が描けます。

見ていただければセルの数は多いですが、コサインの計算をしているセルは180次を除き全て「G10」のセルのコピーになっている(180次も半分にしているだけ)等、内容は簡単な計算であることがお分かりいただけると思います。

繰り返しになりますが、このエクセルのグラフで描かれる全ての波形が、「窓」で扱える最低周波数から最高周波数(サンプリング定理の限界)までの全ての周波数を均等に含む波形になっているのです。スイープ波形を「瞬時瞬時の周波数(実はそんなものは決めようが無いのだが)を徐々に変えていった波形」だと思ってしまうのが余り正しくない認識であることが実感できるでしょう。

 

2.Farina メソッド

日本語として定着しているとも思えませんが、この方法も上記オヤさんのbbsで知りました。その概要と測定結果はオヤさんの覚え書きの頁キャッシュが残ってました)の07/08/08の項に紹介されています。この原理を納得するためにエクセル上で手を動かして見ました、というご紹介です。

先程と同じワークシート(10Mbyteあります、ご注意ください)の「ファリーナ」のシートを開けていただくと、こんなグラフが出てきます。
上のグラフの青は、先の項と似た方法で作ったログスイープ波形、ピンクは青に対し2次高調波が乗るように歪ませた波形、です。
そして下のグラフは上のピンク波形の離散フーリエ変換からインパルス応答を再構成したものです。本来のインパルスから過去の時刻に2次高調波のインパルスが「堆積」しています。

このシートで何をやっているのかを、オヤさんの紹介文「log swept sineを刺激信号にして得られた応答波形に、刺激信号の逆フィルタをコンボリューションして、スピーカのインパルスレスポンスを得る。」を噛み砕きつつ以下に説明していきます。

・・・・・・・・・・・・・・・・・・・・・・・・・

log swept sineを

インパルスを構成する各周波数成分を周波数のlog分だけずらすだけでは、log swept sine(いわゆるlogスイープ)にはならず、高周波に向かって振幅が増えてしまいますので、各周波数成分を周波数の平方根で割って高周波を小さくしてから足すように変えたのが上のグラフの青になります。

刺激信号にして得られた応答波形に、

Farinaメソッドの一番興味深いポイントは、応答から高調波歪を分離できるところにあるのですから、高調波歪を発生させなければ始まりません。2次高調波を発生させるには、入力 x に対し、歪として x^2 の項を加えるのがとりあえず簡単です。

出力 y が y = x + b・x^2 であるとして、
入力が x = a・cos(nt) であれば、三角関数の倍角公式を使って
a^2・b・cos(2nt)/2 なる2次高調波歪が発生することがわかります。
歪率は a・b/2 となり、歪率は振幅にも比例します。
ところが、今やろうとしている刺激信号=入力は「窓」の扱えるあらゆる周波数成分の和です。これを自乗するというのは、
{cos(t)+cos(2t)+....+cos(180t)}×{cos(t)+cos(2t)+....+cos(180t)}
(本当はさらに位相差もある)ですから、あらゆる周波数成分同士の掛け算が発生し、これにより各周波数の和と差の周波数成分をもつ混変調歪が大量に発生します。同じ周波数同士の掛け算は2次高調波になりますが、どう見ても混変調の方が多そうです。これがどうなるのか、問題ですが、これは一旦忘れましょう→別頁へ。
とにかく、入力 x =「青」に対し、y = x + 0.1・x^2 と機械的に処理したのが上の図の出力 y =「ピンク」になります。

刺激信号の逆フィルタをコンボリューションして、

入力(刺激信号)の素性は完全に把握できていて、元々インパルスを変形させて作ったようなものですから、逆にインパルスを作り直すのも理屈は簡単です。混ぜてしまった各周波数成分は離散フーリエ変換で別々に分離できます。FFTをかけると言う方が通りがいいでしょうが、今回は360点という半端な窓なので正しい用語としてのFFTではありません。でも、まあ、「FFTをかけて各周波数に分離するんです!」

そうやってから、位相ずれは各周波数に応じて最初にずらした分だけ戻して、高周波の振幅を減らしていた分も増やしなおして、各周波数成分を全部足せばインパルスを再構成することが出来ます。ここまでは入力=「青」のお話で、前振りなのです。

本題はここから。これと同じ処理を歪をたっぷり含む「ピンク」に対して施すとどうなるか。
ここで混変調は一旦忘れているのですから、「ピンク」が入力とその二次高調波のみを含むものとします。FFTをかけて分離すると、奇数次の成分は二次高調波を含みようがありませんから、入力と全く同じになります。偶数次の成分は、2次から180次までは入力成分と二次高調波の重ね合わせになります・・・・あれ?91次から180次までの入力成分に対する二次高調波はどこへ・・・・いいところに気がつきました。でもこれも暫く忘れて下さい→別頁へ。

入力そのままの奇数次成分と、偶数次成分の入力と同じ部分は、入力=「青」と同じものですから、上の説明と同様に位相ずれを最初にずらした分だけ戻して高周波の振幅を増やしなおせば、各周波数成分を全部足しあわせで「青」と同一のインパルスを構成します。

残った二次高調波の分は、それぞれ元となった基本波と位相が揃っていたのです。ところがFFTを通ってからは、基本波の2倍の周波数を持つものとして別扱いで処理されます。その周波数に応じて位相をずらすと、基本波のずれよりも周波数2倍分だけ余計にずらされます。
ここで、「ログスイープ」が重要な意味を持ってきます。インパルスの位相をずらしてログスイープを作成したのですが、その位相のずらし量は周波数のlogに比例したものだったのでした。するとどの周波数であっても、その2倍の周波数とのずらし量の差は常に一定になります。
この性質のために、二次高調波の成分は、基本波とは、その一定値だけずれた位相のところに「堆積」して、インパルスを構成するはずです。

スピーカのインパルスレスポンスを得る。

ここでやっているのは、入力の自乗に比例する歪成分を含む以外は入力そのままなので、この文節に対応するものはありません。先の刺激信号の逆フィルタをコンボリューションして、の文節で話は終わっています。一応この文節も説明しますと、

実際のスピーカでは線形で表現できる部分(例えばT−Sパラメータで説明できる部分、です)がむしろ主たる測定対象で、ところが非線形の歪が乗っかってくると、その影響で線形の測定が上手くいかない、ということが起こるところ、Farinaの方法だと高調波の分は、インパルスの過去の時間に集められるので線形の測定の邪魔にならなくできます。それだけでなく、集められた歪もそれぞれを観察すれば高調波歪として定量化できるのです。

・・・・・・・・・・・・・・・・・・・・・・・・・

以上、ややこしいところは一旦忘れることにして、二次高調波が基本波より過去の時間に「堆積」する様の説明に努めました。より詳しくは以下の頁でどうぞ。

1.ワークシートの説明
2.エリアシング(サンプリング定理の示す限界を超えてしまうと・・)とその回避
3.混変調の行き先

 

参考サイト:
Farinaさんの原論文 英語としては読みやすい方ではないでしょうか。信号処理等の基礎知識は読むのに必要です。私が疑問に思ったようなところはすっと流してますね。
「ディジタル信号処理」 これもオヤさんから紹介いただいた頁。プラグインか何かをインストールしないと動かない部分があったように記憶していますが、それをインストールしてから自分で色々動かして見ると、段々分かった気になってくる、と思います。(こちらの「基礎編」を大筋分からないと、私のこの頁も厳しいはずです。)
他にも、Farinaさんにタッチの差で負けた(発表が遅くなった)、日本の方の日本語の論文もありました(ので再発見したら載せます)。

 

TOPへ スピーカ工作の部屋へ