\chapter{Metody transkripce hudby}\label{metody_transkripce}
Hudební signály jsou většinou tvořeny součtem několika signálů různých frekvencí. Abychom získali přehled o složení takového signálu, musíme od sebe oddělit jednotlivé frekvenční složky. Pro oddělení jednotlivých frekvenčních složek slouží spektrální analýza, která převede signál z časové domény, kde je signál vzorkovaný v čase, do frekvenční domény, kde jsou informace o přítomnosti jednotlivých frekvencí a fází signálů. K výpočtu frekvenčního spektra slouží algoritmy označované jako Fourierova transformace \cite{smith}.\\

Fourierovu transformaci dělíme do čtyř kategorií podle signálů, na které můžeme narazit: \\
\begin{enumerate}
\item {\bf Periodický spojitý} signál se pohybuje od záporného do kladného nekonečna a opakují se v něm periodické vzory (např. sinusové vlny). Fourierovou transformací tohoto signálu je Fourierova řada \cite{smith}.\\

\item {\bf Neperiodický spojitý} signál se pohybuje od záporného do kladného nekonečna a neopakují se v něm periodické vzory. Fourierovu transformaci tohoto signálu nazýváme obecně Fourierova transformace (FT) \cite{smith}.\\

\item {\bf Diskrétní periodický} signál je definovaný v diskrétních bodech v čase, který se v čase periodicky opakuje. Tento typ Fourierovy transformace se nazývá Diskrétní Fourierova transformace (DFT) \cite{smith}.\\

\item {\bf Diskrétní neperiodický} signál je definován pouze v diskrétních bodech mezi záporným a kladným nekonečnem a neopakuje se v periodickém vzoru. Tato Fourierova transformace se nazývá Fourierova transformace s diskrétním časem (DTFT) \cite{smith}.\\ 
\end{enumerate}
\begin{figure}[!h]
  \begin{center}
	\includegraphics[scale = 0.5]{obrazky/signaly.png}
  \end{center}
  \caption{Různé typy fourierovy transformace dle typu vstupního signálu \cite{smith}}
\end{figure}


Jediná metoda, která je použitelná ke zpracování signálů pomocí počítačů, je DFT. Digitální systémy mohou pracovat pouze s informací, která je diskrétní a konečná v čase \cite{smith}.\\   

Nejdříve si popíšeme standardní algoritmy používané pro analýzu signálu, u kterých nepotřebujeme zkoumat strukturu závislou na hudební stupnici. Tyto algoritmy mají lineární frekvenční rozlišení, tj. po provedení transformace získáme spektrum, které má na frekvenční ose hodnoty odpovídající zkoumané frekvenci a jejím celočíselným násobkům. Pro hudební transkripci budeme ovšem potřebovat algoritmy, které respektují logaritmickou povahu rozdělení frekvence jednotlivých tónů. \\

\section{Diskrétní Fourierova transformace - DFT}
Algoritmus pro výpočet Diskrétní Fourierovy transformace je následující \cite{holcik}:
\begin{equation}
X[k] = \sum_{n=0}^{N-1} x(n)e^{-j2\pi k\frac{n}{N}}
\end{equation}
\\
Výpočet DFT detekuje v signálu přítomnost základní frekvence a jejich vyšších harmonických frekvencí podle indexu {\it k}. Důležitým faktorem DFT je, že okno délky {\it N} obsahuje právě {\it m} celých period k-té harmonické a {\it m+1} celých period {\it k+1} harmonické, tj. rozdíl v počtu period mezi dvěma sousedními frekvenčními složkami je minimálně jedna \cite{holcik}.\\

Algoritmus pro lepší názornost lze převést dle Eulerova vztahu na tvar obsahující místo exponenciály součet funkcí sinus a kosinus.\\

\begin{figure}[!h]
  \begin{center}
	\includegraphics[scale = 0.5]{obrazky/euler}
  \end{center}
  \caption{Eulerův vzorec pro úhel $\phi$ \cite{wiki}}
\end{figure}

Algoritmus DFT přepočítaný podle Eulerova vztahu (obr. 3.2) na součet funkcí sinus a kosinus:
\begin{equation}
X[k] = \sum_{n=0}^{N-1} x(n)[cos(2\pi k\frac{n}{N}) - jsin(2\pi k\frac{n}{N})]
\end{equation}
\\
Vstupní data obsahují signál, který chceme analyzovat a výstupní signál obsahuje amplitudy složek sinových a kosinových vln. Vstupní signály jsou charakteristikou v časové doméně a výstupní signály ve frekvenční doméně. Frekvenční doména obsahuje stejný objem informací jako časová doména, jen v jiné formě. Pokud známe jednu doménu, můžeme z ní odvodit druhou. V případě, že známe časovou doménu, výpočet frekvenční domény se nazývá přímá DFT neboli FDFT. Pokud známe frekvenční doménu, výpočet se nazývá inverzní DFT neboli IDFT \cite{holcik}.\\

\subsection{Rychlá Fourierova transformace (FFT)}

Podle definičního vzorce přímé DFT pro záznam o délce okna {\it N} je zřejmé, že k vyčíslení algoritmu je potřeba {\it $N^2$} operací, což je celkem zdlouhavá operace. Až Cooley a Tukey objevili metodu značného urychlení výpočtu, zvanou rychlá Fourierova transformace (Fast Fourier transform - FFT). Podstatou metody FFT je volba zvláštní délky záznamu, a to {\it N = $2^m$}, kde {\it m} je přirozené číslo. Tato volba vede k délce okna o nějaké mocnině dvojky, např. {\it N = 128, 256, 512, 1024, 2048, 4096, 8192}. Vzhledem k délce záznamu v mocnině dva lze posloupnost vzorků ve vzorci (2.1) rozdělit na dvě části, a to se sudým a lichým pořadím. Vzorec pro přímou transformaci získá tvar:

\begin{equation}
X[k] = \sum_{n=0}^{N-1} x(n)e^{-j2\pi k\frac{n}{N}} = \sum_{n=0}^{\frac{N}{2}-1} x(2n)e^{-j2\pi k\frac{n}{\frac{N}{2}}} + e^{-j2\pi k\frac{n}{N}}\sum_{n=0}^{\frac{N}{2}-1} x(2n+1)e^{-j2\pi k\frac{n}{\frac{N}{2}}}
\end{equation}

Tím jsme transformaci obsahující N bodů rozdělili na dvě transformace obsahující N/2 bodů a stejným způsobem budeme pokračovat dál směrem do dalších dělení, až bude mít výsledná posloupnost jen dva prvky. Počet operací kompletní transformace se tak zmenší z $N^2$ na {\it N*log(N)}.

\section{Funkce časových oken}

Časová okna jsou často používána v analýze signálu a mají nenulové hodnoty pouze ve vybraném intervalu. Fourierovou transformací jednoduché funkce jako {\it cos($\omega$t)} vzniknou ve spektru nenulové hodnoty i na jiných frekvencích než $\omega$. Tento jev je větší blíže kmitočtu $\omega$ a nazývá se spektrální prolínání. Jestliže signál obsahuje dvě frekvenčně blízké sinusoidy, vlivem prolínání spektra může dojít k jejich zamaskování a ztrátě schopnosti mezi nimi rozlišit. K témuž jevu může dojít v případě velkých rozdílů v amplitudách signálu. Těmto jevům můžeme zabránit vhodnou aplikací časového okna \cite{window}. \\

\subsection{Obdelníkové okno}

Též někdy nazýváno pravoúhlé či Dirichletovo a je nejjednodušší funkcí časového okna, které je na určeném intervalu rovno 1. Toto okno zanechává jeho tvar a pouze ořezává signál na zvolený interval \cite{window}. 

\begin{equation}
w(n) = 1
\end{equation}
 
\begin{figure}[!h]
  \begin{center}
	\includegraphics[width=14cm, height=6cm]{obrazky/obdelnikove_okno}
  \end{center}
  \caption{Grafické znázornění obdelníkového okna \cite{window}} 
\end{figure}

\newpage

\subsection{Hammingovo a Hannovo okno}
Obě okna jsou založena na funkci sinus a vylepšují schopnost rozpoznat blízké frekvence a amplitudově rozdílné signály.\\

Hammingovo okno je definováno dle (\ref{haming}). 

\begin{equation}
\begin{array}{ccc@{\quad}r}
w(n) = \alpha - \beta \cos{(\frac{2\pi n}{N-1})} \\ \label{haming}
\beta = 1 - \alpha
\end{array}
\end{equation}

Kde {\it N} je délka okna, {\it n} je proměnná funkce nabývající hodnot {\it \{0,..., N-1\}}, parametr $\alpha$ definuje strmost Hammingova okna a nabývá hodnot <0,5;1>. Při hodnotě 0,5 funkce začíná i končí v nule a pro hodnotu 1 je funkce shodná s obdelníkovým oknem. Optimální hodnota pro parametr $\alpha$ = 0,53836 \cite{window}.\\

\begin{figure}[!h]
  \begin{center}
	\includegraphics[width=14cm, height=6cm]{obrazky/hamming}
  \end{center}
  \caption{Grafické znázornění Hammingova okna \cite{window}}
\end{figure}

Hannovo okno je definováno dle (\ref{hann}).

\begin{equation}
w(n) = 0,5 [1 - \cos{(\frac{2\pi n}{N-1})}] = \sin^2{(\frac{\pi n}{N-1})} \label{hann}
\end{equation}
\\
Kde {\it N} je délka okna a {\it n} je proměnná funkce nabývající hodnot {\it \{0,..., N-1\}}.

\begin{figure}[!h]
  \begin{center}
	\includegraphics[width=14cm, height=6cm]{obrazky/hann}
  \end{center}
  \caption{Grafické znázornění Hannova okna \cite{window}}
\end{figure}

\subsection{Blackmanovo okno}

Blackmanovo okno je definováno dle (\ref{blackmann}). 

\begin{equation}
\begin{array}{ccc@{\quad}r}
w(n) = a_0 - a_1\cos{(\frac{2\pi n}{N-1}))} + a_2\cos{(\frac{4\pi n}{N-1}))} \\ \\ \label{blackmann}
a_0 = \frac{1 - \alpha}{2}; a_1 = \frac{1}{2}; a_2 = \frac{\alpha}{2}
\end{array}
\end{equation}

Někdy se termínem Blackmanovo okno rozumí Blackmanův ne zcela vážný návrh pro $\alpha$ = 0,16 ($a_0$ = 0,42; $a_1$ = 0,5; $a_2$ = 0,08), který se blíží přesnému Blackmanovu oknu, které nabývá hodnot {\it $a_0$ = 7938/18608 $\approx$ 0,49656}; {\it $a_1$ = 9240/18608 $\approx$ 0,49656} a {\it $a_2$ = 1430/18608 $\approx$ 0,076849} \cite{window}.

\begin{figure}[!h]
  \begin{center}
	\includegraphics[width=14cm, height=6cm]{obrazky/blackman}
  \end{center}
  \caption{Grafické znázornění Blackmanova okna \cite{window}}
\end{figure}


\section{Fourierova transformace s logaritmickým frekvenčním rozlišením}

Když vyneseme frekvenční složky harmonického signálu na logaritmickou osu, tak relativní vzdálenosti jsou vždy stejné a nezávislé na fundamentální frekvenci. Příklad tohoto jevu můžeme vidět na obrázku (\ref{log_frek}), který je grafem spektra hypotetického signálu s harmonickými frekvenčními složkami f, 2f, 3f, atd. Vzdálenost mezi dvěma prvními složkami je log(2) mezi druhou a třetí složkou log(3/2) atd. Absolutní vzdálenost mezi frekvenčními složkami závisí tedy na fundamentální frekvenci, zatímco relativní frekvence jsou konstantní \cite{brown}. \\

\begin{figure}[!h]
  \begin{center}
	\includegraphics[scale = 0.75]{obrazky/log_frek}
  \end{center}
  \caption{Ukázka Fourierovy transformace harmonických složek signálu na logaritmické frekvenční ose \cite{brown}}\label{log_frek}
\end{figure}  

Standardní lineární rozdělení frekvenčního spektra získané diskrétní Fourierovou transformací rozděluje harmonické složky signálu do frekvenčních pásem o konstantní šířce. Poměr vzdáleností a celkové umístění vzoru zavisí na fundamentální frekvenci. Výsledkem je pracnější sledování vlastností signálu jako barva, rychlost nástupu a útlumu \cite{brown}.\\

Logaritmická reprezentace spektra generuje konstantní vzory pro spektrální složky signálu a problém identifikace nástroje či fundamentální frekvence spočívá pouze v rozeznání dříve naučeného vzoru \cite{brown}.\\

Pro získání logaritmické reprezentace spektra zvukového signálu můžeme použít algoritmus rychlé Fourierovy transformace a nanést ji na logaritmickou osu. V tomto případě přenesení dat z lineární na logaritmickou osu získáme málo informací v oblasti nízkých frekvencí a hodně informací v oblasti vysokých frekvencí. Tóny v nízkých frekvencích mají mezi sebou velice malé vzdálenosti na frekvenční ose, takže by docházelo k tomu, že by padlo několik tónů do některého z frekvenčních pásem, zatímco u vysokých tónů by několik frekvenčních pásem zbytečně detekovalo tentýž tón a jeho okolí \cite{brown}.\\

Rozlišení Diskrétní fourierovy transformace \cite{brown}:

\begin{equation}
\Delta f = \frac{fs}{N}
\end{equation}
\\
Například jestliže máme okno o délce 1024 vzorků, vzorkovací frekvenci 32000 vzorků za sekundu a rozlišení bodů přibližně 31,3 Hz. Na spodní hranici rozsahu houslí je tón $G_3$ o frekvenci 196 Hz a $Gis_3$ o frekvenci 207,65 Hz. Rozdíl mezi tóny $G_3$ a $Gis_3$ je 11,65 Hz, to je 6\% dle (\ref{rozliseni}) a rozlišení je 31,3 Hz, což je 16\% frekvence tónu $G_3$. To je o hodně více než 6\%, takže tón $Gis_3$ nebude detekován \cite{brown}.

\begin{equation}
2^{\frac{1}{12}} - 1 = 0,059 \approx 6\% \label{rozliseni}
\end{equation}
\\
Horní hranice na rozsahu klavíru je nota $C_8$ a její frekvence je 4186 Hz a rozlišení 31,3 Hz je rovno 0,7\% frekvence tónu. V tomto případě počítáme s daleko více vzorky než potřebujeme. \\

Fourierova transformace s logaritmickým rozlišením spočívá v tom, že budeme počítat jen frekvence, které odpovídají půltónům hudební stupnice podle zadaného rozsahu. Pro 12 půltónů na oktávu byl vztah pro výpočet frekvence tónů následující \cite{brown}:

\begin{equation}
f_k = (\sqrt[12]{2})^k * f_{min}
\end{equation}
\\
Kde $f_{min}$ je nejnižší analyzovaná frekvence signálu.\\

Nejjednodušší verze matematického vztahu Fourierovy transformace s logaritmickou stupnicí vypadá následovně \cite{brown}:

\begin{equation}
X[k] = \sum_{n=0}^{N_k-1} x(n)e^{-j2\pi \frac{n}{N_k}}
\end{equation}
\\
Kde délka okna $N_k$ je definována podle rovnice \cite{brown}:

\begin{equation}
N_k = \frac{f_s}{f_k}
\end{equation}
\\
Kde $f_s$ je vzorkovací frekvence a $f_k$ je frekvence analyzovaného tónu. Z toho plyne, že toto okno obsahuje právě jednu periodu základní frekvence.\\

Největším nedostatkem Fourierovy transformace s logaritmickou stupnicí je nedostatečná rozlišovací schopnost \cite{brown}. \\

\section{Konstantní Q transformace (CQT)}

Konstantní Q transformace (CQT) je upravenou variantou Furierovy transformace s logaritmickou stupnicí a řeší její nedostatky s rozlišovací schopností.\\

Matematický vztah CQT je následující:

\begin{equation}
X_{CQ}[k,n] = \frac{1}{N_k}\sum_{n=0}^{N_k-1} W_{k,n}x(n)e^{-j2\pi n\frac{f_k}{f_s}}
\end{equation}
\\
Kde $k = 1, 2,..., k_{max}$ indexují jednotlivé čtvrttóny, $f_k$ popisuje frekvenci k-tého tónu, $f_s$ je vzorkovací frekvence a $x(n)$ je n-tý vzorek zpracovávaného signálu. $W_{k,n}$ je funkce datového okna (například Obdelníkové nebo Hammingovo). Pokud tedy bude datové okno 1 na celém intervalu $(0, 1..., N_k-1)$, odpovídá funkce obdelníkovému oknu. Toto okno má však nevhodné vlastnosti vzhledem k přesahům frekvencí do sousedních frekvenčních pásem. Použijeme proto Hammingovu funkci, která je definována jako:\\

\begin{equation}
W_{k,n} = \alpha + (1 - \alpha) * \cos{2\pi \frac{n}{N_k}}
\end{equation}
\\
Kde $\alpha$ = 25/46 a n = 0,1....,$N_k$-1 \cite{brown}. \\

Frekvenci $f_k$ vypočítáme podle vztahu:

\begin{equation}
f_k = f_1 2^{\frac{k-1}{24}}
\end{equation}

Kde $f_k$ spadá do rozsahu mezi minimální $f_1$ a Nyquistovou frekvencí (polovina vzorkovací frekvence). Minimální frekvence může být zvolena těsně pod dolní hranicí rozsahu hudebního nástroje \cite{klapuri}.\\
  
Oproti Fourierovy transformace s logaritmickou stupnicí CQT nepočítá s rozlišením na půltóny (6\%), ale na čtvrttóny (3\%) \cite{klapuri}. Číslo 3\% vychází z rozdílu sousedních frekvencí, který je roven 0,03 násobku základní frekvence podle vztahu:

\begin{equation}
\frac{1}{\sqrt[24]{2} -1}\approx 0,03
\end{equation}
\\
Máme tedy konstantní poměr frekvencí a rozlišení:

\begin{equation}
Q_k = \frac{f_k}{\Delta f_k}
\end{equation}
\\
Odtud je název Konstantní Q transformace. Q faktor bude tedy konstantní pro každé {\it k}:

\begin{equation}
Q = \frac{1}{(2^{1/24}-1)}
\end{equation}
\\

Šířka pásma $\Delta$$f_k$ diskrétní Fourierovy transformace je rovna podílu vzorkovací frekvence a velikosti okna $N_k$. Aby mohl být podíl konstantní, musí se velikost okna měnit nepřímo úměrně k frekvenci. Konkrétně se vzorkovací frekvencí $f_s$ \cite{klapuri}. Velikost okna pro frekvenci $f_k$ je dána jako:

\begin{equation}
N_k = \frac{f_s}{\Delta f_k} = \frac{f_s}{f_k(2^{1/24}-1)} = \frac{f_s}{f_k} * Q
\end{equation} 
\\

\begin{table}[!h]
  \caption{Srovnání vlastností CQT a DFT \cite{brown}}
  \begin{center}
  	\small
	  \begin{tabular}{|c|c|c|c|}
	    \hline
	    								& CQT	 								& DFT \\
	    \hline\hline
	    frekvence				& $(2^{1/24})^k$ * $f_{min}$ 		& k * $\Delta$f \\ 
								& exponenciální dle k				& lineární dle k \\    							
		\hline
	    Délka datového okna 	& proměnná: $N_k$ = $(f_s/f_k)$*Q	& konstantní N \\
	    \hline
	    Rozlišení $\Delta$f		& proměnná: $f_k$/Q 				& konstantní: $f_s$/N \\
	    \hline
		$f_k$/$\Delta$$f_k$		& konstantní: Q				 		& proměnná: k \\
	    \hline
	    Počet cyklů v okně 		& konstantní: Q 					& proměnná: k \\
	    \hline
	  \end{tabular}
  \end{center}
\end{table}

\subsection{Optimalizace CQT pomocí filtru dolní propust a podvzorkováním}

CQT nepatří k algoritmům vhodným, z důvodů výpočetní náročnosti, k přímé implementaci, proto ho při použití budeme muset optimalizovat. Máme-li proměnnou délku vstupního datového okna, je zřejmé, že pro hluboké tóny budeme potřebovat zpracovávat více vzorků než pro vysoké tóny. Začneme tedy zpracovávat signál od nejvyšší oktávy zkoumaného rozsahu a po zpracování dané oktávy signál podvzorkujeme na poloviční frekvenci tím, že odebereme každý druhý vzorek signálu. Tím se frekvence signálu při zachování původní periody vzorkování zdvojnásobí a z hudebního hlediska se celý signál zvýší o oktávu. Nesmíme přitom ale porušit Shannon-Kotelnikův teorém. Proto před podvzorkováním odfiltrujeme ze signálu frekvence větší než 1/2 Nyquistovy frekvence, aby odfiltrovaný signál neobsahoval frekvence větší než je Nyquistova \cite{holcik}.\\

Např. pokud máme signál navzorkovaný s frekvencí 32000 Hz a Nyquistovou frekvencí 16000 Hz, tak před podvzorkováním na 16000 Hz musíme aplikovat filtr na frekvence nad 8000 Hz.

\section{Autokorelační funkce (ACF)}

Autokorelační funkce provádí porovnání signálu s verzí sebe sama posunutou o určitou hodnotu v čase. Funkce má velmi dobré schopnosti při měření vzájemné podobnosti dvou periodických signálů. Metoda spočívá ve výpočtu hodnoty korelace signálu v závislosti na pozdržení korelovaného signálu o časový posun $\tau$. Pro hodnotu periody T by tato funkce měla dosahovat maxima, protože naprosto periodické funkce se sebou korelují nejlépe při jejich posunu o celočíselný násobek periody. Autokorelační  funkce typu A je definována následovně \cite{lomic}.

\begin{equation}
ACF_A(\tau) = \sum_{j=0}^{\frac{N}{2}-1} x_jx_{j+\tau} \;\;\;\;\;\;\;\;\; 0\leq \tau < \frac{N}{2} 
\end{equation}
 \\
Algoritmus využívá hodnoty signálu v bodech < 0, $\frac{N}{2}$ + $\tau$ >. Velikost okna signálu pro zjištění úrovně korelace pro periodu $\tau$ je tedy závislý na $\tau$. Pro naprosto periodické signály toto nemusí být problém, u reálných signálů se však může na konci počítaného okna vyskytnout určitá aperiodicita, která ovlivní výpočet pouze pro vyšší hodnoty $\tau$. Proto si definujme autokorelační funkci typu B \cite{lomic}.

\begin{equation}
ACF_B(\tau) = \sum_{j=0}^{N-1- \tau } x_jx_{j+ \tau } \;\;\;\;\;\;\;\;\; 0 \leq \tau < N 
\end{equation}

Změna spočívá v tom, že korelace je prováděná pro libovolné $\tau$ v maximálním rozsahu okna. Pro získání hodnoty $ACF_B$($\tau$) jsme zohlednili okno celého signálu \cite{lomic}.\\

\begin{figure}[!h]
  \begin{center}
	\includegraphics[scale = 0.75]{obrazky/acf}
  \end{center}
  \caption{Hodnota autokorelační funkce na okně signálu noty $A_4$ \cite{lomic}}\label{acf}
\end{figure}  

Na obrázku (\ref{acf}) jsou hodnoty obou verzí ACF vypočítané pro jedno okno signálu tónu $A_4$ hrané na flétnu s periodou T = 100, kterou značí bílá tečka. U algoritmu $ACF_B$ můžeme pozorovat, že s postupem času se hodnota autokorelace zužuje a je to způsobeno tím, že počet členů v sumě s rostoucím $\tau$ klesá. Proto zavedeme ještě autokorelační funkci typu C, která vyvažuje zužující efekt vážícím koeficientem, jenž přímo úměrně roste v závislosti s rostoucím $\tau$ \cite{lomic}. 

\begin{equation}
ACF_C(\tau) = \frac{N}{N- \tau } \sum_{j=0}^{N-1-\tau} x_jx_{j+\tau} \;\;\;\;\;\;\;\;\; 0\leq \tau < N 
\end{equation}