Как рассчитать фактическую спектрограмму из разложенной спектрограммы аудиофайла? - PullRequest
0 голосов
/ 02 сентября 2018

Я разложил спектрограмму из аудиофайла следующим образом:

import librosa
y, sr = librosa.load('my audio file.wav')
S = np.abs(librosa.stft(y))
W, H = librosa.decompose.decompose(S, n_components=32) 

Теперь, как перекомпоновать разложенную спектрограмму в реальную спектрограмму.

То, что я хочу, похоже на этот тип функциональности:

S=recompose(W,H)

1 Ответ

0 голосов
/ 06 октября 2018

Возвращаемый результат - линейное разложение на активацию и компоненты. Мы можем пойти другим путем, используя скалярное произведение этих двух.

import librosa
import numpy
import sklearn.decomposition

filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)
y = y[:20000] # smaller file, make it go faster

# abs() is not invertible, can replace with minmax scaling
S = numpy.abs(librosa.stft(y))

transformer = sklearn.decomposition.NMF(n_components=32)
W, H = librosa.decompose.decompose(S, transformer=transformer)
S_recomposed = W.dot(H)
print(numpy.sum(numpy.abs(S - S_recomposed)))

Обратите внимание, что перекомпоновка никогда не будет идеальной. Но оно должно улучшиться с увеличением n_components.

...