STFTおよびDWT(ウェーブレット)


12

STFTは、いくつかの周波数領域の変更(例:ノイズ除去)を行うために、サウンドデータ(たとえば、.wavサウンドファイル)で正常に使用できます。(すなわち、10秒サンプリングレートで)、 、、STFTは近似的生成(:時間枠を、第2座標:周波数ビンを第1の座標)配列。この配列に対して変更を行うことができ、オーバーラップ加算(*)を使用して再構成を行うことができます。
N=441000fs=44100windowsize=4096overlap=4430x4096

ウェーブレットで同様のことをどのように行うことができますか?(DWT)、つまりa x ba時間フレームとb周波数ビンを備えた同様の形状の配列を取得し、この配列に何らかの変更を加え、最後に信号を復元しますか?どうやって ?overlay-addと同等のウェーブレットとは何ですか?ここに含まれるPython関数は何ですか(オーディオの変更の簡単な例は見つかりませんでしたpyWavelets...)?

(*):使用できるSTFTフレームワークは次のとおりです。

signal = stft.Stft(x, 4096, 4)    # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)

for i in xrange(signal.shape[0]):    # Process each STFT frame
    modified_signal[i, :] =  signal[i, :] * .....  # here do something in order to
                                                   # modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4)   # y is the output

目標は、ウェーブレットを持つ同様のフレームワークを見つけることです。


サイドコメント:STFTでそのような「フィルタリング」を行うことは本当に悪い考えです。これは、あなたが本当にやりたいことのほとんどを行うのに最適な方法ではありません。実際に何を達成しようとしていますか?
ピーターK。

PyWaveletsは離散ウェーブレット変換専用であることに注意してください。あなたはSTFTのようなものをしたい場合は、より簡単な定数Qとして、連続ウェーブレット変換を理解するであろうガボールは、変換された、変換、本質的に複雑なモレット連続ウェーブレットと同じこと変換が、なるように設計されて可逆:grrrr.org/research/software/nsgt
endolith

1
(この質問は「コミュニティ」によって復活しました。)私の意見では、ウェーブレットは重なり合い、STFTと非常によく似た方法で追加されます。だから私は質問の性質をよく理解していません。
ロバートブリストージョンソン14年

さらに詳細が必要ですか?
ローランデュバル

回答:


4

短時間フーリエ変換は一般に冗長な変換であり、通常はすべての周波数で同じサブサンプリングで実装されます。ウィンドウが適切に選択されていれば、ウィンドウは完全です。ウィンドウを反転し、初期信号を回復できます。

冗長で完全であるため、多くの完全な逆関数があります。より一般的なツール(オーバーサンプリング)複雑なフィルターバンクを使用して実装および理解できます。ウィンドウのタイプと長さに加えてオーバーラップが与えられると、可逆かどうかを計算できる分析フィルターバンクが提供されます。もしそうなら、あなたは自然な逆数と最適化された逆数を計算することができます。オーバーラップ加算は、多くの可能性のある逆関数の1つであり、おそらく最も一般的であり、ウィンドウの選択を制限することがよくあります。

標準の離散ウェーブレット変換もフィルターバンクですが、サブサンプリングが各周波数帯域で同じではない(またはより適切にスケーリングされる)という違いがあります。これは、各スケールの長さが不均一になります。ただし、使用できる係数の「長方形配列」を生成する冗長ウェーブレット実装が存在します。最もよく知られているスキームは、異なる名前で呼ばれます:シフト不変または時不変ウェーブレット、間引きなしウェーブレット、定常ウェーブレット変換(SWT)、および場合によってはサイクルスピニング。その標準的な再構成には、オーバーラップ加算に似た手順が含まれますが、スケールのサンプリングファクターが異なるため、「埋め込み」がより多くなります。ライブラリの任意の離散ウェーブレットで使用することも、独自のウェーブレットを設計することでも使用できます。その理由は、標準の離散ウェーブレットが非冗長性を念頭に置いて設計されたため、ウェーブレットの選択が制限されるためです。冗長性を使用すると、満たすべき制約が緩和されるため、ウェーブレットの選択肢が増えます。「究極の」アバターは、連続ウェーブレット変換であり、すべての逆合成ウェーブレットを「ほぼ」認めます。私の最後の文はかなりお粗末です、あなたが意味を理解することを望みます:正方行列が可逆であるとき、それはただ1つの逆を持ちます。「長方形」行列が一般化された方法で左反転可能である場合、

Stationary Wavelet Transformの python実装があるようです。2.3.4でいくつかの参照を見つけることができますリンク論文の翻訳不変ウェーブレットの章

一般に、実用的なアプリケーション(地質物理学、非破壊検査、超音波、振動)での検出、ノイズ除去、または復元に対してはるかに堅牢です。


「冗長」とは、「入力を再現するのに必要な情報よりも多くの情報が出力に含まれている」という意味です。
エンドリス

1
丁度。一般に、サンプル信号の場合、変換後にM > N係数を取得します。これは、利益のためにこれを使用できることを意味します。たとえば、いくつかの逆の可能性がありますが、いくつかは他のものより実用的です。さらに重要なことは、変換ドメインでの処理(エンハンスメント、検出、ノイズ除去、適応フィルタリング、復元、デコンボリューション、ソース分離)を行うと、ノイズに対する堅牢性と感度が低下することです。これは、変換されたデータに追加の「多様性」を形成します。適切にのみ使用した場合...NM>N
ローランデュバル

3

短時間フーリエ変換でフィルタリングするためにオーバーラップ加算/オーバーラップ保存が必要な理由は、基本的に、取得する係数に関連付けられている基底関数が特定の時間範囲(単一の時点ではなく)で定義されるためです。拡張係数の計算に使用するフーリエ変換は、信号フレーム長で定義された円形領域で畳み込みも実装します。つまり、フレームの2つの端点が実際に識別され、円で閉じられます。そのため、編集する係数の基底関数が、フレームの両端でフレームに影響を与えないようにする必要があります。

ウェーブレットは時間変換固有ベクトルではなく、循環たたみ込みを使用して計算されません。つまり、オーバーラップの追加や保存、または循環たたみ込みの副作用を処理する他のメソッドは必要ありません。代わりに、ウェーブレット基底ベクトルは、信号を記述するための可能な基底にすぎません。したがって、(完全な、離散的な、場合によっては直交する)ウェーブレット変換は、時間領域ベースからウェーブレット領域ベースへの基底変化に他なりません。基底の変化は反転させることができ(そこに到達した基底変化行列の逆を適用することにより)、時間領域に戻すことができます。

ウィンドウサイズ、オーバーラップ、サンプリングレートとして指定したパラメーターは、すべてウェーブレット変換には適用されません。必要なのはマザーウェーブレットだけです。結果をSTFT出力と比較する場合は、ウェーブレットのプロトタイプとして、STFT基底ベクトル(つまり、ウィンドウに複素指数キャリアを乗算したもの)を選択できます。次に、高速ウェーブレット変換を適用します。これにより、信号は、最終的に係数となる高域および低域のフィルター処理およびデシメートされた信号のツリーに分解されます。各係数は、ウェーブレット基底ベクトルとそのパラメーター(scale、time)または(frequeny、time)に関連付けられています。係数を操作してから、逆離散ウェーブレット変換を適用できます。係数を取得し、再合成フィルターバンクを介して実行し、再び信号を生成します。

これらのプロセスは簡単ではなく、初心者にとっては消化するのが難しいかもしれません。しかし、高速ウェーブレット変換とその逆を実装する、選択したプラットフォームのライブラリ/ツールボックスを見つけることができるはずです。ただし、独自のウェーブレットベースを実現する場合は、分解および合成フィルターバンクのフィルター係数を導出する必要があります。それにはいくらかの深い理論が必要であり、おそらく最初にそれを研究しなければならないでしょう。

ウェーブレット変換には、他にもフレーバーがあります。つまり、オーバーコンプリートベースで機能する連続ウェーブレット変換です。計算がはるかに遅く、反転するのがはるかに難しいため、現在はあなたがしたいことのオプションではありません。


1
ご回答有難うございます。コードフレームワークを作成しようとしている主な理由は、私が常に気づいていることです(子供の頃から数年前に博士号を取得したとき(もちろんDSP関連ではないので、質問しない場合)初心者の質問はここにあります!))現実の素材(DSPのオーディオ信号など)を操作すると、深い理論を理解するのに役立ちます。私はコードに希望することです:Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio output。多くの(配列で何かをする)ことで、ウェーブレットがどのように機能するかをもう少し理解できると確信しています。
バスジ

1
@Basj、それから私が言ったように。高速ウェーブレット変換とその逆変換の両方をサポートするpythonライブラリを見つけて、生成された係数ツリーで遊んでください。頑張って楽しんでね!
ジャズマニアック

「すべてがウェーブレット変換に適用されるわけではありません」それらはCWTに適用できますよね?
エンドリス

1

ウェーブレットの基礎を定義する方法はたくさんあります。通常、ウェーブレットは次のようになります。

wx0,k0(x)=Aexp(ik0x)e(k0(xx0))

ここで、は時間の中心、k 0は周波数の中心、eは窓関数です。Aは位相と正規化を吸収します。これがSTFTと異なる主な方法は、ウィンドウの幅がkに依存することです。x0k0eAk

通常、離散点を使用して、ウェーブレットの数を制限します。STFTの場合と同様に、信号の次元数よりも多くのポイントを使用するとよい場合がよくあります。目的は、可能な限りすべてx 0k 0を使用することにより得られる答えを近似することですが、合理的な計算リソースを使用します。(x0,k0)(x0,k0)

変換されたデータの次元は信号の次元を超えるため、ウェーブレット基底は正規直交ではありません。すなわち、次は偽になります。

wk0,x0|wk0,x0=δ(x0,x0)δ(k0,k0)

Aw

x0,k0|wx0,k01k0wx0,k0|=identity

つまり、構成するウェーブレットを加算するだけで、信号を完全に再構築できます。

「修正」は、上記の合計に単純に挿入できます。

my_filter=x0,k0|wx0,k0f(x0,k0)wx0,k0|

更新2013-11-19:要求に応じて以下に実装の詳細を追加します。

f(x)

cx0,k0=wx0,k0|f

k0cx0,k0x0ffw0,k0cx0,k0

  • ff^
  • k01/4
    • f^w^0,k0
    • [kl,kr)w^0,k0
    • それに逆フーリエ変換を適用します。
    • 掛けるexp(ixkl+kr2)cx0,k0x0

k0x0w0,k0k0k0

cx0,k0k0

FFTの正確な定義方法によっては、スペクトルの切り捨てによって正規化の問題が生じる場合があります。ここですべての可能性をカバーしようとはしません。正規化は基本的に簡単な問題です。;-)

w^x0,k0(k)wx0,k0(x)

w^x0,k0=Aexp(i(kk0)x0)exp((Qlog(k/k0))2)

QAk0


1
ウェーブレット理論についてのこれらの重要な点を思い出していただきありがとうございます。これらは、実際にどのように機能するかを理解するために必要です。しかし、ここでの質問は、たとえばオーディオ信号で機能するフレームワークコードの構築に関するものです。質問は次のとおりです:これらの無限の合計を処理する方法、ウィンドウ(またはむしろmother-wavelet)を選択する方法、PythonでpyWaveletsを使用する方法(または別の同等の言語、Pythonに翻訳します)、方法パラメータを選択します(オーディオの私の例のように:サンプリングレート= 44100、fftウィンドウ= 4096、オーバーラップ= 4など)
Basj

akk|kakk|=Id

K

akakf

1
動作するかどうかを確認する最良の方法は、最小限のコード例を提供することです(たとえば、pyWaveletを使用すると、想像できる数行で可能になるはずです)(理解できたら、それでもうまくいきます)ウェーブレットについてさらに数日読む必要があります!)
Basj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.