Spectrogramからのオーディオ信号の再構築


19

50%オーバーラップしたハミングウィンドウを使用してマグニチュードスペクトログラムを抽出した曲のセットがあります。スペクトログラムを抽出した後、主成分分析(PCA)を使用していくつかの次元削減を行いました。それを低次元に減らした後、低次元からスペクトログラムを再構築しました。そのため、元のスペクトログラムと再構成されたスペクトログラムの間にエラーが発生します。私はオーディオの音をどうするか、下の次元から再構築するとき、私は知ることができるだろうだから、オーディオ信号に、このスペクトログラムの背中を変換し、それを再生したいと思います。

Matlabなどで利用可能な機能はありますか?マグニチュードスペクトログラムをオーディオ信号に変換するには??


2
あなたは本当にSTFTと逆STFTが必要です。「スペクトログラム」は、STFTの大きさのヒートマップの単なる名前であり、大きさだけでは信号を再構成するには不十分です。mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/…をご覧ください。
エンドリス

4
@endolithのコメントを拡張すると、STFTからスペクトログラムに移行するときに欠けているのは、信号の周波数領域表現の重要な要素である位相情報です。
ビヨンロッシュ

つまり、元のオーディオ信号を再構築する場合、STFTの振幅と位相の両方が必要ですか?しかし、一般的にオーディオ機能を構築するために、| S | 複素数noの振幅が使用され、位相情報は破棄されます。 M として計算したメルスペクトログラムでPCAを実行しました。これは、メルフィルターバンク乗算行列です。ので、どのようにあなたが与えられたオーディオ信号復元んXを、Xへの近似はPCAの後に得ましたか。X=log(M|S|)X^
user76170

@endolith:mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/で指定したリンクを使用してみました…位相と振幅の両方の情報を使用しました(上記の関数への入力として複素数)。これを使用して、信号を再生してみましたが、途切れ途切れに聞こえました。なぜこれが起こるのですか?次に、元の信号と上記の逆STFTプロシージャから取得した信号との間のノルムを計算しましたが、3.46 * 10 ^ 3という大きな値を示しました。なぜこれが起こるのか?S
-user76170

@ user76170:途切れるのは、STFTが信号をフレームに切り刻み、時にはオーバーラップし、それらが構築されたのと同じ方法でそれらを解体しなければならないか、それぞれに不連続性があるためです。そのリンクからSTFTおよびISTFT関数を使用しましたか? 見てあなたは問題が何であるかを見ることができるように途切れ途切れ信号の波形で。
エンドリス

回答:


15

スペクトログラムがオーバーラップウィンドウからの短時間フーリエ変換の大きさとして計算された場合、スペクトログラムには暗黙的にいくつかの位相情報が含まれます。

次の反復がジョブを実行します。

xn+1=istft(Sexp(iangle(stft(xn))))

はスペクトログラム、 stftは前方短時間フーリエ変換、 isftは逆短時間フーリエ変換です。Sstftisft


@edouardで直接コメントしたいのですが、評判が十分ではありません。誰もが知っているん彼の答えではありますか?また、x 0をどのように初期化しますか?ただランダム?であるX nは繰り返しで完全に復元された信号のnまたは単にN 番目の係数xは?ありがとう。ix0xnnnthx
PR

1
@PR単位の虚数、1
ピーターK。

3

正しいことをしている@edouardの答えを理解するのに少し苦労しました。再構築の実装に使用した/signals//a/3410/9031と比較してください

は虚数であり、x nn 番目の反復で再構築された信号であることに注意してください。オーディオ信号の長さのランダムなベクトルであるx 0から始めます。私にとっては、申し分のない結果を得るには、数回の反復で十分でした。それにもかかわらず、元の信号の絶対誤差は非常に大きかった。また、再構成された信号から生成された生成されたスペクトログラムは、一般に同じ構造を示していますが、大きさがまったく異なりました。ixnnthx0


2

再構成されたスペクトログラムと元のスペクトログラムを使用して、振幅応答が一方のスペクトログラムを他方に変換するフィルターを設計できます。その後、このフィルターを元の時間領域データに適用するか、元のFFTに適用して、オーバーラップ加算/高速畳み込みフィルターを保存できます。


|S||S||S^|

2
スペクトログラムマトリックスは損失が大きいため、再構成には使用できません。ただし、変換をリバースエンジニアリングして目的のスペクトログラムを生成できる場合は、元の非損失時間領域データに適用するか、元の複雑な結果のFFTに適用できます。
hotpaw2

S|S||S|

1
@ user76170その長短は、信号を再構築する前に複雑なSTFTが必要なことです。マグニチュードSTFTだけを持っている場合、それだけでは十分ではありません。この規則には例外がありますが、一般に、規模だけでなく複雑なSTFTが必要です。
タリンジヤエ

|S||S^|

-1

計算の複雑さが心配でない場合は、Griffin-Limアルゴリズムを使用してスペクトログラムからのオーディオ信号を反転させます。


少し答えを広げていただけますか?おそらく、代表的な論文またはアルゴリズムへのリンクと、この質問にどのように関連するかについての簡単な説明を追加するか(?)
A_A

あなたの質問を正しく理解していれば、簡単に言えば、元の位相情報を使用せずにスペクトログラムからオーディオ信号を再構築したいということです。Griffin-Limアルゴリズムは、入力としてスペクトログラムマトリックスを必要とし、フェーズを繰り返し再構成します。論文ieeexplore.ieee.org/document/1164317
Jitendra Dhiman

知らせてくれてありがとう。この点を明確にするだけです。この応答は、レビューキューに「低品質」として表示されました。「レビュー」に関して私が持っているオプションには、「改善」に対するコメントの提供が含まれます。この回答がDSP.SEで一般的に出会う回答の種類と一致するためには、Griffin Limアルゴリズムを少し調べて、OPが求めているものとの関連性を示す必要があります。将来の編集は、回答に直接適用できます。この点は、特に「私」を満足させることではなく、質問に対する有意義な回答のセットを持っていることです
-A_A

元のFFT情報がない場合の最良の答えは(Griffin-Limを使用して)ここにあります。timsainb.github.io/...
Artemi Krymski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.