changeset 94:19f3b33a19fb matthiasm-plugin

corrected viterbi frame initialisation
author matthiasm
date Thu, 02 Dec 2010 23:39:57 +0900
parents 12cdf228c47d
children dab7e7bfeba1
files nnls-chroma.n3 viterbi.cpp
diffstat 2 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/nnls-chroma.n3	Thu Dec 02 23:11:27 2010 +0900
+++ b/nnls-chroma.n3	Thu Dec 02 23:39:57 2010 +0900
@@ -299,6 +299,17 @@
     vamp:bin_names        ( "A  (bass)" "Bb (bass)" "B  (bass)" "C  (bass)" "C# (bass)" "D  (bass)" "Eb (bass)" "E  (bass)" "F  (bass)" "F# (bass)" "G  (bass)" "Ab (bass)" "A" "Bb" "B" "C" "C#" "D" "Eb" "E" "F" "F#" "G" "Ab");
     vamp:computes_signal_type  af:Chromagram ;
     .
+
+plugbase:nnls-chroma_output_consonance a  vamp:DenseOutput ;
+    vamp:identifier       "consonance" ;
+    dc:title              "Consonance estimate." ;
+    dc:description        """A simple consonance value based on the convolution of a consonance profile with the semitone spectrum."""  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:unit             "" ;
+    vamp:bin_count        1 ; 
+    vamp:computes_signal_type  af:TonalChangeDetectionFunction;
+    .
+
 plugbase:tuning a   vamp:Plugin ;
     dc:title              "Tuning" ;
     vamp:name             "Tuning" ;
--- a/viterbi.cpp	Thu Dec 02 23:11:27 2010 +0900
+++ b/viterbi.cpp	Thu Dec 02 23:39:57 2010 +0900
@@ -12,11 +12,6 @@
     if (trans[0].size() != nState || trans.size() != nState || obs[0].size() != nState) {
         cerr << "ERROR: matrix sizes inconsistent." << endl;
     }
-    
-    for (int iState = 0; iState < nState; ++iState) delta[iState] = init[iState];
-    for (int iFrame = 1; iFrame < nFrame; ++iFrame) {
-        for (int iState = 0; iState < nState; ++iState) delta[iFrame*nState + iState];
-    }
         
     // vector<vector<double> > delta; // "matrix" of conditional probabilities    
     vector<vector<int> > psi; //  "matrix" of remembered indices of the best transitions
@@ -28,7 +23,7 @@
     /* initialise first frame */
     // delta.push_back(init);    
     for (int iState = 0; iState < nState; ++iState) {
-        delta[iState] *= obs[0][iState];
+        delta[iState] = init[iState] * obs[0][iState];
         deltasum += delta[iState];
     }
     for (int iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale)