Autori:
- Popa Mircea Alexandru
- Sîrghe Matei-Ștefan
- Ungureanu Robert Anton
Data: 3 Iunie 2025
- Modelul ales de noi începe de la orice fișier audio de tip
.wav, 16 bitrate, mono. - Fișierul audio poate fi interpretat ca o amplitudine în funcție de timp. Astfel, ne putem imagina că avem o funcție de tipul
$f(t)$ , unde$t$ este timpul și$f(t)$ este amplitudinea sunetului la acel moment. - Pentru a interpreta funcția cu o acuratețe mai mare, vom aplica Short-Time Fourier Transform (STFT), care ne va permite să vedem frecvențele care compun sunetul.
- Astfel, vom ajunge la o funcție
$F(\tau, \omega)$ pe care o împărțim în matricea$A$ (care conține modulul părții reale) și matricea$\varphi$ (care conține coeficientul de unghi). - Vom aplica SVD (Singular Value Decomposition) pe matricea
$F(\tau, \omega)$ . Factorizarea QR va fi folosită pentru a descompune$A$ în valori proprii. - Aplicând SVD, vom obține matricea
$A \approx U\Sigma V^T$ , unde$U$ și$V$ sunt matricile ortogonale, iar$\Sigma$ este o matrice diagonală cu valorile pozitive. - Înmulțind cele 3 matrici, obținem o aproximare a matricei originale
$B$ , care este interpretată ca funcția$G(\tau, \omega)$ . - Cu funcția
$G(\tau, \omega)$ vom calcula Short-Time Fourier Transform inversă, care ne va permite să obținem o nouă funcție$g(t)$ , aproximarea funcției originale$f(t)$ . - Cu aproximarea
$g(t)$ vom putea obține un nou fișier audio.wav, care este o aproximare a fișierului original.
Pentru
Matricea de fază
Descompunerea SVD:
Reconstrucția funcției complexe:
Transformata inversă (ecuația 1):
Domeniul este reprezentat de durata melodiei înmulțită cu rata de eșantionare (sampling rate) de 44100 Hz.
Unde:
-
$l$ este durata melodiei în secunde. -
$h$ este sampling rate-ul implicit de 44100 Hz. -
$M$ este numărul de frecvențe pe care îl conține o melodie.
Teoretic, Short-Time Fourier Transform este:
Deoarece funcția
Vom avea matricea care va fi și spectograma originală a funcției
Cu partea imaginară a funcției
Teoretic, factorizarea SVD este:
Din cauza erorilor de floating point, vom obține o matrice aproximativă
Pentru a calcula
Pentru matricea
Matricea
Putem crea o funcție
Utilizând noua funcție, putem crea o nouă spectogramă care ne va arăta eroarea de aproximare:
Calculăm aproximarea funcției originale
Deoarece funcția
Cu funcția