Mercurial > hg > qm-dsp
comparison dsp/segmentation/ClusterMeltSegmenter.h @ 249:18a0dffa5c1a
* Various fixes to segmentation code
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 10 Jan 2008 15:14:53 +0000 |
parents | cdfd0948a852 |
children | d096a79fa772 |
comparison
equal
deleted
inserted
replaced
248:fd68f25b9949 | 249:18a0dffa5c1a |
---|---|
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 }; |