comparison dsp/segmentation/ClusterMeltSegmenter.h @ 24:2b74bd60c61f

* Various fixes to segmentation code
author cannam
date Thu, 10 Jan 2008 15:14:53 +0000
parents 8bdbda7fb893
children d096a79fa772
comparison
equal deleted inserted replaced
23:eea2a08a75a9 24:2b74bd60c61f
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
1 /* 3 /*
2 * ClusterMeltSegmenter.h 4 * ClusterMeltSegmenter.h
3 * soundbite
4 * 5 *
5 * Created by Mark Levy on 23/03/2006. 6 * Created by Mark Levy on 23/03/2006.
6 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London. All rights reserved. 7 * Copyright 2006 Centre for Digital Music, Queen Mary, University of London.
7 * 8 * All rights reserved.
8 */ 9 */
9 10
10 #include <vector> 11 #include <vector>
11 12
12 #include "segment.h" 13 #include "segment.h"
13 #include "Segmenter.h" 14 #include "Segmenter.h"
14 #include "hmm/hmm.h" 15 #include "hmm/hmm.h"
15 #include "base/Window.h" 16 #include "base/Window.h"
16 #include "dsp/chromagram/ConstantQ.h"
17 17
18 using std::vector; 18 using std::vector;
19 19
20 class ClusterMeltSegmenterParams // defaults are sensible for 11025Hz with 0.2 second hopsize 20 class Decimator;
21 class ConstantQ;
22
23 class ClusterMeltSegmenterParams
24 // defaults are sensible for 11025Hz with 0.2 second hopsize
21 { 25 {
22 public: 26 public:
23 ClusterMeltSegmenterParams() : featureType(FEATURE_TYPE_CONSTQ), hopSize(0.2), windowSize(0.6), fmin(62), fmax(16000), 27 ClusterMeltSegmenterParams() :
24 nbins(8), ncomponents(20), nHMMStates(40), nclusters(10), histogramLength(15), neighbourhoodLimit(20) { } 28 featureType(FEATURE_TYPE_CONSTQ),
25 feature_types featureType; 29 hopSize(0.2),
26 double hopSize; // in secs 30 windowSize(0.6),
27 double windowSize; // in secs 31 fmin(62),
28 int fmin; 32 fmax(16000),
29 int fmax; 33 nbins(8),
30 int nbins; 34 ncomponents(20),
31 int ncomponents; 35 nHMMStates(40),
32 int nHMMStates; 36 nclusters(10),
33 int nclusters; 37 histogramLength(15),
34 int histogramLength; 38 neighbourhoodLimit(20) { }
35 int neighbourhoodLimit; 39 feature_types featureType;
40 double hopSize; // in secs
41 double windowSize; // in secs
42 int fmin;
43 int fmax;
44 int nbins;
45 int ncomponents;
46 int nHMMStates;
47 int nclusters;
48 int histogramLength;
49 int neighbourhoodLimit;
36 }; 50 };
37 51
38 class ClusterMeltSegmenter : public Segmenter 52 class ClusterMeltSegmenter : public Segmenter
39 { 53 {
40 public: 54 public:
41 ClusterMeltSegmenter(ClusterMeltSegmenterParams params); 55 ClusterMeltSegmenter(ClusterMeltSegmenterParams params);
42 virtual ~ClusterMeltSegmenter(); 56 virtual ~ClusterMeltSegmenter();
43 virtual void initialise(int samplerate); 57 virtual void initialise(int samplerate);
44 virtual int getWindowsize(); 58 virtual int getWindowsize();
45 virtual int getHopsize(); 59 virtual int getHopsize();
46 virtual void extractFeatures(double* samples, int nsamples); 60 virtual void extractFeatures(const double* samples, int nsamples);
47 void setFeatures(const vector<vector<double> >& f); // provide the features yourself 61 void setFeatures(const vector<vector<double> >& f); // provide the features yourself
48 virtual void segment(); // segment into default number of segment-types 62 virtual void segment(); // segment into default number of segment-types
49 void segment(int m); // segment into m segment-types 63 void segment(int m); // segment into m segment-types
50 int getNSegmentTypes() { return nclusters; } 64 int getNSegmentTypes() { return nclusters; }
65
51 protected: 66 protected:
52 //void mpeg7ConstQ(); 67 void makeSegmentation(int* q, int len);
53 void makeSegmentation(int* q, int len);
54 68
55 Window<double> *window; 69 Window<double> *window;
56 // int windowLength; // in samples 70 ConstantQ* constq;
57 ConstantQ* constq; 71 model_t* model; // the HMM
58 model_t* model; // the HMM 72 int* q; // the decoded HMM state sequence
59 //vector<int> stateSequence; 73 vector<vector<double> > histograms;
60 //vector<int> segmentTypeSequence; 74
61 int* q; // the decoded HMM state sequence 75 feature_types featureType;
62 vector<vector<double> > histograms; 76 double hopSize; // in seconds
63 77 double windowSize; // in seconds
64 feature_types featureType; 78
65 double hopSize; // in seconds 79 // constant-Q parameters
66 double windowSize; // in seconds 80 int fmin;
67 81 int fmax;
68 // constant-Q parameters 82 int nbins;
69 int fmin; 83 int ncoeff;
70 int fmax; 84
71 int nbins; 85 // PCA parameters
72 int ncoeff; 86 int ncomponents;
73 87
74 // PCA parameters 88 // HMM parameters
75 int ncomponents; 89 int nHMMStates;
76 90
77 // HMM parameters 91 // clustering parameters
78 int nHMMStates; 92 int nclusters;
79 93 int histogramLength;
80 // clustering parameters 94 int neighbourhoodLimit;
81 int nclusters; 95
82 int histogramLength; 96 Decimator *decimator;
83 int neighbourhoodLimit;
84 }; 97 };