前提・実現したいこと
Pytorchを使って音の分離を行うモデルを作っています。
前処理としてwavファイルからスペクトログラムに変換しているところです。
pytorchのtorchaudioというライブラリを使ってスペクトログラムに変換しています。エラーはないのですが、返り値が周波数成分の強さ、周波数、ウィンドウのホップ数の3次元のテンソルが返されます。スペクトログラムを時間ごとに見たいのですが、このホップ数を時間に変更する方法が分かりません。
発生している問題・エラーメッセージ
該当のソースコード
Python
1filename = "/content/drive/MyDrive/肺音/TrainingCD/coarse_crackle/67/TRACK67_11k.WAV" 2#waveread 3waveform, Fs = torchaudio.load(filename) 4""" 5nt = min(2^17, 2^(nextpow2(len(waveform.T))-1)) 6waveform = waveform[1:nt] 7waveform = waveform / max(waveform) * 0.4 8""" 9print(waveform) 10print("Shape of waveform: {}".format(waveform.size())) 11print("Sample rate of waveform: {}".format(Fs)) 12print(len(waveform.T)) 13t = np.arange(len(waveform.T))/Fs 14plt.xlabel("time [s]") 15plt.ylabel("amplitude") 16#plt.xlim(0,len(waveform.T)/Fs) 17plt.plot(t, waveform.t().numpy()) 18plt.show() 19 20#transform spectrogram 21nfft = 2048 22windowsize = nfft 23offset = windowsize // 4 24print(offset) 25D = torchaudio.transforms.Spectrogram(nfft, windowsize, offset)(waveform) 26#D = torchaudio.transforms.Spectrogram()(waveform) 27print("Shape of spectrogram: {}".format(D.size())) 28[l, m, n] = D.size() 29plt.figure() 30plt.imshow(D.log2()[0,:,:].numpy(), origin='lower') 31plt.xlabel("time [s]") 32plt.ylabel("frequency [Hz]")
試したこと
imshowの際にwaveformを時間に変換したものをDと一緒に与えてみたのですが、Dがすでに3次元のテンソルのためエラーが返されます。
また、参考にできるコードが公式のチュートリアルしかなく、チュートリアルでは解決できませんでした。
補足情報(FW/ツールのバージョンなど)
google colab
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/11 11:21
2020/12/11 11:44 編集
2020/12/14 05:58
2020/12/14 12:00 編集
2020/12/15 09:35