Trabalho de Álgebra Linear Computacional. Sistema que separa fontes sonoras misturadas em um áudio usando Fatoração de Matrizes Não-Negativas (NMF).
Dado um áudio com várias fontes (ex.: baixo + harmonia + melodia), o sistema
fatora o espectrograma V ≈ W·H (com W, H ≥ 0) e reconstrói cada fonte
separadamente.
ALC/
├── README.md
├── requirements.txt
├── src/
│ ├── nmf.py # algoritmo NMF (regras multiplicativas) + validação
│ ├── audio.py # STFT, espectrograma e reconstrução (ISTFT)
│ └── caso_teste.py # demonstração: gera o áudio, separa e mede SDR
├── data/audios/caso_teste/ # mistura + stems (gabarito)
└── results/
├── graficos/ # convergencia_nmf.png + caso_teste/ (espectrogramas)
└── audio_separado/ # caso_teste/ (fontes separadas .wav)
pip install -r requirements.txt1. Validar o algoritmo NMF (testes sintéticos + gráfico de convergência +
comparação com sklearn):
python3 src/nmf.py2. Rodar a demonstração (sintetiza o áudio, separa as 3 vozes e mede a qualidade com SDR/SIR/SAR):
python3 src/caso_teste.pyResultado esperado: SDR médio ~24 dB (separação boa).
Ouvir os resultados:
open data/audios/caso_teste/mistura.wav # a mistura (3 vozes juntas)
open results/audio_separado/caso_teste/fonte_1.wav # uma fonte separadaáudio → STFT → espectrograma V → NMF (V≈W·H) → máscaras de Wiener → ISTFT → fontes
W= timbre de cada fonte (quais frequências);H= ativação de cada fonte (quando toca);S= número de fontes. A separação é melhor quandoS≈ nº de padrões espectrais do áudio.