Mercurial > hg > beatroot-vamp
comparison Peaks.cpp @ 22:6afcb5edd7ab
Fix compiler warnings, etc
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2013 16:50:40 +0100 |
parents | 55969570044e |
children |
comparison
equal
deleted
inserted
replaced
21:d98bc465a116 | 22:6afcb5edd7ab |
---|---|
27 while (mid < end) { | 27 while (mid < end) { |
28 int i = mid - width; | 28 int i = mid - width; |
29 if (i < 0) | 29 if (i < 0) |
30 i = 0; | 30 i = 0; |
31 int stop = mid + width + 1; | 31 int stop = mid + width + 1; |
32 if (stop > data.size()) | 32 if (stop > (int)data.size()) |
33 stop = data.size(); | 33 stop = data.size(); |
34 maxp = i; | 34 maxp = i; |
35 for (i++; i < stop; i++) | 35 for (i++; i < stop; i++) |
36 if (data[i] > data[maxp]) | 36 if (data[i] > data[maxp]) |
37 maxp = i; | 37 maxp = i; |
38 if (maxp == mid) { | 38 if (maxp == mid) { |
39 int j; | 39 int j; |
40 for (j = peakCount; j > 0; j--) { | 40 for (j = peakCount; j > 0; j--) { |
41 if (data[maxp] <= data[peaks[j-1]]) | 41 if (data[maxp] <= data[peaks[j-1]]) |
42 break; | 42 break; |
43 else if (j < peaks.size()) | 43 else if (j < (int)peaks.size()) |
44 peaks[j] = peaks[j-1]; | 44 peaks[j] = peaks[j-1]; |
45 } | 45 } |
46 if (j != peaks.size()) | 46 if (j != (int)peaks.size()) |
47 peaks[j] = maxp; | 47 peaks[j] = maxp; |
48 if (peakCount != peaks.size()) | 48 if (peakCount != (int)peaks.size()) |
49 peakCount++; | 49 peakCount++; |
50 } | 50 } |
51 mid++; | 51 mid++; |
52 } | 52 } |
53 return peakCount; | 53 return peakCount; |
67 av = data[mid]; | 67 av = data[mid]; |
68 int i = mid - width; | 68 int i = mid - width; |
69 if (i < 0) | 69 if (i < 0) |
70 i = 0; | 70 i = 0; |
71 int stop = mid + width + 1; | 71 int stop = mid + width + 1; |
72 if (stop > data.size()) | 72 if (stop > (int)data.size()) |
73 stop = data.size(); | 73 stop = data.size(); |
74 maxp = i; | 74 maxp = i; |
75 for (i++; i < stop; i++) | 75 for (i++; i < stop; i++) |
76 if (data[i] > data[maxp]) | 76 if (data[i] > data[maxp]) |
77 maxp = i; | 77 maxp = i; |
104 if (isRelative) { | 104 if (isRelative) { |
105 int iStart = index - pre * width; | 105 int iStart = index - pre * width; |
106 if (iStart < 0) | 106 if (iStart < 0) |
107 iStart = 0; | 107 iStart = 0; |
108 int iStop = index + post * width; | 108 int iStop = index + post * width; |
109 if (iStop > data.size()) | 109 if (iStop > (int)data.size()) |
110 iStop = data.size(); | 110 iStop = data.size(); |
111 double sum = 0; | 111 double sum = 0; |
112 int count = iStop - iStart; | 112 int count = iStop - iStart; |
113 while (iStart < iStop) | 113 while (iStart < iStop) |
114 sum += data[iStart++]; | 114 sum += data[iStart++]; |
118 } // overThreshold() | 118 } // overThreshold() |
119 | 119 |
120 void Peaks::normalise(vector<double> &data) { | 120 void Peaks::normalise(vector<double> &data) { |
121 double sx = 0; | 121 double sx = 0; |
122 double sxx = 0; | 122 double sxx = 0; |
123 for (int i = 0; i < data.size(); i++) { | 123 for (int i = 0; i < (int)data.size(); i++) { |
124 sx += data[i]; | 124 sx += data[i]; |
125 sxx += data[i] * data[i]; | 125 sxx += data[i] * data[i]; |
126 } | 126 } |
127 double mean = sx / data.size(); | 127 double mean = sx / data.size(); |
128 double sd = sqrt((sxx - sx * mean) / data.size()); | 128 double sd = sqrt((sxx - sx * mean) / data.size()); |
129 if (sd == 0) | 129 if (sd == 0) |
130 sd = 1; // all data[i] == mean -> 0; avoids div by 0 | 130 sd = 1; // all data[i] == mean -> 0; avoids div by 0 |
131 for (int i = 0; i < data.size(); i++) { | 131 for (int i = 0; i < (int)data.size(); i++) { |
132 data[i] = (data[i] - mean) / sd; | 132 data[i] = (data[i] - mean) / sd; |
133 } | 133 } |
134 } // normalise() | 134 } // normalise() |
135 | 135 |
136 /** Uses an n-point linear regression to estimate the slope of data. | 136 /** Uses an n-point linear regression to estimate the slope of data. |
152 sxy += t * data[i]; | 152 sxy += t * data[i]; |
153 } | 153 } |
154 double delta = n * sxx - sx * sx; | 154 double delta = n * sxx - sx * sx; |
155 for ( ; j < n / 2; j++) | 155 for ( ; j < n / 2; j++) |
156 slope[j] = (n * sxy - sx * sy) / delta; | 156 slope[j] = (n * sxy - sx * sy) / delta; |
157 for ( ; j < data.size() - (n + 1) / 2; j++, i++) { | 157 for ( ; j < (int)data.size() - (n + 1) / 2; j++, i++) { |
158 slope[j] = (n * sxy - sx * sy) / delta; | 158 slope[j] = (n * sxy - sx * sy) / delta; |
159 sy += data[i] - data[i - n]; | 159 sy += data[i] - data[i - n]; |
160 sxy += hop * (n * data[i] - sy); | 160 sxy += hop * (n * data[i] - sy); |
161 } | 161 } |
162 for ( ; j < data.size(); j++) | 162 for ( ; j < (int)data.size(); j++) |
163 slope[j] = (n * sxy - sx * sy) / delta; | 163 slope[j] = (n * sxy - sx * sy) / delta; |
164 } // getSlope() | 164 } // getSlope() |
165 | 165 |
166 int Peaks::imin(const vector<double> &arr) { | 166 int Peaks::imin(const vector<double> &arr) { |
167 int i = 0; | 167 int i = 0; |
168 for (int j = 1; j < arr.size(); j++) | 168 for (int j = 1; j < (int)arr.size(); j++) |
169 if (arr[j] < arr[i]) | 169 if (arr[j] < arr[i]) |
170 i = j; | 170 i = j; |
171 return i; | 171 return i; |
172 } // imin() | 172 } // imin() |
173 | 173 |
174 int Peaks::imax(const vector<double> &arr) { | 174 int Peaks::imax(const vector<double> &arr) { |
175 int i = 0; | 175 int i = 0; |
176 for (int j = 1; j < arr.size(); j++) | 176 for (int j = 1; j < (int)arr.size(); j++) |
177 if (arr[j] > arr[i]) | 177 if (arr[j] > arr[i]) |
178 i = j; | 178 i = j; |
179 return i; | 179 return i; |
180 } // imax() | 180 } // imax() |
181 | 181 |