NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

wavelet scalogramの周波数分解能について

解決済み
解決策を見る

上級信号処理ツールキットのwavelet解析を使いプログラムしています。

waveletを使ったscalogramにおいて、
正弦波信号を入力し周波数を上げて解析していくと、入力信号の表示幅(Y軸)が徐々に太くなります。
 
Y軸自体の分解能が変化するのではなく、信号の幅が変化しています。

これでは、高周波域での分解能が下がってしまうと思うのですが、
wavelet→scalogramとはこのような性質なのでしょうか、設定等で回避できる問題でしょうか?
ご教示ください、よろしくお願いいたします。

すべてをダウンロード
0 件の賞賛
メッセージ1/6
8,634件の閲覧回数

こんにちは。

信号解析のプロではありませんが、気になったことを。

 

入力されている信号の周波数を10倍にされていますが、

サンプリング周波数は同じのままですので、周波数成分を取ろうとすると

結果はより不正確になるのもしょうがないと思います。

 

そして周波数 10000Hz の信号に対して、25600でサンプリングしているので、

1周期に2.5サンプルしかとれていないです。

サンプリング情報の周波数も10倍にすれば似たような結果になると思います。

0 件の賞賛
メッセージ2/6
8,604件の閲覧回数

ご回答ありがとうございます。

 

STFTでは周波数分解能と時間分解能がトレードオフの関係なのは知っていて、

Wavelet変換を使えばどちらも犠牲にせずに解析できると思っていました。

 

しかし同じサンプリング条件で、1kHz、10kHzそれぞれの信号をwavelet解析Scalogram表現した時、

10kHz信号の見かけの周波数分解能が1khzの信号に比べ粗いので疑問に思ったわけです。

(周波数軸の分解能は変化していないので、見かけのと表現しました。)

 

実際はこれから音信号の解析をしたいと思っています。

とりあえず10kHzまでの解析を行いたいので、サンプリング周波数は25.6kHzとする予定です。

この条件では上記のような現象が発生しますが、これが問題になるのかは今後実験を進めていきます。

 

耳の周波数に対する知覚は対数的なようなので、問題にならないかもしれません。

(ただスケイログラムのY軸をプロパティで対数設定にしようとしましたが、設定できませんでした。)

もし問題になる場合は、上位Daqを使いご指摘のようにサンプリング周波数を上げてみようと思います。

 

今回のケースはwavelet変換は時間分解能、周波数分解能を両立できるが、

サンプリングによる標本化が離散的すぎて元信号を正しく表現できていなかった。

そのためScalogram表現した場合に、意図していない中心周波数以外の成分が重畳して見えていたと理解しました。

 

ありがとうございました。

0 件の賞賛
メッセージ3/6
8,598件の閲覧回数
解決策
トピック作成者ncplが受理

途中から失礼します。

 

STFT はもちろん、Wavelet 変換でもエネルギーと時間の不確定性関係から周波数分解能と時間分解能がトレードオフの関係になることを避けることはできません。
STFT は全ての周波数範囲で同じトレードオフのバランスを強制しますが、Wavelet 変換は周波数に応じてトレードオフのバランスを適切に処理する手法であると言えます。

 

STFT も Wavelet も窓の大きさが時間分解能となります。
窓が小さければ、時間分解能は細かくなりますが、周波数分解能は粗くなります。

 

エネルギーE=hω/2π=hνで、エネルギーと時間の不確定性関係は
ΔEΔt≧h/4π
ですので、周波数と時間の不確定性関係は、
Δt×Δω≧1/2
または
Δt×Δν≧1/4π
が導かれます。
ここでEがエネルギー、hはプランク定数、ωは角周波数、πは円周率、νは周波数、ΔEはエネルギー分解能、Δtは時間分解能、Δωは角周波数分解能、Δνは周波数分解能です。

 

今回は、簡単にΔt×Δν=1を仮定します。
周波数と時間の不確定性関係より、窓の大きさが1秒であれば時間分解能は1秒と大きく悪いのですが、周波数分解能は 1 Hz となり細かくなります。
一方、窓の大きさが千分の1秒である 0.001 秒であれば時間分解能は高くなりますが、周波数分解能は 1000 Hz と粗くなります。

 

高周波数の範囲では、例えば 1 MHz と 1.000001 MHz と 1 Hz の違いはさほど気にする必要はなく、周波数分解能は悪くても良くなります。
しかし、1周期が1マイクロ秒ですので、高い時間分解能が望まれます。

 

一方、低周波数である、例えば 1 Hz や 2 Hz では 1 Hz の違いは大きな違いになり周波数分解能を良くしたくなります。

その代わり1周期が1秒および0.5秒の世界ですので、時間分解能は大きくても良くなります。

例えば窓の大きさを4秒にすれば、時間分解能は4秒と悪くなりますが、1 Hz ではたかだか4周期しか動いていないので、時間分解能としては十分と言えます。

その時、周波数分解能は 0.25 Hz となり 1 Hz と 2 Hz を区別できる十分な周波数分解能を持っている、と言えます。

 

従って、高周波数の範囲では、周波数分解能は悪くても良く、その代わり窓を小さくして時間分解能を良くしたくなります。
そして周波数が低くなるにつれ、時間分解能を悪くしてでも、徐々に窓を大きくして周波数分解能を良くしたくなります。

 

Wavelet 変換は、周波数領域に変換する計算を行う時に、周波数に応じて窓の大きさを変化させて、時間分解能と周波数分解能を自動的に変化させることができる仕組みを持つ手法です。

 

Wavelet 変換では、元の時間信号が 1 kHz の時は 10 kHz より低周波数ですので、10 kHz より周波数分解能が良い範囲ですので、Y 軸の線は細くなります。
周波数を 10 kHz に上げますと 1 kHz に比べ周波数分解能が悪い範囲となるので、Y 軸の線は太くなります。その代わり、時間分解能が 1 kHz に比べ自動的に良くなります。

 

STFT も、Wavelet 変換も、エネルギーと時間の不確定性関係に捕らわれていますが、STFT では全ての周波数範囲で最初に決めた窓の大きさが適用されます。
上記の計算を STFT で行うと、1 kHz の解析に合わせた窓の設定では 10 kHz の信号に対しては時間分解能が不足します。
窓の設定を 10 kHz の信号に合わせてしまうと、1 kHz の信号に対しては周波数分解能が不足することになります。
全体を見渡して解析したい時には、Wavelet 変換の方が STFT より都合の良い手法であると言えます。

 

また scalogram ですが、時間領域の信号を STFT の基である FT (フーリエ変換)で周波数領域の信号に変換した信号をスペクトル(spectrum)と呼びます。
時間領域の信号を Wavelet 変換で変換した信号は周波数の大きさごとに並ぶのではなく、Wavelet のスケーリング関数のレベルの大きさごとに並ぶため、スペクトルとは区別して scalogram または scaleogram と呼びます。

 

スケーリング関数のレベルが異なれば、窓の大きさに相当するスケーリング関数の時間幅が異なります。
スケールのレベルの大きさが時間の逆数である周波数にも対応関係があると仮定すれば、スペクトルのように縦軸を周波数で表記できると言えば出来るようになります。

 

ここで、添付された scalogram.vi では、元の時間信号がサンプリング周波数 25.6 kHz でサンプル数は12800 です。
解析できる最大の(周波数分解能ではなく)周波数は、サンプリング周波数の半分であるナイキスト周波数 12800 Hz となります。
Scales(スケール)を 256 とした時、おそらく最大周波数 -1 レベルから最小周波数 -256 レベルの範囲ですので、-1 レベルの時の周波数をナイキスト周波数の 12800 Hz と見なせば、1レベル変化すると周波数が 50 Hz 変化したことになり、-255 レベルの時は周波数 12750 Hz というように換算できると言えば換算できます。
Scales(スケール)の値を例えば 512 に変更した時は、レベル -1 をナイキスト周波数 12800 Hz と見なし、1レベルの変化が周波数 25 Hz の変化となります。
従って、Scales(スケール)の値を大きくすれば、1レベル当たりの周波数を刻む数値が細かくなります。

 

このように、Scales(スケール)の値を変化させると、スケーリング関数とレベルの関係が変化し、同時にレベルと周波数の関係が追従して変化します。
しかし、スケーリング関数と周波数の関係は変わらず、ある周波数における周波数の不確定性の大きさには変化がないので、10 kHz 信号の scalogram における Y 軸の太さは変化しないように思います。

 

例えば、マザーウェーブレットとして Daubechies ではなく Coiflets を使う、同じ Coiflets でも Coiflets 2 ではなく Coiflets 4 を使う、など、より良いマザーウェーブレットを探すことも考えられます。
その場合でも、多少は不確定性の大きさを小さくすることができるかもしれませんが、さほど変わり映えのしない結果になるのではないか、と予測しています。

 

以上、ご参考まで。

 

メッセージ4/6
8,571件の閲覧回数

ご回答ありがとうございます。

時間-周波数分解能とスケーリング関数のレベルについての記述は大変参考になりました。

「Labview Wavelet Analysis Tools User Manual」にもSTFTベース、Waveletベースのそれぞれの時間-周波数分解能のイメージ図が載っています。
その図はご指摘のように時間-周波数の分解能について均等な格子ではなく、「低周波域では時間分解能が低く、周波数分解能が高い」「高周波域では時間分解能が高く、周波数分解能が低い」イメージになっています。

 

はじめグラフ軸自体の分解能がこのように変化すると勘違いして、Y軸の分解能は均一なのにそこに描画されるデータが周波数によって分解能が変わってくるとに疑問を持った訳です。

期待以上の回答を頂き、大変参考になりました。
ありがとうございました。

0 件の賞賛
メッセージ5/6
8,552件の閲覧回数

長々、細々とした冗長な書き方でしたが、多少とも参考になりましたら幸いです。


ところで、添付された scalogram.vi の中身を見ますと、AWT (Analytic Wavelet Transform) では "scale sampling method specifies" の端子に "even scale" を入力した時は、周波数刻みは等比になりますが、教科書通りにレベルを一つ変化させると半分の時間幅になっていくスケーリングの縮尺を適用するようです。

"even frequency" を入力した時は、周波数刻みが等差で変化するスケーリングの縮尺を VI の中で計算して適用しているようです。

 

CWT (Continuous Wavelet Transform) では、そのような "scale sampling method specifies" 端子を持たず、前段の WA Calculate Scales.vi で計算したスケーリングの縮尺を "user defined scales" 端子に入力することで対応しているようです。


周波数刻みが等比であれば、スケーリングの縮尺と不確定性の大きさを関係して考えることができます。
しかし、実際の運用上、不確定性の大きさまで考えることは稀ですので、周波数が等差で変化する縮尺を適用した方が解析し易いように思います。

どちらも観点の違いであり、正しさの違いではありませんので、どちらかが良い、ということはないと思います。


以上、蛇足まで。

 

0 件の賞賛
メッセージ6/6
8,525件の閲覧回数