{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"FMP\"\n", "\"AudioLabs\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"C5\"\n", "

HMM-Based Chord Recognition

\n", "
\n", "\n", "
\n", "\n", "

\n", "Following Section 5.3.4 of [Müller, FMP, Springer 2015], we discuss in this notebook an HMM-based approach for chord recognition. The idea of using HMMs for chord recognition was originally introduced by Sheh and Ellis. \n", "

\n", " \n", " \n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "We now show how the concept of [HMMs](../C5/C5S3_HiddenMarkovModel.html) can be applied to improve [automated chord recognition](../C5/C5S2_ChordRec_Templates.html). First of all, we need to create an HMM that suitably models our chord recognition problem. Generally, as introduced in the [FMP noteboook on HMMs](../C5/C5S3_HiddenMarkovModel.html), an HMM is specified by the parameters $\\Theta:=(\\mathcal{A},A,C,\\mathcal{B},B)$. In the chord recognition context, the set \n", "\n", "$$\n", "\\mathcal{A}:=\\{\\alpha_{1},\\alpha_{2},\\ldots,\\alpha_{I}\\}.\n", "$$\n", "\n", "of states is used to model the various chord types that are allowed in the recognition problem. As in the [FMP notebook on template-based chord recognition](../C5/C5S2_ChordRec_Templates.html), we consider in this notebook only the twelve major and twelve minor triads, thus setting\n", "\n", "\\begin{equation}\n", "\\label{eq:ChordReco:HMM:App:Spec:SetStates}\n", " \\mathcal{A} = \\{\\mathbf{C},\\mathbf{C}^\\sharp,\\ldots,\\mathbf{B},\\mathbf{Cm},\\mathbf{Cm^\\sharp},\\ldots,\\mathbf{Bm}\\} \n", "\\end{equation}\n", "\n", "In this case, the HMM consists of $I=24$ states, which we enumerate as indicated above. For example, $\\alpha_{1}$ corresponds to $\\mathbf{C}$ and $\\alpha_{13}$ to $\\mathbf{Cm}$. In the remainder of this notebook, we do the following: \n", "\n", "* First, we explain how to explicitly create an HMM by specifying the other HMM parameters in a musically informed fashion. Even though these parameters may be learned automatically from training data using the [Baum–Welch Algorithm](../C5/C5S3_HiddenMarkovModel.html), the manual specification of HMM parameters is instructive and leads to an HMM with an explicit musical meaning. \n", "\n", "* Second, we apply this HMM for chord recognition. The input (i.e., observation sequence) of the HMM is a [**chromagram representation**](../C3/C3S1_SpecLogFreq-Chromagram.html) of the music recording. Applying the [**Viterbi Algorithm**](../C5/C5S3_Viterbi.html), we then derive an optimal state sequence (consisting of chord labels) that best explains the chroma sequence. The sequence of chord labels yields our frame-wise chord recognition result.\n", "\n", "We will compare the HMM-based chord recognition results with the results obtained from the [template-based approach](../C5/C5S2_ChordRec_Templates.html). In particular we will see that the HMM transition model introduces a kind of **context-aware postfiltering**. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specification of Emission Likelihoods\n", "\n", "In our chord recognition scenario, the observations are chroma vectors that have previously been extracted from the given audio recording. In other words, the observations are $12$-dimensional real-valued vectors which are elements of the continuous feature space $\\mathcal{F}=\\mathbb{R}^{12}$. So far, we have only considered the case of **discrete HMMs**, where the observations are discrete symbols coming from a finite output space $\\mathcal{B}$. To make discrete HMMs applicable to our scenario, one possible procedure is to introduce a finite set of prototype vectors, a so-called **codebook**. Such a codebook can be regarded as a discretization of the continuous feature space $\\mathcal{F}=\\mathbb{R}^{12}$, where each codebook vector represents an entire range of feature vectors. Emission probabilities can then be determined on the basis of this finite set of codebook vectors.\n", "\n", "As an alternative, we use in the following an HMM variant, where we replace the discrete output space $\\mathcal{B}$ by the continuous feature space $\\mathcal{F}=\\mathbb{R}^{12}$ and the emission probability matrix $B$ by **likelihood functions**. In particular, the emission probability of a given state is replaced by a normalized similarity value defined as inner product of a state-dependent normalized template and a normalized observation (chroma) vector. To compute the state-dependent likelihood functions, we proceed as described in the [FMP notebook on template-based chord recognition](../C5/C5S2_ChordRec_Templates.html). Let $s:\\mathcal{F} \\times \\mathcal{F} \\to [0,1]$ be the **similarity measure** defined by the [inner product of normalized chroma vectors](../C5/C5S2_ChordRec_Templates.html) (where one should use a [thresholded normalization](../C3/C3S1_FeatureNormalization.html) to avoid division by zero):\n", "\n", "$$\n", "s(x, y) = \\frac{\\langle x,y\\rangle}{\\|x\\|_2\\cdot\\|y\\|_2}\n", "$$ \n", "\n", "for $x,y\\in\\mathcal{F}$. Based on $I=24$ major and minor triads (encoded by the states $\\mathcal{A}$ and indexed by the set $[1:I]$), we consider the [**binary chord templates**](../C5/C5S2_ChordRec_Templates.html) $\\mathbf{t}_i\\in \\mathcal{F}$ for $i\\in [1:I]$. Then, we define the state-dependent likelihood function $b_i:\\mathcal{F}\\to [0,1]$ by\n", "\n", "$$\n", "b_i(x) := \\frac{s(x, \\mathbf{t}_i)}{\\sum_{j\\in[1:I]}s(x, \\mathbf{t}_j)}\n", "$$\n", "\n", "for $x\\in\\mathcal{F}$ and $i\\in [1:I]$. In our scenario, the [observation sequence](../C5/C5S3_HiddenMarkovModel.html) $O=(o_{1},o_{2},\\ldots,o_{N})$ is a sequence of chroma vectors $o_n\\in\\mathcal{F}$. We define the observation-dependent $(I\\times N)$-matrix $B[O]$ by \n", "\n", "$$\n", "B[O](i,n) = b_i(o_n)\n", "$$\n", "\n", "for $i\\in[1:I]$ and $n\\in[1:N]$. Note that his matrix is exactly the [**chord similarity matrix**](../C5/C5S2_ChordRec_Templates.html) with a column-wise [$\\ell^1$-normalization](../C3/C3S1_FeatureNormalization.html), as introduced in the [FMP notebook on template-based chord recognition](../C5/C5S2_ChordRec_Templates.html) and visualized in form of a **time–chord representation**. In context of the the [Viterbi algorithm](../C5/C5S3_Viterbi.html), the likelihood $B[O](i,n)$ is used to replace the probability value $b_{ik_n}$. \n", "\n", "As our running example throughout the remainder of this notebook, we continue our Bach example introduced in the [FMP notebook on chord recognition evaluation](../C5/C5S2_ChordRec_Eval.html). In this example, we consider a piano recording of the first four measures of Johann Sebastian Bach's $\\mathrm{C}$-major prelude. Furthermore, in the next code cell, we show the observation sequence $O$ (chromagram representation) as well as the likelihood matrix $B[O]$ (time–chord representation).\n", "\n", "\"FMP_C5_20a\"\n", "\n", "
\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:55:27.760031Z", "iopub.status.busy": "2024-02-15T08:55:27.759739Z", "iopub.status.idle": "2024-02-15T08:55:35.382207Z", "shell.execute_reply": "2024-02-15T08:55:35.381499Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import os\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "import pandas as pd\n", "from scipy.linalg import circulant\n", "from numba import jit\n", "\n", "import sys\n", "sys.path.append('..')\n", "import libfmp.b\n", "from libfmp.c5 import get_chord_labels\n", "%matplotlib inline\n", "\n", "\n", "# Specify \n", "fn_wav = os.path.join('..', 'data', 'C5', 'FMP_C5_F20_Bach_BWV846-mm1-4_Fischer.wav')\n", "fn_ann = os.path.join('..', 'data', 'C5', 'FMP_C5_F20_Bach_BWV846-mm1-4_Fischer_ChordAnnotations.csv')\n", "color_ann = {'C': [1, 0.5, 0, 1], 'G': [0, 1, 0, 1], 'Dm': [1, 0, 0, 1], 'N': [1, 1, 1, 1]}\n", "\n", "N = 4096\n", "H = 1024\n", "X, Fs_X, x, Fs, x_dur = \\\n", " libfmp.c5.compute_chromagram_from_filename(fn_wav, N=N, H=H, gamma=0.1, version='STFT')\n", "N_X = X.shape[1]\n", "\n", "# Chord recogntion\n", "chord_sim, chord_max = libfmp.c5.chord_recognition_template(X, norm_sim='1')\n", "chord_labels = libfmp.c5.get_chord_labels(nonchord=False)\n", "\n", "# Annotations\n", "chord_labels = libfmp.c5.get_chord_labels(ext_minor='m', nonchord=False)\n", "ann_matrix, ann_frame, ann_seg_frame, ann_seg_ind, ann_seg_sec = \\\n", " libfmp.c5.convert_chord_ann_matrix(fn_ann, chord_labels, Fs=Fs_X, N=N_X, last=True)\n", "#P, R, F, TP, FP, FN = libfmp.c5.compute_eval_measures(ann_matrix, chord_max)\n", "\n", "# Plot\n", "cmap = libfmp.b.compressed_gray_cmap(alpha=1, reverse=False)\n", "fig, ax = plt.subplots(3, 2, gridspec_kw={'width_ratios': [1, 0.03], \n", " 'height_ratios': [1.5, 3, 0.2]}, figsize=(9, 7))\n", "\n", "libfmp.b.plot_chromagram(X, ax=[ax[0, 0], ax[0, 1]], Fs=Fs_X, clim=[0, 1], xlabel='',\n", " title='Observation sequence (chromagram with feature rate = %0.1f Hz)' % (Fs_X))\n", "libfmp.b.plot_segments_overlay(ann_seg_sec, ax=ax[0, 0], time_max=x_dur,\n", " print_labels=False, colors=color_ann, alpha=0.1)\n", "\n", "libfmp.b.plot_matrix(chord_sim, ax=[ax[1, 0], ax[1, 1]], Fs=Fs_X, clim=[0, np.max(chord_sim)],\n", " title='Likelihood matrix (time–chord representation)',\n", " ylabel='Chord', xlabel='')\n", "ax[1, 0].set_yticks(np.arange(len(chord_labels)))\n", "ax[1, 0].set_yticklabels(chord_labels)\n", "libfmp.b.plot_segments_overlay(ann_seg_sec, ax=ax[1, 0], time_max=x_dur,\n", " print_labels=False, colors=color_ann, alpha=0.1)\n", "\n", "libfmp.b.plot_segments(ann_seg_sec, ax=ax[2, 0], time_max=x_dur, time_label='Time (seconds)',\n", " colors=color_ann, alpha=0.3)\n", "ax[2,1].axis('off')\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Specification of Transition Probabilities\n", "\n", "In music, certain chord transitions are more likely than others. This observation is our main motivation to employ [HMMs](../C5/C5S3_HiddenMarkovModel.html), where the first-order temporal relationships between the various chords can be captured by the **transition probability matrix** $A$. In the following, we use the notation $\\alpha_{i}\\rightarrow\\alpha_{j}$ to refer to the transition from state $\\alpha_{i}$ to state $\\alpha_{j}$ for $i,j\\in[1:I]$. For example, the coefficient $a_{1,2}$ expresses the probability for the transition $\\alpha_{1}\\rightarrow\\alpha_{2}$ (corresponding to $\\mathbf{C}\\rightarrow\\mathbf{C}^\\sharp$), whereas $a_{1,8}$ expresses the probability for $\\alpha_{1}\\rightarrow\\alpha_{8}$ (corresponding to $\\mathbf{C}\\rightarrow\\mathbf{G}$). In real music, the change from a tonic to the dominant is much more likely than changing by one semitone, so that the probability $a_{1,8}$ should be much larger than $a_{1,2}$. The coefficients $a_{i,i}$ express the probability of staying in state $\\alpha_{i}$ (i.e., $\\alpha_{i}\\rightarrow\\alpha_{i}$) for $i\\in[1:I]$. These coefficients are also referred to as **self-transition** probabilities.\n", "\n", "A transition probability matrix can be specified in many ways. For example, the matrix may be defined manually by a music expert based on rules from harmony theory. The most common approach is to generate such a matrix automatically \n", "by estimating the transition probabilities from labeled data. In the following figure, we show three different transition matrices (using a log probability scale for visualization purposes). \n", "\n", "* The first one was learned from labeled training data based on the [Beatles collection](../C5/C5S3_ChordRec_Beatles.html) using bigrams (pairs of adjacent elements) in the labeled frame sequences. As an example, the coefficient $a_{1,8}$ (corresponding to the transition $\\mathbf{C}\\rightarrow\\mathbf{G}$) has been highlighted. \n", "* The second matrix is a **transposition-invariant** transition probability matrix obtained from the previous matrix. To achieve transposition invariance, the labeled training dataset is augmented by considering all twelve possible [cyclic chroma shifts](../C3/C3S1_TranspositionTuning.html) to the considered bigrams. \n", "* The third matrix is a **uniform** transition probability matrix with a large value on the main diagonal (self-transitions) and a much smaller value at all remaining positions. \n", "\n", "\"FMP_C5_F29-30-32\"\n", "\n", "
\n", "\n", "For more details on the construction of these transition matrices, we refer to Section 5.3.4.2 of [Müller, FMP, Springer 2015]. In the following code cell, we read a `CSV`-file that contains the precomputed transition matrix estimated on the basis of the [Beatles collection](../C5/C5S3_ChordRec_Beatles.html). In the visualization, we show both the probability values as well as the log-probability values. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:55:35.417060Z", "iopub.status.busy": "2024-02-15T08:55:35.416747Z", "iopub.status.idle": "2024-02-15T08:55:36.055078Z", "shell.execute_reply": "2024-02-15T08:55:36.054398Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_transition_matrix(A, log=True, ax=None, figsize=(6, 5), title='',\n", " xlabel='State (chord label)', ylabel='State (chord label)',\n", " cmap='gray_r', quadrant=False):\n", " \"\"\"Plot a transition matrix for 24 chord models (12 major and 12 minor triads)\n", "\n", " Notebook: C5/C5S3_ChordRec_HMM.ipynb\n", "\n", " Args:\n", " A: Transition matrix\n", " log: Show log probabilities (Default value = True)\n", " ax: Axis (Default value = None)\n", " figsize: Width, height in inches (only used when ax=None) (Default value = (6, 5))\n", " title: Title for plot (Default value = '')\n", " xlabel: Label for x-axis (Default value = 'State (chord label)')\n", " ylabel: Label for y-axis (Default value = 'State (chord label)')\n", " cmap: Color map (Default value = 'gray_r')\n", " quadrant: Plots additional lines for C-major and C-minor quadrants (Default value = False)\n", "\n", " Returns:\n", " fig: The created matplotlib figure or None if ax was given.\n", " ax: The used axes.\n", " im: The image plot\n", " \"\"\"\n", " fig = None\n", " if ax is None:\n", " fig, ax = plt.subplots(1, 1, figsize=figsize)\n", " ax = [ax]\n", "\n", " if log is True:\n", " A_plot = np.log(A)\n", " cbar_label = 'Log probability'\n", " clim = [-6, 0]\n", " else:\n", " A_plot = A\n", " cbar_label = 'Probability'\n", " clim = [0, 1]\n", " im = ax[0].imshow(A_plot, origin='lower', aspect='equal', cmap=cmap, interpolation='nearest')\n", " im.set_clim(clim)\n", " plt.sca(ax[0])\n", " cbar = plt.colorbar(im)\n", " ax[0].set_xlabel(xlabel)\n", " ax[0].set_ylabel(ylabel)\n", " ax[0].set_title(title)\n", " cbar.ax.set_ylabel(cbar_label)\n", "\n", " chord_labels = get_chord_labels()\n", " chord_labels_squeezed = chord_labels.copy()\n", " for k in [1, 3, 6, 8, 10, 11, 13, 15, 17, 18, 20, 22]:\n", " chord_labels_squeezed[k] = ''\n", "\n", " ax[0].set_xticks(np.arange(24))\n", " ax[0].set_yticks(np.arange(24))\n", " ax[0].set_xticklabels(chord_labels_squeezed)\n", " ax[0].set_yticklabels(chord_labels)\n", "\n", " if quadrant is True:\n", " ax[0].axvline(x=11.5, ymin=0, ymax=24, linewidth=2, color='r')\n", " ax[0].axhline(y=11.5, xmin=0, xmax=24, linewidth=2, color='r')\n", "\n", " return fig, ax, im\n", "\n", "# Load transition matrix estimated on the basis of the Beatles collection\n", "fn_csv = os.path.join('..', 'data', 'C5', 'FMP_C5_transitionMatrix_Beatles.csv')\n", "A_est_df = pd.read_csv(fn_csv, delimiter=';')\n", "A_est = A_est_df.to_numpy('float64')\n", "\n", "fig, ax = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 1], \n", " 'height_ratios': [1]}, \n", " figsize=(10, 3.8))\n", "\n", "plot_transition_matrix(A_est, log=False, ax=[ax[0]], title='Transition matrix')\n", "plot_transition_matrix(A_est, ax=[ax[1]], title='Transition matrix with log probabilities')\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To obtain the **transposition-invariant transition matrix**, we simulate the [cyclic chroma shifts](../C3/C3S1_TranspositionTuning.html) on the matrix-level by cyclically shifting and averaging the four quadrants (defined by the major-chord and minor-chord regions) of the original matrix. In the visualization, we show the original transition matrix as well as the resulting transposition-invariant transition matrix. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:55:36.057998Z", "iopub.status.busy": "2024-02-15T08:55:36.057785Z", "iopub.status.idle": "2024-02-15T08:55:36.561126Z", "shell.execute_reply": "2024-02-15T08:55:36.560533Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def matrix_circular_mean(A):\n", " \"\"\"Computes circulant matrix with mean diagonal sums\n", "\n", " Notebook: C5/C5S3_ChordRec_HMM.ipynb\n", "\n", " Args:\n", " A (np.ndarray): Square matrix\n", "\n", " Returns:\n", " A_mean (np.ndarray): Circulant output matrix\n", " \"\"\"\n", " N = A.shape[0]\n", " A_shear = np.zeros((N, N))\n", " for n in range(N):\n", " A_shear[:, n] = np.roll(A[:, n], -n)\n", " circ_sum = np.sum(A_shear, axis=1)\n", " A_mean = circulant(circ_sum) / N\n", " return A_mean\n", " \n", "def matrix_chord24_trans_inv(A):\n", " \"\"\"Computes transposition-invariant matrix for transition matrix\n", " based 12 major chords and 12 minor chords\n", "\n", " Notebook: C5/C5S3_ChordRec_HMM.ipynb\n", "\n", " Args:\n", " A (np.ndarray): Input transition matrix\n", "\n", " Returns:\n", " A_ti (np.ndarray): Output transition matrix\n", " \"\"\"\n", " A_ti = np.zeros(A.shape)\n", " A_ti[0:12, 0:12] = matrix_circular_mean(A[0:12, 0:12])\n", " A_ti[0:12, 12:24] = matrix_circular_mean(A[0:12, 12:24])\n", " A_ti[12:24, 0:12] = matrix_circular_mean(A[12:24, 0:12])\n", " A_ti[12:24, 12:24] = matrix_circular_mean(A[12:24, 12:24])\n", " return A_ti\n", "\n", "\n", "A_ti = matrix_chord24_trans_inv(A_est)\n", "\n", "fig, ax = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 1], \n", " 'height_ratios': [1]}, \n", " figsize=(10, 3.8))\n", "\n", "plot_transition_matrix(A_est, ax=[ax[0]], quadrant=True, \n", " title='Transition matrix')\n", "plot_transition_matrix(A_ti, ax=[ax[1]], quadrant=True, \n", " title='Transposition-invariant transition matrix')\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we provide a function for generating a uniform transition probability matrix. This function has a parameter $p\\in[0,1]$ that determines the probability for self transitions (the value on the main diagonal). The probabilities on the remaining positions are set such that the resulting matrix is a probability matrix (i.e., all rows and columns sum to one)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:55:36.564015Z", "iopub.status.busy": "2024-02-15T08:55:36.563816Z", "iopub.status.idle": "2024-02-15T08:55:37.218344Z", "shell.execute_reply": "2024-02-15T08:55:37.217691Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def uniform_transition_matrix(p=0.01, N=24):\n", " \"\"\"Computes uniform transition matrix\n", "\n", " Notebook: C5/C5S3_ChordRec_HMM.ipynb\n", "\n", " Args:\n", " p (float): Self transition probability (Default value = 0.01)\n", " N (int): Column and row dimension (Default value = 24)\n", "\n", " Returns:\n", " A (np.ndarray): Output transition matrix\n", " \"\"\"\n", " off_diag_entries = (1-p) / (N-1) # rows should sum up to 1\n", " A = off_diag_entries * np.ones([N, N])\n", " np.fill_diagonal(A, p)\n", " return A\n", "\n", "fig, ax = plt.subplots(1, 2, gridspec_kw={'width_ratios': [1, 1], \n", " 'height_ratios': [1]}, \n", " figsize=(10, 3.8))\n", "\n", "p = 0.5\n", "A_uni = uniform_transition_matrix(p)\n", "plot_transition_matrix(A_uni, ax=[ax[0]], title='Uniform transition matrix (p=%0.2f)' % p)\n", "p = 0.9\n", "A_uni = uniform_transition_matrix(p)\n", "plot_transition_matrix(A_uni, ax=[ax[1]], title='Uniform transition matrix (p=%0.2f)' % p)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## HMM-Based Chord Recognition\n", "\n", "As discussed before, the free parameters of the HMM-based model can either be learned automatically from the training set or set manually using musical knowledge. Continuing with our Bach example, we now present an experiment that demonstrates the effect of applying HMMs to our chord recognition scenario. We use the following setting:\n", "\n", "* As observation sequence $O$, we use a sequence of chroma vectors.\n", "* As for the transition probability matrix $A$, we simply use a uniform transition matrix. \n", "* As for the initial state probability vector $C$, we use a uniform distribution.\n", "* As for the emission probability matrix $B$, we replace them by the likelihood matrix $B[O]$, which is a normalized version of the chord similarity matrix also used for the [template-based chord recognition](../C5/C5S2_ChordRec_Templates.html).\n", "* The frame-wise chord recognition results is given by the state sequence computed by the [Viterbi algorithm](../C5/C5S3_Viterbi.html). \n", "\n", "Using the likelihood matrix $B[O]$ instead of emission probabilities requires a small modification of the original algorithm. In the following code cell, we provide the implementation of this modification using a numerically stable log version. We then compare the HMM-based results with the [template-based approach](../C5/C5S2_ChordRec_Templates.html) showing the [evaluation results in the form of time–chord visualizations](../C5/C5S2_ChordRec_Eval.html), respectively." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:55:37.221795Z", "iopub.status.busy": "2024-02-15T08:55:37.221496Z", "iopub.status.idle": "2024-02-15T08:55:38.823009Z", "shell.execute_reply": "2024-02-15T08:55:38.822410Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/zal/dev/Python_FMP_notebooks/FMP/C5/../libfmp/c5/c5s2_chord_rec_template.py:337: MatplotlibDeprecationWarning: The 'cmap' parameter to Colorbar has no effect because it is overridden by the mappable; it is deprecated since 3.3 and will be removed two minor releases later.\n", " cbar = plt.colorbar(im, cmap=eval_cmap, norm=eval_norm, boundaries=eval_bounds, ticks=eval_ticks)\n", "/Users/zal/dev/Python_FMP_notebooks/FMP/C5/../libfmp/c5/c5s2_chord_rec_template.py:337: MatplotlibDeprecationWarning: The 'norm' parameter to Colorbar has no effect because it is overridden by the mappable; it is deprecated since 3.3 and will be removed two minor releases later.\n", " cbar = plt.colorbar(im, cmap=eval_cmap, norm=eval_norm, boundaries=eval_bounds, ticks=eval_ticks)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAD0CAYAAACRgoIFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA2M0lEQVR4nO3debwcZZn3/89XFkEiBCGASDCsGgxCSMAFgQQQMSyCCyNEhRH00RFRZ0BxeR7RRxExCj8dFZnoE1AUFwaHiCAiOQ4oCAkEQ0AwgTCyyL6dGLbk+v1x300qfbrP2n2qu/J9v17ndbqrqquuq7u6++57K0UEZmZmZpa8qOwAzMzMzDqJC0dmZmZmBS4cmZmZmRW4cGRmZmZW4MKRmZmZWYELR2ZmZmYFLhxVjKQ5kr5UdhztMpz8JP1B0uR2xWRmVkWSrpf0mrLjKEMlCkeSlkk6sG7ZcZKuqdvmWUmb1223UFJImpDvz8n3D6/b7uy8/LgmMRwnaaWk3vx3p6QPtypHGx5JhwFPRcRN+f5p+XV8V2GbdYvnwBD2fYqkWyQ9JekuSafUrZ8gaZ6kf0j6S4NzdJykH0t6XNJjki4YxDH3KZxjy3PcvYW/bSX1SHo6339Y0n9KevkQc5ueY39C0rIG69+YPzifkvRnSW8qrPtMXUwrJK2qf+81Oe6EBjndnNcV32NP5vfuoUPJK+/nBElL8n4ul7T1EB4b+XmvxfZ4Xj4tr/t23fbXNPvMGOA4H83n1JOS5hef3wEeV//8LZN06jCO3++5W7ftWEnnSXow/53WYJuP5XyWS7pN0s6DjGPE53JhX5+Q9Pd8Tv9A0ov72faw/N7ulfRHSbvUrd9e0q/y+f+wpDMHGcO0/F4ont9zOziXWcAXhxpfFVSicDQEdwFH1+5I2hXYsMF2dwDHFrZbF3gXsHSA/V8bEWMiYgzwTuBMraU1FpLWKTuG7EPAD+uWPQp8sQUxCngfsClwMHCipHcX1v8EuAnYDPgs8AtJ4wrr/xP4O/BKYAvSB1G/IuLqwjlW+0U3trYsIv4nLzsxb7MzMBY4a4i5LQd+AJxSv0LSy4BLgK/lfZ8JzJW0aY7x9EI8Y4CvAj0R8fAQjl/MabfC8mvzPscC3wd+luMZFEn7AacDbwNeRvpM+MkQ4gLYrRDb2MLy5cD7NMRCdoMYXwecQfoM2YSU58VDPF/H5ufpaOD/SDp4iGEMdO4WnQW8BJgA7AW8V9I/11ZKOgE4HjgEGAMcCgzlXKidyzvmxw/4Pqkn6S3AqcABOc7tgS802XYn4ALSZ8dYYC5wSf4eQNL6wG+Bq4CtgG2AHw0hnPuK74+IOKyDc7kEmD7cAmk3W9sKRz8kfZnVHAuc32C7ucDetQ970hffn0lfZIMSETcCtwETa8sk/bxQ2v9vFaorJc2QdGsuvd8r6eTCukOVfiU/nkv+ry2smyzpxvy4nwIbNItJ0g6SrpL0SP6FcIGksYX1yyR9OsfxmKT/J2mDvG6apHuUagUeztvOLDx2jqTvSvq1pOWkN9TE/MvvcUmLVaiNk3SIpJuUfhn/TXW/NiW9Kef6eF5/XGH1ppIuzTn/SdIOTfJdH9gf+H3dqsuBZ4H3NHuuBiMizoyIGyPi+Yi4HfgvYO987J2BPYDPR8SKiLgIWAS8I68/CBgPnBIRT0TEc7XarVaKiEeBi4BJQ3zc9RHxQ+DOBqvfCDwQET+PiJUR8SPgIeDt9RtKEvBe4LwhB99/fKtIhbcNSV8Og3UY8POIWBwRzwL/F9i32Tk0RI8Dc4DPj3A/E4DFEbEg0iUMzgc2JxWghyQirgUWM4TXf6Bzt4HDgDMj4h8RsYxUmHt/3teLSM/HJyLi1kiW5vNyqLk8DvwS2H2ojyV91n8/v+6PkV7345ps+xbg6oi4JiKeJxXuXwHsl9cfRyrgfCMilkfE0xHx52HENFyjlktEPA0sAA5qTyqda20rHF0HbJy/tNcB/onGJf6nSSXmWi3A+2hciGpK0p6kX+3zC4svA3YifcjdSCrR13wf+F8R8VLSB9lVeT97kL4E/hfpV9z3SCX/F+cv/1+SCn0vA35O8w8wSDUdXwG2JhXaxgOn1W0zk/SG2iHH/7nCuq1IH9KvIL1Bz5X0qsL6Y4AvAy8F/kQqZF6R8/0ocEFh++Wk53Us6RflhyUdkXPeNj9X3wLGkT4MFxaOczTpl9KmwJJ8zEZ2AlZFxD11ywP438DnJa1X/yBJp+ZCWcO/RgfKhYB9SF9EkGp17oyIpwqb3czq2p7XA7cD5+XC6g25VqOllJqy3kGqBRhWbo12m//qlzX6At4H2JJUQGuZ/Mv3BKAX+KtSc2LTvCQd0yT22u0hFR778WXgHXXvi1rMbxogxlrT2WXAOpJelz+n3k86/wf94ywfT5L2Jp1ztdf/z/0c/zv5oQOduw0PV3e79nxuk/8m5R85d0n6Qi40DYmkzUgF8CWFZccM8JxuW8jp5rp8tsz7bJRLfT7FnF4PLJN0Wf6h2KPUCjEiHZzLbcBurG0iouv/gGWkD8nHC3//AK6p2+ZA0pf9V0i1Qb8F1iV9WU7I280BvgS8CbiWVK39AOkX6jXAcU1iOA54Ph+7N+/zW4CabD82b7NJvv8/pALQxnXbfRf4v3XLbieV/PcF7iseA/gj8KVBPm9HADfVPUcfKtyfASzNt6fl/DYqrP8Z8L8Lz9v5hXX7kD7MX1RY9hPgtCaxnA2clW9/Gri4yXZzgNl1Mf6lybZ7A3+vW3Ya8KN8+0/Ah+vPgWGeg18gfUi9ON9/L3Bd3TZfBubk2+fmYx4PrEcqiD8ObD6EY07I+1i3bnkP6fx/HLiXVAgfN8y8DgSW1S3bLO/76Bz7scAq4HsNHv/9Ws5DzOnxwt/JDd5jD5N+7Bw4xHwOyI99Lek9/b0c+9GDfHwATxZi+2bh/XFPvn0m8NN8u+lnRj/HEPAZ4Lmc78PAnsN4/h4jfbGdNMTj93vuNtj+R6Qm4peSmr6WAs/kdW/M8VxK+sybQOq28IFBxlI7l5/I+1kIbDuM83gpcHDh/no0ec8Dryb9eJsGrE/6IbUK+HRef0V+bd6a159CqmFdfxBxTMv7Kp7fR3VyLvm1/8FQn/Nu/6tSzdERETG29gf8S5Ptfkiq4TiOfmqDIuIaUq3F54BfRcSK4vrcTFTrULdPXnxdPv4YUi3La0j9G5C0jqQzJC2V9CSpIAKpJgbSr/sZwN2Sfi/pDXn5K4F/q/t1P55U+7M1cG/kMzi7u1lOkraQdKFSs92TpA+1+k6yf6vbV7Gz6mMRsbyf9cXHbg38LVLzR3H7V+RYXqfU4fMhSU+Q2sRrsYyn//5dxV/Q/yD1Q2jkMdIHdjOfI/WnaNoUORiSTiTVgh0SEc/kxb3AxnWbbgzUfo2vIBU6vh+pSe1C0vO390hiKTgpn4uviIiZEfFQi/ZLRDxC6rPzr6QfDgcDVwJr1NBJ2pDUV284TWqbF97PxT4mtffY5hHx+oi4coix/47UzHMR6XxcRnpN6msX+7NHIbaTGqz/KvAWScP9tX0CqbboNaQvrPcAv9IQOo6Tnr9NI2JiRHxziMcf6NytdxLpfP4rqWn5J6x+Pmufm2dGxOORmt2+R/qsG6yTImITUoF2U1JN1FDV51S73SeniPgLqcD/78D9pM+lW1kzp2si4rJITbOzSD8YJtbvq4n7it9VEfGzDs/lpaRC3FqlSoWjQYmIu0mdMGeQfu3050fAv9GgEBURr4nVHequbrD+AdIHcK2z3TGkL5QDSbVRE/Jy5e1viIi3kZqgfkmqlYH0hfnlujfTSyLiJ6ST/RW5SadmW5r7CukXxmsjYmPSh25988j4un3dV7i/qaSN+llfLKTdB4yvqz7fllSTAfBjUtPl+PzBd04hlr+RmvVG6q+k1oVXNFoZEb8lVdGvUZBW39FWa/zVbft+cufIWLP5bjGwvaRi4Ww3Vje7/Zk1n69RMZTc+hMRv4+IPSPiZaSahlcB19dt9nZS5/eeliXQRG5Wa5qXCv3jIuLbEbFTRGxBeo+uC9zSqlhy4fFsUl+QYoz7DBBj7UfWbsDciLgjIlZFxOWk9/obRxpb3Y+6+r9z8mYDnbv1+T6aC+BbRcRrSN8rtXPhdlL/vhGf6xGxiFSr/+3aZ56kmQM8p7XPw8Ws2TS0G6nf3CNNjvWLiJgUEZuRCtOvBG7Iq9vy3u3gXCayZjPe2qHsqqtW/JGbzOqWHUeDZrV8ewdgar7dsFkt334ZqRpe+f5AzWrF421G+jVdq17/F1KV8MbARsB38nF3JP06nMnqJrbjyU0ZwFRSYeF1pMLDRqQ+Oi/Nj/sf4GM5j7eTqkgbNquRClz/AaxDqsH5A7kpoPAcLSL9MnsZcDVwel43jVTFPysfdx9Sde2r65+3fH99Uu3PqaRq32mkXza17R8Ejs2398r3a81d2+Ztj8p5bQbs3uQ404o5NMj5EuCYwv3TasfJ9/cmNVsMuVktv2Z/ByY2WX9dfr42AI4k/foaVzi3HiP9qluHNDLpUXKzWo6zZ4DjT6B5s9oJI3xPvSjH/VZSDcsGrFnVPjm/rhuTCgJ/aLCPK4AvNljeNLdmOTV6jw0zrw1I/S2Uz7Oe2jleOMayfh4fwI4Nlq9xHubn5WHgEYberHYsqelp+xznm0k1pLX3zrCevyHG0PTcbbDtDqT36Dr5fHkYeE1h/fnAr0ifWdsAfwGOr4u34Xuv/lwmfa7cC7xtiPkcTHqv7kKqfboKOKOf7afkfMYBPwV+XFj3qvx6HJi3+QTps279vH4OzZsg1zhPhvnajGYuLyZ9Lm09kpi78W+tqzkCiDRaYv4gtns0In4X+SwZhDcUfoHfRhrB89G87nzSl8y9pGrN6+oe+15Sx7gnSU1M78kxzAc+QKoWfYxU03FcXvcsqUB0XF73T/RfG/YF0iiUJ0h9ABpt+2PSl9qd+a844eLf83HuIw8PjVRt20eO7XBWf1h+B3hfYft/IQ2nfwr4P6yuKSPScPQZpFq7R0mFyuE2UXyP9Nw2FBF/oG+Nx2B9ifSlcEODX9+Q+hFNJT1nZwDvjNy8FWm0zuHAyaTX41TSB35tiPN4UuG1LPuSqtx/TSpErCCdFzWfJL2ufwNeTvoCfUGurdufxk3XZea2Aekc7yW97teS+mHUtCS2iHiS1Pdo0NMMFJwPXEgqGDwJfJM0WKP23hmN56/puVurAStsO4X0o+opUu30zIgo1jKdSHq+7yM93z8mDTKBlEvtc3FA+XPlm6z5mg3mcZeTXo95+Xh3UxhVmDskf6bwkP+PVCC8Pf//QGFft5M+n88hPT9vAw7PsdVyatvrM8q5HE4qiBdbCNYKGvz3vlWd0mR/J0SDfhySppFqXIbT3l8qpclAPxptGCrfLpIWkprqGlaVd7NOzk3SFcDHIuK2smNpppOfv6GS9DngoYj4XtmxtILSCOKbSV0Xnis7npGS9CdSLV/Lmp27hQtH9oKqFo7MzMyGYq1sVjMzMzNrxjVHZmZmZgWuOTIzMzMrWLfsANpl8803j3HjxrHRRhsNvHGXWr58eaXzg+rn6Py6W9Xzg+rn6Pz6WrBgwcMR0exCw20haTDNWL+JiKFeRHlYSi0cSVpJGgIqYCXp6st/bMW+J0yYwKxZs5g2bVordteRenp6Kp0fVD9H59fdqp4fVD9H59eXpKZXWihZ/RUd2qbsmqMVEbE7gKS3kObI2K/UiMzMzGyt1kl9jjYmTUKFpGn5+mI/k3SH0jXJZkq6XtIiSa24tISZmZlZH6WOVis0q21AmmV3/4hYkOfU+SXpmi6PkmZqnh0Rn5f0MWC7iPh4g/19EPggwJZbbjll9uzZjBnT7Jqk3a+3t7fS+UH1c3R+3a3q+UH1c3R+fU2fPn1BRExtU0gNDbLP0ajF1UnNam8Azpc0Ka+7ISLuz+uWsvrSBYuA6Y12FhHnAucCTJ06NcaMGeO25C5X9RydX3eren5Q/RydnzXSMc1qEXEtqbNVrYf8M4XVqwr3V1F+oc7MzMwqqmMKR5JeTboqcNdfL8jMzMy6V9k1MBvmiyhCGs5/bESslFRiSGZmZrY2a3vhSNKRwH8CEyPiL3WrfwZ8GjgC+HtEXAoQET1AT22jiJhWuL3GOjMzM7NWGo1mtaOBa4B3N1i3XUQsI81tdPUoxGJmZmbWr7YWjiSNAfYGjqdQOJJ0gaRbgVflZrWDgEslnZDXL5N0uqRrJc2XtIek30haKulD7YzZzMzM1m5tnedI0nuA6RFxvKQ/ki4PcmNedxQwHrgI+FpEvKvwuGXAVyPiu5LOAg4gFbI2ABZHxBZNjud5jiqm6jk6v+5W9fyg+jk6v748z1H7+xwdDZydb1+Y79+Y708GrgR2BRY2eOwl+f8iYExEPAU8JelpSWMj4vH6B3ieo+qpeo7Or7tVPT+ofo7OzxppW+FI0mbA/sCkXCJcBwhJPcCXge2AQ0nzGi2XdGBEFCd3LM5rVD/nUdmj7MzMzKyi2tnn6J3A+RHxyoiYEBHjgbuAJ4EpwC0RsSuwGJhcVzAyMzMzK0U7C0dHAxfXLbsIOIbUpHazpPWB9YADJEWeCNLMzMysNG1rnirOTVRY9s3C3fn5/76Sfsbq4f6nRcSEwmPmAHMK919YZ2ZmZtZqpV8+pNFwf0nTJP1e0s8k3SHpDEkzJV0vaZGkHUoN2szMzCqr9MIRaXbsyyPiDuBRSXvk5bsBHyONZnsvsHNE7AXMBj5aRqBmZmZWfW2d52hQAUiXAmdHxG8lnUSa++hS4LMR8ea8zX8Dn46IP0jaHzgpIo5osC/Pc1QxVc/R+XW3qucH1c/R+fXVjfMc5RHyv8t3twJWAg/l+7sBN5O6Et1Guo7rP/o7UKlD4psN9wd+Td/h+8Wh/Q3j9jxH1VP1HJ1fd6t6flD9HJ1fNUTEI8DuAJJOA3ojYla+3xsRtXUXAB8CvtHf/spuVms23P9NJcdlZmZm1XM1sONAG5VdOOpvuL+ZmZlZzeb5equ1vw8O5cGS1gXeSrryRr/a2qwmaUvgLOD1wGPAs8CZEXExpOH+knryrNlnABfm4f7FIf9rTAsQET1ATzvjNjMzs47z8DD7Qm2YL3IPqebo+wM9oJ2XDxHwS+C8iDgmL3slcHhhmw2BlRHxtKQ9gVPaFY+ZmZmtlVbU+hwNVjub1fYHno2Ic2oLIuLuiPgWgKR5pKqtSZIWkYbs3yBpRl7fK+mrkhZIulLSXrmW6U5Jhzc4npmZmdmItW0ofx6Wv11EfKKfbT4JLAUeAQ6JiFMK6wKYERGXSboY2Ag4BNiFVBu1e4P9eSh/xVQ9R+fX3aqeH1Q/R+fXVzcO5a/b12n0Ha02pCdh1IbyS/o2aRTasxGxZ148mdQBewawsO4hzwKX59uLgGci4rlcyzSh0TE8lL96qp6j8+tuVc8Pqp+j86ueiDit7v6QS7/tLBwtBt5RuxMRH5G0OTBf0gnAiaThdBOBbYEHJM2IiJn5Ic/F6mqtF+Y5iohVuce5mZmZWcu1s8/RVcAGkj5cWPYSgIiYDRwEXJWbx5ZExMRCwcjMzMysFG0rHOVanyOA/STdJel64DzgU3mTfYFrJI0H7m5XHGZmZmZD0dbmqYi4H3h3k3W/KMyDNEXSAgrzIBXbCFvRfmhmZmY2GKXNkF2YB+m/I2L7iJhCKkhtU1ZMZmZmZmV2bG44DxLwLUnHkZrk1gEmAV8H1gfeS+qYPSMiHh3tgM3MzKz62jbP0YAH7mcepFw4+hxpqP8GwBLgUxFxjqSzgLsj4uwGj/M8RxVT9RydX3eren5Q/RydX1/dPs9RK3TMkPjiPEjAt4F5EfEU8JSkJ4C5edNFwGsb7cPzHFVP1XN0ft2t6vlB9XN0ftZIaX2OSPMg7VG7ExEfAQ4AxuVFzxS2XVW4v4oOKtSZmZlZtZRZOGo6D5KZmZlZWdpeAyNpJakprOaIiFgWESHpCOBmSZ8i9S26lzQP0obtjsvMzMyskdFonlrR6CKx2ePAoog4QNIfgGkR8VxeN6e2UURMKNyeU1xnZmZm1kplznM0j1SjNClfTHZX4AZJM/L6XklflbRA0pWS9pLUI+lOSYeXFbeZmZlVW9uH8tc1q90VEUcW1n0SWAo8AhwSEacU1gVpPqPLJF0MbAQcAuwCnNeoNspD+aun6jk6v+5W9fyg+jk6v748lL/8ZrXJwEXADGBh3bpngcvz7UXAMxHxXK5lmtBoZx7KXz1Vz9H5dbeq5wfVz9H5WSOlDImXdAJwIrAjMBHYFnhA0oyImJk3ey5WV2u9MJQ/IlZJ8lB+MzMza4tS+hxFxGzgIOCqXKu0JCImFgpGZmZmZqUoc56jfYFrJI0H7i4xDjMzM7MXtL15KiIa9gSLiF/Ubkt6u6SFhdVHFB8XEacNZp9mZmbWfabsuCPzzzqr32102GGjFE3nXIajv07bZmZmZqOmUwpHfUg6DjgCWAeYBHwdWB94L6lz9oyIeLSs+MzMzKyaOqVwtGGhWa04F9Ik0nD/DYAlwKciYrKks4D3AWcXd1I3zxG9vb309PS0P/qSVD0/qH6Ozq+7VT0/qH6Ozs8a6ZTCUbNmtXkR8RTwlKQngLl5+SLgtfUbe56j6ql6js6vu1U9P6h+js7PGilztNpgPFO4vapwfxWdU7AzMzOzCun0wpGZmZnZqHLhyMzMzKyg9Kap2oVpCx2yL4yIMyJiDjCntl1ETCjcXmOdmZmZWauUXjjCcxyZmZlZB+nYZjVJyySdLulaSfMl7SHpN5KWSvpQ2fGZmZlZNWn1he9LCiA3qxUWfSUifippGfDViPhuntfoAGBv0pxHiyNiiwb7Ks5zNGX27NmMGVPdK4309vZWOj+ofo7Or7tVPT+ofo7Or6/p06cviIipbQqpoak77RSDuHzIqMXV6c1ql+T/i4AxhTmPnpY0NiIeL27seY6qp+o5Or/uVvX8oPo5Oj9rpGOb1bLivEb1cx51QsHOzMzMKqbTC0dmZmZmo6pthSNJKyUtlLRY0s2S/lVSo+NtlNc/JOkOSWe0KyYzMzOzgbSzaeqFvkSStgB+DGwCfL62gaQNgasi4gBJfwCmRcRz0P+8RsV1ZmZmZq00Ks1qEfEgaRTZiZIEIGkeqaP1JEmLgF2BGyTNyOt7JX1V0gJJV0raS1KPpDslHT4acZuZmdnap21D+SX1RsSYumWPAa+OiAfy/U8CS4FHgEMi4pTCtgHMiIjLJF0MbAQcAuwCnNdohJuH8ldP1XN0ft2t6vlB9XN0fn15KP/oj/hS3f3JwEXADGBh3bpngcvz7UXAMxHxXK5lmtBo5x7KXz1Vz9H5dbeq5wfVz9H5VUeDeROPIJUX5gGHR8TcvN2vgFkR0dNsX6NWOJK0PbASeFDSCcCJwI7ARGBb4AFJMyJiZn7Ic7G6WuuFofwRsUqSh/GbmZlZUZ95EyVNAO4BPgvMHeyORqXPkaRxwDnAv0cyGziI1Bl7d2BJREwsFIzMzMzMWuFm4AlJbx7sA9pZA7OhpIXAesDzwA+BbxTW7wtcI2k8cHcb47C1wdxB/yBoSIeX08d/1qxZTJ8+vZRjj4aR5BeHHppujPC1NbPK2FzS/ML9c3N3mppauQPgrog4srDuS/nvt4M5UNsKRxGxzgDrf5HbB48B1pN0M3AecHZErCp25o6I0+oeW93ec2ZmZtbIwwN0yG56ObKIuFoSkvYZzIHK7rsz4FxIZmZmZi3wZVLfo+cH2rBjLh9SPxeSpOMk/VLSXEl3SToxz7J9k6TrJL2s7JjNzMysO0TEFcCmwG4Dbdu2eY4Go7+5kIC3Ap8jDfffAFgCfCoizpF0FnB3RJxd91jPc1Qxg87xiSdGdJwFS5aM6PHDtc0223DPPfeUcuzRMJL8pmyySbqx444tjKi1/B7sfs6vr26d56hJmWIacHJEHJrvHw78FzC9I4byD0FxLqR5EfEU8JSkJ1g9DG8R8Nr6B3qeo+oZdI4j7LQ7/eSTR/T44Zo1axYnl3Ts0TCS/LqhQ7bfg93P+VVHo/7IuQDUU7h/CX3nXOyjY5rVYM25kPKiZwqrVxXur6IzC3ZmZmbW5TqmcFQ/F1LZ8ZiZmdnaqe21L5K2As4G9iTV/CwDPh4Rd5DmJHgMeIh07bR5wBfaHZNV0GGHjejhZZXHe3p6Sjv2aKh6fmZWTW2tOZIk4GKgJyJ2iIhdgM8AW8ILcyHdHhE7A9eTOlyvyuvmRMSJtX1FxISIeLjROjMzM7NWaXez2nTSNdLOqS2IiIV5MqYLJN0KvCrPaHkQcGm+7hqSlkk6XdK1kuZL2kPSbyQtlfShNsdtZmZma6l2N6tNAhY0WhERMyUdBYwHLgK+FhHvqtvsbxHxhjx0fw6wN2lY/2JS/yQzMzOzluq3cCRpLtC0w0BEjPSCVJOBK4FdgYUN1l+S/y8CxhSG9T8taWxEPF4Xb3GeI3p7e+np6RlhiJ2r6vlB9XN0ft2t6vlB9XN0ftbIQDVHs/L/twNbAT/K948mdaweyGLgnfULJc0ATge2Aw4FxgHLJR0YEcWrVBaH7tcP6+8Tu+c5qp6q5+j8ulvV84Pq5+j8rJF++xxFxO8j4vfA5Ij4p4iYm/+OAd40iP1fBbxY0gdqCyTtCSwHpgC3RMSupELU5LqCkZmZmdmoG2yH7HF5gkYAJG1Hqu3pV56v6Ejgzbkj9WLgNOA+UpPazZLWB9aLiCeHGryZmZlZqw22Q/bHgR5Jd+b7E8h9ewYSEfcBRzVZPT/Pg3SfpKWsOQ/ShMI+5pA6ZNfuT8DMzMysDQYsHEl6EbAJsBPpgrAAf4mIZ5o/anAK8yCdFxHvzst2J82DdMdI929mZmY2VAM2q+VJGU+MiGci4ub8N+KCUdZwHiRgHUm/l/QzSXdIOkPSTEnXS1okaYcWHd/MzMxsDYNtVvutpJOBn5I6UwMQEY+O8PhN50ECdgMmAo8CdwKzI2IvSR8DPkpq6luDh/JXT9VzdH7drer5QfVzdH7WyGALR+/P/z9SWBbA9g22bZUbIuJ+gNwf6Yq8fBGpxqkPD+Wvnqrn6Py6W9Xzg+rn6PyskUEVjiJiuzYdv+E8SFn9vEbFOY/afsFcMzMzWzsNaii/pPUknSTpF/nvREnrteD4zeZB2q8F+zYzMzMbssHOc/Rd0qSN38l/U/KyERlgHiQzMzOzUTfY5qk9I2K3wv2rJN3cigD6mQfpPwq39wFm56H/K4ETW3FsMzMz6wAPPQTnnlt2FC8YbM3RyuLw+Txb9sr2hNTQiojYPRfQPg18ZRSPbWZmZmuRwdYcnQLMyzNkC3gl8M9ti6p/GwOPlXRsMzMzqzilbj+D2FB6MfAqUuGoJTNkD5aklaQh/BsALwf2j4g+8yPVzXM0Zfbs2YwZM2a0whx1vb29lc4Pqp+j8+tuVc8Pqp+j8+tr+vTpCyJiaptCamjq2LExf999+91Gc+eOWlxDGRI/hXRNtXWB3SQREee3Jaq+VkTE7gCS3gCcL2lS1JXsPM9R9VQ9R+fX3aqeH1Q/R+dnjQyqcCTph8AOwEJW9zUKYLQKRy+IiGslbQ6MAx4c7eObmZlZtQ225mgqsEt9TU0ZJL0aWAd4pOxYzMzMrHoGO1rtFmCrdgYi6UhJkQs/9V4i6VZJ9wK/AY6NiNEcLWdmZmZriX5rjiTNJTWfvRS4VdL1FC7rERGHtzCWo4FrgHeTJoIsuj4iXi/pYuDEiLi3hcc1MzMze8FAzWqXAFsCV9ct3w9oWQFF0hhgb9IFZS8hF44kXQBMBl4uaSGwE3CppH+PiNmtOr6ZmZlZzUCFo7cBn4mIPxcXSloOfB74foviOAK4PCLukPSopD0i4saImCnpKGA8cBHwtYh4V4uOaWZmZtbHQIWjCfUFI4CImC9pQgvjOBo4O9++MN+/Md+fDFwJ7EoaLddU3TxH9Pb20tPT08IwO0vV84Pq5+j8ulvV84Pq5+j8rJGBCkcb9LNuw1YEIGkzYH9gkqQgjUQLST3Al4HtgENJQ/eXSzowIqY32pfnOaqequfo/Lpb1fOD6ufo/KyRgUar3SDpA/ULJR0P9JmhepjeCZwfEa+MiAkRMR64C3iSNPHkLRGxK7AYmNysYGRmZmbWCgPVHH0cuFjSTFYXhqYC6wNHtiiGo4Ez6pZdBBwDrABulrQ+sF5EPNmiY5qZmZk11G/hKCIeAN4oaTowKS++NCKualUAETGtwbJvFu7OB5B0Vm52mxgRf2nV8c3MzMyKBjVDdkTMA+a1OZaB9DcPkpmZmVlLDHaG7FIV5kE6nlQ4MjMzM2sLdcDl0gYk6T3A9Ig4XtIfSbNk39hgu+JQ/imzZ89mzJgxoxzt6Ont7a10flD9HJ1fd6t6flD9HJ1fX9OnT18QEVPbFFJDU8eOjfn77tvvNpo7d9TiGuyFZ8vW3zxIL/BQ/uqpeo7Or7tVPT+ofo7OrzokrQQWFRYdAUwA/gu4kzQ90YUR8YWB9tXxhaN+5kH6ZHRDtZeZmZmNhhURsXtxQZ6w+uqIOFTSRsBCSb+KiH6nI+qGPkfN5kF6U8lxmZmZWZeIiOWkaYl2GGjbbigcHQ1cXLesNg+SmZmZrR02lzS/8PfBuvUbSlqY/+rLDbWWqNeTJpXuV+nNapK2BM4iBfwY8CxwZkRcDGkeJEk9+XIiZ5DaC7/ZbH9mZmZWSQ8P0CG7T7Nato+km4BVwBkR0dmFI0kCfgmcFxHH5GWvBA4vbLMhsDIinpa0J3BKGbGamZlZV7o6Ig4dygPKblbbH3g2Is6pLYiIuyPiWwCS5pF6nk+StAjYlXS9txmlRGtmZmaVV3az2mtoMCS/JiKmS/oksBR4BDgkIprWHNXNc0Rvby89PT2tjbiDVD0/qH6Ozq+7VT0/qH6Ozs8aKbtwtAZJ3yaNQns2IvbMiyeTOmDPABb293jPc1Q9Vc/R+XW3qucH1c/R+VVHRPSZ7TIieoCeoe6r7MLRYuAdtTsR8RFJmwPzJZ0AnAjsCEwEtgUekDQjImaWEq2ZmZlVXtl9jq4CNpD04cKylwBExGzgIOCq3Pt8SURMdMHIzMzM2qnUwlGe4foIYD9Jd0m6HjgP+FTeZF/gGkmTga0k3SlpgaRrJR1ZTtRmNirmzoW5c5HUsX8LFiwoPYZOztGsW5XdrEZE3A+8u8m6Xyi9w/4InF4b1aa64f5mZmZmrVJ64WgQGg73B75VXkhmZmZWVer0a7dKOgnYLiI+MYhti0P5p8yePZsxY/p0Xq+M3t7eSucH1c/R+fXjiScAWLBkSQsjaq1tttmGe+65p+ww2mokOU6ZMqXF0bSe34N9TZ8+fcEAM1G33NSxY2P+vvv2u43mzh21uLqh5mgNTYb7Ax7KX0VVz9H59WPuXACmn3xy6wJqsVmzZnFyB8fXCiPJsdN/fIPfg9ZY2aPVBmMxsEftTkR8BDgAGFdaRGZmZlZZ3VA4ajrc38zMzKzVOr5ZLSJC0hHAWUqXEnkIWM7q4f5mVkWHHQZ0dtNMT09PR8fXCmtDjmb1OqZwJGkl6SKzNUdExDJIw/0lbUWaKfsM4MKIuG70ozQzM7Oq65jCEbAiz4Tdh6QNgZUR8bSkPYGmF581MzMzG4mO73MkaR6pRmmSpEXArsANkmaUG5mZmZlVUcfMc1TXrHZXRBxZWPdJYCnwCHBIRDSsOfI8R9VT9RydX3eren5Q/RydX1+e56hLmtWAycBFwAxgYbMdeJ6j6ql6js6vu1U9P6h+js7PGumkwlEfkk4ATgR2JHXG3hZ4QNKMiJhZanBmZmZWSR3d5ygiZgMHAVflWqUlETHRBSMzMzNrl46uOcr2Ba6RNB64u+xgzMzMrMV23BEuuaT/baTRiYUOKhxFRMMeYxHxC1jdYVvSwrzqhXmQzMzMzFqlYwpHg9Bfh20zMzOzlujoPkdmZmZmo61j5jkaSH/zIBW28TxHFVP1HJ1fd6t6flD9HJ1fX6XMczR1asyfP7/fbSStlfMcDWTAZjXPc1Q9Vc/R+XW3qucH1c/R+VkjblYzMzMzK3DhyMzMzKygm5rVNioM4we4MCLOKCsYMzMzq6ZuKhwt91B+MzMzazc3q5mZmZkVdOtQfoCvRMRP67bxUP6KqXqOzq+7VT0/qH6Ozq8vD+XvrmY1D+WvszYM0ax6js6vu1U9P6h+js7PGnGzmpmZmVmBC0dmZmZmBd3UrLZh3VD+yyPi1LKCMTMzs2oqvXBU6Gi9HvA8cB5wdkSsqtv0auBg4AzSHEfXjWqgZmZmtlbohGa1FRGxe0S8BngzMAP4fHEDSRsCKyPiaWBPYMHoh2lmZmZrg04oHL0gIh4kDcU/UZIAJM0j1SxNkrQI2BW4QdKM8iI1MzOzqip9niNJvRExpm7ZY8CrI+KBfP+TwFLgEeCQiDilyb48z1HFVD1H59fdqp4fVD9H59eX5znqgD5HTaju/mTgIlKT28JmD/I8R9VT9RydX3eren5Q/RydXzVI2gz4Xb67FbASeCjf3w34RkT8W972ZGBMRJzWbH8dVziStD0pqQclnQCcCOwITAS2BR6QNCMiZpYYppmZmXWIiHgE2B1A0mlAb0TMyvefBt4u6SsR8fBg9tdRfY4kjQPOAf49ktnAQcBVeXbsJREx0QUjMzMzG6TnSa1KnxjsAzqhcLShpIWSFgNXAlcAXyisvx+YKul2YGdJ/yqpE+I2MzOz0bO5pPmFvw8O4bHfBmZK2mQwG5ferBYR6wywyYqI2BpA0hbAj4FNqBvub2ZmZpX28HA7ZEfEk5LOB04CVgy0fVfVwDQa6m9mZmY2CGcDxwMbDbRhVxWOACLiTlLcW5Qdi5mZmXWHiHgU+BmpgNSv0pvVhqlhrVHdPEf09vbS09MzmnGNqqrnB9XP0fl1t6rnB9XP0fmtdb5OGgXfr64rHBWH+tev8zxH1VP1HJ1fd6t6flD9HJ1f9dTPX1ScaDpPLv2SgfbRVc1q9UP9y47HzMzMqqcbao42lLQQWI80V8EPgW+UGpGZmZlVVkfUHEnaStKFkpZKulXSryXtDC8M9b8NOAT4f8A9EbGqzHjNzMysukovHOUh+RcDPRGxQ0TsAnwG2LKw2XYRsQzYD7h69KM0MzOztUXphSNgOvBcRJxTWxARCyPiakkXSLoVeFVuWjsIuDRfc83MzMys5VR2v2ZJJ5Fqhhpe80TSUcB44CLgaxHxrn72VRzKP2X27NmMGTOm2eZdr7e3t9L5QfVzdH7drer5QfVzdH59TZ8+fcFwZ6IerqlTp8b8+fP73UbSqMXVDR2yJ5OuubYrsLC/DT2Uv3qqnqPz625Vzw+qn6Pzs0Y6oXC0GHhn/UJJM4DTge2AQ4FxwHJJB0bE9NEN0czMzNYWndDn6CrgxZI+UFsgaU9gOTAFuCUidiUVoia7YGRmZmbtVHrNUUSEpCOBsyWdCjwNLAM+TmpSu1nS+sB6EfHkoHe8ZAksWYKmV7csNWvWLKZXOD8YfI5x6KEjO9DcuSN7vJn10Q3XB6/652jV82uX0gtHABFxH3BUk9XzIXXMlnQhsCfwDLkAFRF3jEqQZmZmtlbohGa1AQ1yLiQzMzOzEeuImqNBaDgXUnnhmJmZWVWVPs/RYAw0F1Jhu9XzHG266ZTZ557L7XffPRohlmKbbbbhnnvuKTuMthpsjlM22WRkB9pxx5E9fpg8x0p3q3p+MLIcFyxY0OJoWq/qn6PDye/kk0/2PEejcZDRssY8R2PHxpjHH+fkk08uOar2mTVrVqXzg8Hn2K0dsqs+B4nz634jybEbOgJX/XO06vm1S1f0OSIN459SdhBmZmZWfd1SOGo4F5Kk/UqMyczMzCqoK/ocAUjaGjibVIP0wlxIEfHXJts/RJpI8uFRCrEMm1Pt/KD6OTq/7lb1/KD6OTq/vl4ZEePaEUwzki4nxdqfhyPi4FGJp1sKR8Mhaf5odyobTVXPD6qfo/PrblXPD6qfo/OzRrqlWc3MzMxsVLhwZGZmZlZQ9cLRuWUH0GZVzw+qn6Pz625Vzw+qn6Pzsz4q3efIzMzMbKiqXnNkZmZmNiQuHJmZmZkVVLZwJOlgSbdLWiLp1LLjGSlJ4yXNk3SbpMWSPpaXnybpXkkL89+MsmMdLknLJC3KeczPy14m6beS/pr/b1p2nMMh6VWF12ihpCclfbzbXz9JP5D0oKRbCsuavmaSPp3fk7dLeks5UQ9ek/y+Jukvkv4s6WJJY/PyCZJWFF7Lc5ruuEM0ya/pOdltrx80zfGnhfyWSVqYl3fVa9jP90Jl3oNlqWSfI0nrAHcAbwbuAW4Ajo6IW0sNbAQkvRx4eUTcKOmlwALgCOAooDciZpUZXytIWgZMjYiHC8vOBB6NiDNyIXfTiPhUWTG2Qj4/7wVeB/wzXfz6SdoX6AXOj4hJeVnD10zSLsBPgL2ArYErgZ0jYmVJ4Q+oSX4HAVdFxPOSvgqQ85sA/Kq2XTdokt9pNDgnu/H1g8Y51q3/OvBERHyx217Dfr4XjqMi78GyVLXmaC9gSUTcGRHPAhcCbys5phGJiPsj4sZ8+yngNuAV5UY1Kt4GnJdvn0d643e7A4ClEXF32YGMVET8N/Bo3eJmr9nbgAsj4pmIuAtYQnqvdqxG+UXEFRHxfL57HbDNqAfWIk1ev2a67vWD/nOUJNIPzJ+MalAt0s/3QmXeg2WpauHoFcDfCvfvoUIFifzrZjLwp7zoxFzF/4NubXbKArhC0gJJH8zLtoyI+yF9EABblBZd67ybNT+Mq/L61TR7zar4vnw/cFnh/naSbpL0e0n7lBVUCzQ6J6v4+u0DPFB3GaqufA3rvhfWpvdgW1S1cKQGyyrRfihpDHAR6bpyTwLfBXYAdgfuB75eXnQjtndE7AG8FfhIrg6vFEnrA4cDP8+LqvT6DaRS70tJnwWeBy7Ii+4Hto2IycC/Aj+WtHFZ8Y1As3OyUq9fdjRr/lDpytewwfdC000bLOv217Atqlo4ugcYX7i/DXBfSbG0jKT1SG+ACyLiPwEi4oGIWBkRq4D/oIurSCPivvz/QeBiUi4P5Hb1Wvv6g+VF2BJvBW6MiAegWq9fQbPXrDLvS0nHAocCMyN33MxNFY/k2wuApcDO5UU5PP2ck5V5/QAkrQu8HfhpbVk3voaNvhdYC96D7VbVwtENwE6Stsu/1N8NXFJyTCOS28a/D9wWEd8oLH95YbMjgVvqH9sNJG2UOxQiaSPgIFIulwDH5s2OBf6rnAhbZo1fqlV5/eo0e80uAd4t6cWStgN2Aq4vIb4RkXQw8Cng8Ij4R2H5uNzZHknbk/K7s5woh6+fc7ISr1/BgcBfIuKe2oJuew2bfS9Q8ffgqIiISv4BM0gj1pYCny07nhbk8yZS9eefgYX5bwbwQ2BRXn4JaeRC6fEOI7/tgZvz3+LaawZsBvwO+Gv+/7KyYx1Bji8BHgE2KSzr6tePVNC7H3iO9Kv0+P5eM+Cz+T15O/DWsuMfZn5LSP02au/Dc/K278jn7s3AjcBhZcc/zPyanpPd9vo1yzEvnwN8qG7brnoN+/leqMx7sKy/Sg7lNzMzMxuuqjarmZmZmQ2LC0dmZmZmBS4cmZmZmRW4cGRmZmZW4MKRmZmZWYELR2ZrCUmbFa42/netvvJ6r6TvtOmYH5f0vnz71fl4N0naoR3HG0JcF0raqcwYzKxzeSi/2Vqo2ZXXW3yMdUlzxewR6Qr2pwIbRsTn67YT6bNoVbtiaRDbfsB7IuIDo3VMM+serjkyW8tJmibpV/n2aZLOk3SFpGWS3i7pTEmLJF2eL1WApCn5wpwLJP2mblblmv1Jl0p5XtIM4OPACZLmSZog6bZcY3UjMF7SdyXNl7RY0hcK8S2TdLqka/P6PfIxl0r6UGG7UyTdkC+Y+oW8bCNJl0q6WdItkv4pb341cGAuwJmZrcGFIzOrtwNwCPA24EfAvIjYFVgBHJILSN8C3hkRU4AfAF9usJ+9gQUAEfFr4BzgrIiYnte/Cjg/IiZHxN2kWdGnAq8F9pP02sK+/hYRbyAVauYA7wReD3wRQNJBpEsh7EW6YOqUfOHig4H7ImK3iJgEXJ7jWUWa6Xq3kTxRZlZN/tVkZvUui4jnJC0C1iEXKEiXlJhAKtRMAn6bWsRYh3R5hnovB27r5zh3R8R1hftHSfog6XPp5cAupMsiwOprIy4CxkTEU8BTkp6WNJZ0Lb6DgJvydmNIhaWrgVmSvgr8KiKuLhzvQWBrcgHOzKzGhSMzq/cMpNoVSc/F6o6Jq0ifGQIW55qc/qwANuhn/fLajXwRzJOBPSPiMUlz6h77TCGGZwrLizF9JSK+V38QSVNI15v6iqQrIuKLedUGOUYzszW4Wc3Mhup2YJykNwBIWk/Saxpsdxuw4yD3uTGpsPSEpC2Btw4xpt8A75c0Jsf0CklbSNoa+EdE/AiYBexReMzOpIuMmpmtwTVHZjYkEfGspHcC35S0Celz5Gz6FjQuI13hfTD7vFnSTXkfdwJ/GGJMV0iaCFybm/p6gfeQCmdfk7SKdFX2DwPkAtiKiGjUHGhmazkP5TeztpF0MfDJiPhr2bEUSfoE8GREfL/sWMys87hZzcza6VRS5+pO8zhwXtlBmFlncs2RmZmZWYFrjszMzMwKXDgyMzMzK3DhyMzMzKzAhSMzMzOzAheOzMzMzAr+f7lHHWs2XyNxAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "@jit(nopython=True)\n", "def viterbi_log_likelihood(A, C, B_O):\n", " \"\"\"Viterbi algorithm (log variant) for solving the uncovering problem\n", "\n", " Notebook: C5/C5S3_Viterbi.ipynb\n", "\n", " Args:\n", " A (np.ndarray): State transition probability matrix of dimension I x I\n", " C (np.ndarray): Initial state distribution of dimension I\n", " B_O (np.ndarray): Likelihood matrix of dimension I x N\n", "\n", " Returns:\n", " S_opt (np.ndarray): Optimal state sequence of length N\n", " S_mat (np.ndarray): Binary matrix representation of optimal state sequence\n", " D_log (np.ndarray): Accumulated log probability matrix\n", " E (np.ndarray): Backtracking matrix\n", " \"\"\"\n", " I = A.shape[0] # Number of states\n", " N = B_O.shape[1] # Length of observation sequence\n", " tiny = np.finfo(0.).tiny\n", " A_log = np.log(A + tiny)\n", " C_log = np.log(C + tiny)\n", " B_O_log = np.log(B_O + tiny)\n", "\n", " # Initialize D and E matrices\n", " D_log = np.zeros((I, N))\n", " E = np.zeros((I, N-1)).astype(np.int32)\n", " D_log[:, 0] = C_log + B_O_log[:, 0]\n", "\n", " # Compute D and E in a nested loop\n", " for n in range(1, N):\n", " for i in range(I):\n", " temp_sum = A_log[:, i] + D_log[:, n-1]\n", " D_log[i, n] = np.max(temp_sum) + B_O_log[i, n]\n", " E[i, n-1] = np.argmax(temp_sum)\n", "\n", " # Backtracking\n", " S_opt = np.zeros(N).astype(np.int32)\n", " S_opt[-1] = np.argmax(D_log[:, -1])\n", " for n in range(N-2, -1, -1):\n", " S_opt[n] = E[int(S_opt[n+1]), n]\n", "\n", " # Matrix representation of result\n", " S_mat = np.zeros((I, N)).astype(np.int32)\n", " for n in range(N):\n", " S_mat[S_opt[n], n] = 1\n", "\n", " return S_mat, S_opt, D_log, E\n", "\n", "A = uniform_transition_matrix(p=0.5)\n", "C = 1 / 24 * np.ones((1, 24))\n", "B_O = chord_sim\n", "chord_HMM, _, _, _ = viterbi_log_likelihood(A, C, B_O)\n", "\n", "P, R, F, TP, FP, FN = libfmp.c5.compute_eval_measures(ann_matrix, chord_HMM)\n", "title = 'HMM-Based approach (N=%d, TP=%d, FP=%d, FN=%d, P=%.2f, R=%.2f, F=%.2f)' % (N_X, TP, FP, FN, P, R, F)\n", "fig, ax, im = libfmp.c5.plot_matrix_chord_eval(ann_matrix, chord_HMM, Fs=1, \n", " title=title, ylabel='Chord', xlabel='Time (frames)', chord_labels=chord_labels)\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "P, R, F, TP, FP, FN = libfmp.c5.compute_eval_measures(ann_matrix, chord_max)\n", "title = 'Template-based approach (N=%d, TP=%d, FP=%d, FN=%d, P=%.2f, R=%.2f, F=%.2f)' %\\\n", " (N_X, TP, FP, FN, P, R, F)\n", "fig, ax, im = libfmp.c5.plot_matrix_chord_eval(ann_matrix, chord_max, Fs=1, \n", " title=title, ylabel='Chord', xlabel='Time (frames)', chord_labels=chord_labels)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example, the HMM-based chord recognizer clearly outperforms the template-based approach. The improvements in HMM-based approach come specifically from the **transition model** that introduces context-sensitive smoothing. In the case of **high self-transition probabilities**, a chord recognizer tends to stay in the current chord rather than change to another one, which can be regarded as a kind of smoothing. This effect is also demonstrated in our Bach example, where the broken chords cause many [chord ambiguities](../C5/C5S2_ChordRec_Eval.html) of short duration. This leads to many random-like chord changes when using a simple template-based chord recognizer. Using an HMM-based approach, chord changes are only performed when the relatively low transition probabilities are compensated by a substantial increase of emission probabilities. Consequently, only the dominant chord changes remain." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prefiltering vs. Postfiltering\n", "\n", "In the [FMP notebook on chord recognition evaluation](../C5/C5S2_ChordRec_Eval.html), we showed for the Bach example that one may achieve similar improvements by applying a longer window size when computing the input chromagram. Applying longer window sizes more or less amounts to temporal smoothing of the observation sequence. Since this smoothing is performed **prior** to the pattern matching step, we also call this strategy **prefiltering**. Note that such a prefiltering step not only smoothes out noise-like frames, but also washes out characteristic chroma information and blurs transitions. As opposed to prefiltering, the HMM-based approach leaves the feature representation untouched. Furthermore, the smoothing is performed in combination with the pattern matching step. For this reason, we also call this approach **postfiltering**. As a result, the original chroma information is preserved and transitions in the feature representation are kept sharp. \n", "\n", "\"FMP_C5_F13\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Further Notes\n", "\n", "In this notebook, we introduced a basic HMM-based approach for chord recognition. In our simplistic model, we used $24$ states that correspond to the $12$ major and $12$ minor triads and fixed the HMM parameters explicitly using musical knowledge. \n", "\n", "* In the application to chord labeling, the HMM was then used to uncover the most likely chord labeling sequence that generates a given sequence of chroma features—an idea originally introduced by [Sheh and Ellis](https://www.ee.columbia.edu/~dpwe/pubs/ismir03-chords.pdf). \n", "\n", "* In general, there is a delicate interplay of the various feature extraction, filtering, and pattern matching components composing a chord recognition system. In this context, we refer to the excellent overview paper [On the Relative Importance of Individual Components of Chord Recognition Systems](https://ieeexplore.ieee.org/document/6691936) by Cho and Bello. \n", "\n", "* In the article [Analyzing Chroma Feature Types for Automated Chord Recognition](https://secure.aes.org/forum/pubs/conferences/?elib=15943) by Jiang et al., the importance of the input representation is investigated.\n", "\n", "In this book, we have only considered a basic HMM variant. There are many more variants and extensions of HMMs including continuous HMMs and HMMs with specific state transition topologies. Rather than fixing the model parameters manually, the power of general HMMs is to automatically learn the free parameters based on training examples (e.g., using the [Baum-Welch Algorithm](../C5/C5S3_HiddenMarkovModel.html)). The estimation of the model parameters can become very intricate, leading to challenging and deep mathematical problems. For an excellent textbook on the classical theory of HMMs, including the discrete as well as the continuous case, we refer to the excellent book on [Hidden Markov Models for Speech Recognition](https://dl.acm.org/doi/book/10.5555/575447) by Huang et al. (1990). We close this notebook with an overview of a typical HMM-based chord recognition approach consisting of a training and an evaluation stage.\n", "\n", "\"FMP_C5_F33.png\"\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Acknowledgment: This notebook was created by Meinard Müller and Christof Weiß.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
\"C0\"\"C1\"\"C2\"\"C3\"\"C4\"\"C5\"\"C6\"\"C7\"\"C8\"
" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.16" } }, "nbformat": 4, "nbformat_minor": 1 }