前提・実現したいこと
Pythonのプログラミングでの質問です
音源分離のためのバイナリマスクの生成で躓いています。
下記の計算式でバイナリマスク MA, MB を作成したいです
MA(t, ω)={1 , A1(t, ω) > A2(t, ω)
. 0 , A1(t, ω) ≤ A2(t, ω)
XA(t, ω) = MA(t, ω) ∗ X1(t, ω),
MB(t, ω)={1 , A1(t, ω) > A2(t, ω)
・ 0 , A1(t, ω) ≤ A2(t, ω)
XB(t, ω) = MB(t, ω) ∗ X2(t, ω),
正直全く持ってやり方が分からない状態なので、どうすればいいかご教授願いたいです。
お手柔らかにお願いします
ソースコード
Python
1# モジュールのインポート 2import numpy as np 3import matplotlib.pyplot as plt 4import soundfile as sf 5import scipy 6from scipy import signal as sg 7 8# 音声の読み込み 9x1, fs = sf.read('stereo_R.wav') 10x2, fs = sf.read('stereo_L.wav') 11 12# スペクトログラムの計算 13f, t, X1 = sg.stft(x1, fs=fs) 14f, t, X2 = sg.stft(x2, fs=fs) 15 16# スペクトログラムの絶対値の計算 17A1 = np.abs(X1) 18A2 = np.abs(X2) 19 20# バイナリマスクを作成(ここが分からない) 21""" 22ここに下記の式を適用したい 23MA(t, ω)={1 , A1(t, ω) > A2(t, ω) 24 0 , A1(t, ω) ≤ A2(t, ω) 25 26MB(t, ω)={1 , A1(t, ω) > A2(t, ω) 27 0 , A1(t, ω) ≤ A2(t, ω) 28""" 29XA = Ma*X1 30XB = Mb*X2 31 32# 逆ISFT 33_, Xa = sg.istft(XA, fs) 34_, Xb = sg.istft(XB, fs) 35 36# グラフに表示 37# - スペクトログラム 38plt.figure('Spectrogram1') 39plt.imshow( np.log10(np.abs(X1)), origin='low', cmap='jet', aspect="auto") 40 41plt.figure('Spectrogram2') 42plt.imshow( np.log10(np.abs(X2)), origin='low', cmap='jet', aspect="auto") 43 44plt.figure('SpectrogramA') 45plt.imshow( np.log10(np.abs(Xa)), origin='low', cmap='jet', aspect="auto") 46 47plt.figure('SpectrogramB') 48plt.imshow( np.log10(np.abs(Xb)), origin='low', cmap='jet', aspect="auto") 49 50plt.show() 51 52
試したこと
二分化できればいいのかなと思いcv2.thresholdを使ってみたのでしたが案の定できず、正直全く持ってやり方が分からない状態です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/25 08:58