2017-02-02 8 views
0

1次元連続信号データを変換し、与えられた帯域幅/スケールの変換範囲を生成した。指定された範囲内で最適な帯域幅またはスケールを自動的に選択する方法は?ウェーブレット変換に最適な帯域幅を選択する

例:図中、濃い青色の線は元の1D連続信号データです。他のすべての曲線は、ある範囲の帯域幅[10,20,30,40,50]のデータの変換です。この例では、はどのように自動的にカーブの変化をキャプチャする帯域幅を選択するのですか

注:答えはPythonで、「最良の」帯域幅を計算する方法については、具体的または非常に一般的なものにすることができます。あなたが与えられた周波数によって運ばれるあなたの波の予想電力を識別するために、Welch法scipy.signal.welchを使用することができ、この種の問題のために

import numpy 
import matplotlib.pyplot as plt 
from scipy.signal import ricker, cwt 

data   #numpy.ndarray 
# data = ([11, 8, 8, 2, 2, 4, 4, 4, 4, 3, 3, 5, 5, 9, 12, 17, 19, 19, 20, 19, 19, 14, 12, 11, 9, 6, 4, 3, 3, 2, 2, 6, 9, 12, 16, 17, 19, 20, 20, 19, 17, 15, 13, 9, 7, 6, 5, 3, 2, 4], dtype=int64) 
bandwidths = np.arange(10, 60, 10) 
cwt_data = cwt(data, ricker, bandwidths) #transforms the data 
plt.plot(cwt_speed.T, label='Transformed data') 
plt.plot(speed, label='original data', linewidth=2) 
plt.legend() 

enter image description here

答えて

1

enter image description here

この方法のための簡単な説明は、それがいくつかの時間期間における周波数範囲の重複通過帯域と連続する平均化を介して、各周波数で表される信号対雑音比を決定することです。

この分析を使用して、畳み込みのためのバンドパスを選択するには、いくつかの方法があります。

PSDを見て、パワーが1/fカーブから逸脱している周波数スペクトルで、極大値を特定することをお勧めします。より低い周波数範囲は、通常、より良い統計的適合性(あなたの信号が明示的に符号化された振動信号を運ばない限り)であるため、全体的な最大値の選択はその影響を受けることになります。

あなたが作業しているように見えるエンコードされていない信号(神経データ、過去の傾向、観測データなど)を表示するには、通常、カーブ上の「バンプ」がどこにあるかが重要です。この周波数発振ドライバは信号の一部を運ぶ。そうすれば、私たちは、ランダム性のために最良の適合の代わりに重要な情報を表すことができます。

+0

ありがとう! PSDグラフを作成するコードを表示してもよろしいですか?私は、信号がゼロになるまで場所を見つけようとしており、そのように、つまり信号が「死んでいる」ときにとどまっています。 –

+1

私は(MATLABの)私の例を掘り下げることができますが、おそらくscipy関数のドキュメントの例を外すほうが簡単でしょう。 https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.welch.html –

+1

また、私は帯域幅変換を使用して「死んだ信号'。信号の微分と二次微分を見て、「不感時間」を表す時間窓を特定するほうが良いでしょう。 –

関連する問題