annotate src/EM.h @ 101:2290f73923f7 bqvec

Some results and a question...
author Chris Cannam
date Tue, 06 May 2014 15:09:16 +0100
parents 8259193b3b16
children 2169e7a448c5
rev   line source
Chris@34 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@34 2
Chris@34 3 /*
Chris@34 4 Silvet
Chris@34 5
Chris@34 6 A Vamp plugin for note transcription.
Chris@34 7 Centre for Digital Music, Queen Mary University of London.
Chris@34 8
Chris@34 9 This program is free software; you can redistribute it and/or
Chris@34 10 modify it under the terms of the GNU General Public License as
Chris@34 11 published by the Free Software Foundation; either version 2 of the
Chris@34 12 License, or (at your option) any later version. See the file
Chris@34 13 COPYING included with this distribution for more information.
Chris@34 14 */
Chris@34 15
Chris@34 16 #ifndef SILVET_EM_H
Chris@34 17 #define SILVET_EM_H
Chris@34 18
Chris@34 19 #include <vector>
Chris@34 20
Chris@34 21 class EM
Chris@34 22 {
Chris@34 23 public:
Chris@34 24 EM();
Chris@34 25 ~EM();
Chris@34 26
Chris@91 27 int getBinCount() const { return m_binCount; } // size of input column
Chris@91 28 int getNoteCount() const { return m_noteCount; } // size of pitch column
Chris@91 29 int getSourceCount() const { return m_sourceCount; }
Chris@34 30
Chris@92 31 void iterate(const double *column);
Chris@91 32
Chris@91 33 const double *getEstimate() const { // bin count
Chris@38 34 return m_estimate;
Chris@38 35 }
Chris@91 36 const double *getPitchDistribution() const { // note count
Chris@38 37 return m_pitches;
Chris@38 38 }
Chris@92 39 const double *const *getSources() const { // source count * note count
Chris@38 40 return m_sources;
Chris@38 41 }
Chris@38 42
Chris@34 43 private:
Chris@91 44 double *m_pitches;
Chris@91 45 double **m_shifts;
Chris@91 46 double **m_sources;
Chris@34 47
Chris@100 48 double *m_updatePitches;
Chris@100 49 double **m_updateShifts;
Chris@100 50 double **m_updateSources;
Chris@100 51
Chris@91 52 double *m_estimate;
Chris@91 53 double *m_q;
Chris@34 54
Chris@83 55 const int m_noteCount;
Chris@83 56 const int m_shiftCount; // 1 + 2 * max template shift
Chris@83 57 const int m_binCount;
Chris@91 58 const int m_sourceCount;
Chris@42 59
Chris@83 60 const double m_pitchSparsity;
Chris@83 61 const double m_sourceSparsity;
Chris@35 62
Chris@83 63 const int m_lowestPitch;
Chris@83 64 const int m_highestPitch;
Chris@35 65
Chris@91 66 void normaliseColumn(double *column, int size);
Chris@92 67 void normaliseGrid(double **grid, int size1, int size2);
Chris@91 68
Chris@92 69 void expectation(const double *column); // size is m_binCount
Chris@92 70 void maximisation(const double *column); // size is m_binCount
Chris@36 71
Chris@88 72 const double *templateFor(int instrument, int note, int shift);
Chris@45 73 void rangeFor(int instrument, int &minPitch, int &maxPitch);
Chris@45 74 bool inRange(int instrument, int pitch);
Chris@34 75 };
Chris@34 76
Chris@34 77 #endif