【ゆらぎアナライザー】Version 1.15をリリースしました

スポンサーリンク

例年、今頃の時期になると卒業研究などで問い合わせが増えるのですが、今まで放置されてきた問題が明らかになってきましたので久しぶりにアップデートしました。実に3年ぶりの更新です。(汗)

まず一つは窓関数の問題です。これまでのバージョンでは「かんたんモード」における窓関数を矩形窓に固定していました。矩形窓というのは元のデータをそのまま使うという意味で、窓関数を使わないのと同義です。一方、窓関数というものは区間の両端における波形の不連続性を緩和するために用いられるもので、代表的な窓関数にはハニング窓やハミング窓といったものがあります。もともとコンピュータ上で行う離散的フーリエ変換(DFT)というものは有限のサンプル数に区切ってしか行えないわけで、一区間の波形が無限に繰り返されていることを前提にしています。つまり周期関数になっていることが大前提なのです。しかし実際の波形は必ずしも周期関数になっているわけではないので、区間の初めと終わりが滑らかにつながらない不連続性が生じます。このような不連続性がある波形をフーリエ変換すると本来は存在しない高周波成分がたくさん発生してしまい、スペクトル全体のフロアが持ち上げられて周波数の分離性が悪くなってしまいます。

1/fゆらぎを評価する場合、どんな窓関数を使うかが悩みの種になります。というのも採用する窓関数によって結果がまったく異なってしまうからです。これまではできるだけ元のデータを触らない方が良いと考えていたので矩形窓を使っていたわけですが、よく考えるとこれは不連続性による高周波成分をたくさん拾っているわけで、正しくない結果と言えます。そこでこの不連続性を完全になくすためにはハニング窓を採用するのが適当だろうと考えました。ハニング窓は区間の両端で必ずゼロになりますので、強制的に不連続をなくすことができるわけです。もちろんその影響で曲の初めと終わりの部分が無視されることになりますが、曲全体から考えればごく小さい部分なので無視しても差し支えないだろうと考えられます。それよりは正確にスペクトルが求められる方が望ましいはずです。ちなみにハミング窓というのは両端の不連続性を少しだけ残したものになります。

もう一つの問題は回帰直線の求め方です。これまではフーリエ解析して得られたスペクトルを両対数グラフにプロットして回帰直線に当てはめていました。ただ元のデータ自体はリニアなので、対数をとると高周波側にデータが密集した形になり、高周波側に強く引っ張られる結果になってしまいます。相対的に低周波側のデータはほとんど影響を及ぼさないことになります。これはどう考えても正しくない計算方法ですね。

今まではその問題を避けるために高周波側を2Hzくらいで切り捨てて回帰直線を求めていました。しかし別に2Hzというのに論理的な根拠があるわけではなく、単に便宜的に設定しただけに過ぎません。この値を少し変えるだけで回帰直線の傾きは大きく変わってしまいますので、何をやっているのかわからなくなってきました。つまり今まで1/fゆらぎだと言っていたものが本当に正しいのか非常に怪しいものです。

そこで回帰直線はできるだけフルレンジで評価するのが正しいだろうと考え、サンプリング周期で決まる最高周波数まで使うように変更しました。また逆に低周波側は窓関数による大きな周期性が出てきてしまいますので、最も低い周波数は切り捨て、2番目の周波数から使うように変更しました。これでほぼフルレンジでの評価となっています。

また回帰直線の計算方法は、対数をとったデータをすべて使う方法をやめ、X軸方向を等間隔に分割して、その中に含まれるデータの平均をとってから直線に当てはめるように変更しました。この方法だとX軸方向はすべて等間隔になりますので、高周波側に強く引っ張られる問題が避けられます。これでおおよそスペクトルの分布状態と回帰直線が見た目で一致するようになりました。今までの方法はほとんど高周波側だけで評価していたようなもので、まったく意味のないものでした。(汗)

おそらく新バージョンで評価すると今までとはまったく違う結果になると思います。もともと1/fゆらぎの理論自体、いろいろな曖昧さを含んでいますので何が正しいのかは誰にもわからないのですが(^^;、前のバージョンを信じて論文などを書いてしまった方には申し訳ないと思っています(汗)。したがって今までの解析結果はいったん破棄し、また改めて評価が必要になってきました。

ゆらぎアナライザーをダウンロード