You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aproximarea unei melodii folosind mai multe metode de calcul numeric
Autori:
Popa Mircea Alexandru
Sîrghe Matei-Ștefan
Ungureanu Robert Anton
Data: 3 Iunie 2025
1. Modelul matematic
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.
Din cauza erorilor de floating point, vom obține o matrice aproximativă $B$ care este diferită de cea de la care am pornit:
$$
B = U\Sigma V^T \approx A \quad (8)
$$
Pentru a calcula $U$ și $V$, vom aplica factorizarea QR. Obținem $Vx = U^Tb$, iar $A = UV$. Utilizând metoda substituției descendente putem rezolva acest sistem în $O(n^2)$ pași:
$$
\begin{cases}
A^T Ax = A^T b \\
(UV)^T UVx = (UV)^T b \\
V^T U^T UVx = V^T U^T b \\
(V^T)^{-1} V^T Vx = V^T U^T b \\
Vx = U^T b
\end{cases} \quad (9)
$$
Pentru matricea $\Sigma$, valorile proprii ale matricei $A^T A$ se folosesc pentru a determina valorile singulare $\sigma_i$. Acestea sunt calculate astfel:
$$
\sigma_i = \sqrt{\lambda_i}, \text{ unde } \lambda_i \text{ sunt valorile proprii ale } A^T A \quad (10)
$$
Matricea $\Sigma$ este o matrice diagonală unde $\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_k \ge 0$, iar $k = \min(N, M)$:
Cu funcția $g(t)$ vom crea o nouă funcție $f_{ea}$ care reprezintă eroarea la un anumit timp și funcția $f_{cea}$ care reprezintă eroarea cumulată a aproximării:
Song-Approximation is a university project developed for a Numerical Calculus course (2025). The project focuses on compressing or approximating audio files using Singular Value Decomposition (SVD).