Mercurial > hg > silvet
comparison src/EM.cpp @ 53:9e2d1f6cd43a
Fix incorrect normalisation of source activation matrix
author | Chris Cannam |
---|---|
date | Mon, 07 Apr 2014 17:34:19 +0100 |
parents | 9b17bbd16a5f |
children | a54df67e607e |
comparison
equal
deleted
inserted
replaced
51:782ca0d9ff3e | 53:9e2d1f6cd43a |
---|---|
45 for (int n = 0; n < m_notes; ++n) { | 45 for (int n = 0; n < m_notes; ++n) { |
46 m_pitches[n] = drand48(); | 46 m_pitches[n] = drand48(); |
47 } | 47 } |
48 | 48 |
49 m_sources = Grid(m_instruments); | 49 m_sources = Grid(m_instruments); |
50 | |
51 for (int i = 0; i < m_instruments; ++i) { | 50 for (int i = 0; i < m_instruments; ++i) { |
52 m_sources[i] = V(m_notes); | 51 m_sources[i] = V(m_notes); |
53 for (int n = 0; n < m_notes; ++n) { | 52 for (int n = 0; n < m_notes; ++n) { |
54 m_sources[i][n] = (inRange(i, n) ? 1.0 : 0.0); | 53 m_sources[i][n] = (inRange(i, n) ? 1.0 : 0.0); |
55 } | 54 } |
77 for (int i = 0; i < (int)column.size(); ++i) { | 76 for (int i = 0; i < (int)column.size(); ++i) { |
78 sum += column[i]; | 77 sum += column[i]; |
79 } | 78 } |
80 for (int i = 0; i < (int)column.size(); ++i) { | 79 for (int i = 0; i < (int)column.size(); ++i) { |
81 column[i] /= sum; | 80 column[i] /= sum; |
81 } | |
82 } | |
83 | |
84 void | |
85 EM::normaliseSources(Grid &sources) | |
86 { | |
87 V denominators(sources[0].size()); | |
88 | |
89 for (int i = 0; i < (int)sources.size(); ++i) { | |
90 for (int j = 0; j < (int)sources[i].size(); ++j) { | |
91 denominators[j] += sources[i][j]; | |
92 } | |
93 } | |
94 | |
95 for (int i = 0; i < (int)sources.size(); ++i) { | |
96 for (int j = 0; j < (int)sources[i].size(); ++j) { | |
97 sources[i][j] /= denominators[j]; | |
98 } | |
82 } | 99 } |
83 } | 100 } |
84 | 101 |
85 void | 102 void |
86 EM::iterate(V column) | 103 EM::iterate(V column) |
153 } | 170 } |
154 if (m_sourceSparsity != 1.0) { | 171 if (m_sourceSparsity != 1.0) { |
155 newSources[i][n] = pow(newSources[i][n], m_sourceSparsity); | 172 newSources[i][n] = pow(newSources[i][n], m_sourceSparsity); |
156 } | 173 } |
157 } | 174 } |
158 normalise(newSources[i]); | 175 } |
159 } | 176 normaliseSources(newSources); |
160 | 177 |
161 m_pitches = newPitches; | 178 m_pitches = newPitches; |
162 m_sources = newSources; | 179 m_sources = newSources; |
163 } | 180 } |
164 | 181 |