質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2490閲覧

二つの要素を比較し小さい方を0にしバイナリマスクを作成したい

NEK0o0

総合スコア2

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/20 10:33

編集2020/10/21 17:26

前提・実現したいこと

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を使ってみたのでしたが案の定できず、正直全く持ってやり方が分からない状態です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

音声データの処理についてはあまりよく知らないので違っているかもしれませんが、

python

1MA = (A1 > A2).astype(np.int) 2MB = (A1 > A2).astype(np.int)

はご希望のものになりませんか? (MAとMBは同じ?)

A1 > A2は各要素ごとの比較結果の boolean の配列になります。
astype(np.int)で整数に変換してやるとTrue→1, False→0に変換されます。

投稿2020/10/21 23:43

bsdfan

総合スコア4596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NEK0o0

2020/10/25 08:58

助かりました! そもそも0.1で判別するならTrue,Falseで判別すればいいですもんね! 完全に失念していました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問