オーディオ分離のための非負行列因数分解-なぜ機能するのですか?


8

非負の行列因数分解は、行列を2つの行列の積に因数分解することを目的としています。ここで、は基底ベクトルのセットを表し、それらのアクティブ化または重みを表します。オーディオソース分離に適用される、はスペクトログラム(これは既知)であり、は非負の基本スペクトル、はそれらの時間的活性化です。VV=WHWHVWH

これは、スペクトログラムをさまざまな周波数ビンとその大きさの合計として表現できるように思えます-これは、さまざまなピッチをフィルタリングまたは分離するのに役立ちます(通常のバンドパスフィルターの役割を果たしていると思われますか?)。これが実際にピアノと歌手が同じまたは類似したピッチで歌うなど、実際にどのように分かれるかはわかりません。


ハーモニクスを持つ音符の場合、くし形フィルターのバンクは、基本波(または別の倍音)のみを調整するバンドパスフィルターのバンクよりも優れているでしょう。くし形フィルターの最も低い周波数の歯は、BPFと同じ周波数に回されます。したがって、スペクトログラムは、さまざまなピッチ周波数とそれらの高調波の合計と考えることができます。いくつかの重複があります。
robert bristow-johnson 2016

回答:


7

の列が W 「基本」ベクトル(またはディクショナリの要素-任意の信号のビルディングブロック)と考えることができ、各列の要素は H対応する重みを与える(それは時間とともに変化する)。これにより、周波数成分だけでなく時間的な開始情報にも基づいてスペクトログラムを分解できます。そのため、単純なバンドパスフィルターやくし型フィルターよりも多くのことができます。

スペクトログラムの非負の行列因数分解は、同じピッチで歌うピアノと歌手を魔法のように分離しません。ただし、(可能であれば)異なるソースからの寄与に分割できる重み付けされた基底ベクトルの合計に関して有用な近似を提供します。これは、各ソースがまったく同じ周波数ビンをまったく同じ瞬間に占める可能性が低いためです。

より具体的には、 V なる M×NW なる M×K そして H なる K×N。だから私たちはM 周波数ビン、 N 時間サンプルと K分解されたコンポーネント。もしw の列です W そして h の行です H 我々は書ける:

VΣ=1KwhT
レコーディングに2つのソース(ピアノと歌手)しかないことがわかっている場合は、 W および対応する行のサブセット H。だからS{1K} その場合、ピアノが寄与する部分は次のように表すことができます。
Vピアノ=ΣSwhT
そして、歌手によって貢献された部分は:
V歌手=Σ{1K}SwhT

実際には、この分離を正確に達成できない分解に終わる可能性があります。つまり、wは、歌手とピアノの両方からの貢献があり、2つを分離することが困難です。

:ここではドラムやギターの混合物について、この手順を示すPythonのノートPCだhttp://nbviewer.jupyter.org/gist/ingle/93de575aac6a4c7fe9ee5f3d5adab98fそれはここでは、動作しない場合(または:https://gist.github.com / ingle / 93de575aac6a4c7fe9ee5f3d5adab98f

NMFアルゴリズムは分解のみを生成することに注意してください。のサブセットを選択できません{w}各ソースに対応。Pythonの例では、手動でステップを見つけ、wのギターv / sドラムのような音です。おそらくドラムのw ベクトルは低周波数でより多くのものを持っています。

バンドパスフィルターのバンクを使用してスペクトログラムの各列(フレーム)を分析することは、スペクトログラムを分解するもう1つの方法です。ただし、NMFによって生成される分解は低ランク、つまり節約的であることに注意してください。Pythonの例では、16列のサブセットを手動で選択する方がはるかに簡単でした。W2つのソースに対応します。バンドパスフィルターのバンクを使用すると、さらに多くのノブ(#フィルター、各フレームのパスバンドの位置)を回さなければならず、パラメーターの組み合わせの数は非常に急速に増える可能性があります。

参照:

https://ccrma.stanford.edu/~njb/teaching/sstutorial/part2.pdf

http://musicinformationretrieval.com/nmf.html


1
Pyhtonノートブックリンクが機能しない
soultrane '29年

1
歌手とピアノが同じ音符(同じピッチクラスと同じオクターブ)を歌っているとき、どのように設定されますか S 歌手に対応するセットを設定します {1K}S)異なるでしょうか?
robert bristow-johnson

@ robertbristow-johnson、あなたは正しい-その場合、私の説明は正確ではありません。しかし、私は、歌手とピアノがまったく同じ瞬間に同じ音符でまったく同じ音を歌っている可能性は非常に低いと仮定しました。したがって、それを互いに素なサブセットに分割できることが期待されます。そうでない場合は、w両方のソースからの貢献があります。
Atul Ingle

@soultraneリンクが修正されました。
Atul Ingle 2016年

1
バンドパスフィルターのバンクを使用すると「密度の高い」分解が得られるのに対し、NMFは「スパースな」分解になるため、これは異なります。NMFによって生成される分解は、ランクが低く、節約的です。Pythonの例では、16列のサブセットを手動で選択する方がはるかに簡単でした。W2つのソースに対応します。バンドパスフィルターのバンクを使用すると、さらに多くのノブ(#フィルター、各フレームのパスバンドの位置)を回す必要があり、パラメーターの組み合わせの数は非常に急速に増える可能性があります。
Atul Ingle 2016年

0

目標:1人の歌手を1人のピアノから分離することの適切な近似。ここで、正確な分離を行うために必要なすべての入力情報(おそらく「基本ベクトル」)がありそうにない場合の音源の正確な分離の要件に関するいくつかの考え:
-ピアノの各ノートの各ボリュームについて、結果のピアノ時間の経過とともにサンプリングされた頻度分布(攻撃されてからフェードするため)。-歌手ごとのノートXボリュームX音素ごとに周波数分布(およびさまざまなレベルのビブラートによるその変動)-上記のすべてについて、リバーブ効果を考慮する必要があります。-曲の歌詞(歌手の音素に合わせるため)

また、ピアノの各ノートはアタックで始まる必要があるなどの時間領域の制限と、ピアノのサスティーンペダルの効果(対応するキーがリリースされていたにもかかわらず、「リンギング」だったノートが突然ほぼ同時に減衰する)

上記の場合、検索は、ピアノ音のスペクトルのセットと歌手の単一音符-ボリューム-音素スペクトルの「最適な」合計を求めて、結果の音を近似します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.