43 return _isnan(value) != 0;
45 return std::isnan(value);
56 return _finite(value) != 0;
58 return std::isfinite(value);
67inline T
uMin3(
const T& a,
const T& b,
const T& c)
78inline T
uMax3(
const T& a,
const T& b,
const T& c)
92inline T
uMax(
const T * v,
unsigned int size,
unsigned int & index)
101 for(
unsigned int i=1; i<size; ++i)
120inline T
uMax(
const std::vector<T> & v,
unsigned int & index)
122 return uMax(v.data(), v.size(), index);
132inline T
uMax(
const T * v,
unsigned int size)
135 return uMax(v, size, index);
144inline T
uMax(
const std::vector<T> & v)
146 return uMax(v.data(), v.size());
157inline T
uMin(
const T * v,
unsigned int size,
unsigned int & index)
166 for(
unsigned int i=1; i<size; ++i)
185inline T
uMin(
const std::vector<T> & v,
unsigned int & index)
187 return uMin(v.data(), v.size(), index);
197inline T
uMin(
const T * v,
unsigned int size)
200 return uMin(v, size, index);
209inline T
uMin(
const std::vector<T> & v)
211 return uMin(v.data(), v.size());
224inline void uMinMax(
const T * v,
unsigned int size, T & min, T & max,
unsigned int & indexMin,
unsigned int & indexMax)
237 for(
unsigned int i=1; i<size; ++i)
262inline void uMinMax(
const std::vector<T> & v, T & min, T & max,
unsigned int & indexMin,
unsigned int & indexMax)
264 uMinMax(v.data(), v.size(), min, max, indexMin, indexMax);
275inline void uMinMax(
const T * v,
unsigned int size, T & min, T & max)
277 unsigned int indexMin;
278 unsigned int indexMax;
279 uMinMax(v, size, min, max, indexMin, indexMax);
289inline void uMinMax(
const std::vector<T> & v, T & min, T & max)
291 uMinMax(v.data(), v.size(), min, max);
318inline T
uSum(
const std::list<T> & list)
321 for(
typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
335inline T
uSum(
const T * v,
unsigned int size)
340 for(
unsigned int i=0; i<size; ++i)
354inline T
uSum(
const std::vector<T> & v)
356 return uSum(v.data(), (
int)v.size());
367inline T
uSumSquared(
const T * v,
unsigned int size, T subtract = T())
372 for(
unsigned int i=0; i<size; ++i)
374 sum += (v[i]-subtract)*(v[i]-subtract);
399inline T
uMean(
const T * v,
unsigned int size)
404 for(
unsigned int i=0; i<size; ++i)
419inline T
uMean(
const std::list<T> & list)
424 for(
typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
439inline T
uMean(
const std::vector<T> & v)
441 return uMean(v.data(), v.size());
456 if(x && y && sizeX == sizeY)
458 for(
unsigned int i=0; i<sizeX; ++i)
489inline T
uVariance(
const T * v,
unsigned int size, T meanV)
495 for(
unsigned int i=0; i<size; ++i)
497 sum += (v[i]-meanV)*(v[i]-meanV);
512inline T
uVariance(
const std::list<T> & list,
const T & m)
518 for(
typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
520 sum += (*i-m)*(*i-m);
522 buf = sum/(list.size()-1);
536 T m =
uMean(v, size);
548inline T
uVariance(
const std::vector<T> & v,
const T & m)
561 for(
unsigned int i=0; i<v.size(); ++i)
573inline T
uNorm(
const std::vector<T> & v)
585 return x1*x1 + x2*x2;
593inline T
uNorm(
const T & x1,
const T & x2)
605 return x1*x1 + x2*x2 + x3*x3;
613inline T
uNorm(
const T & x1,
const T & x2,
const T & x3)
625 float norm =
uNorm(v);
632 std::vector<T> r(v.size());
633 for(
unsigned int i=0; i<v.size(); ++i)
645inline std::list<unsigned int>
uLocalMaxima(
const T * v,
unsigned int size)
647 std::list<unsigned int> maxima;
650 for(
unsigned int i=0; i<size; ++i)
655 if((i+1 < size && v[i] > v[i+1]) ||
661 else if(i == size - 1)
664 if((i >= 1 && v[i] > v[i-1]) ||
673 if(v[i] > v[i-1] && v[i] > v[i+1])
696enum UXMatchMethod{UXCorrRaw, UXCorrBiased, UXCorrUnbiased, UXCorrCoeff, UXCovRaw, UXCovBiased, UXCovUnbiased, UXCovCoeff};
708inline std::vector<T>
uXMatch(
const T * vA,
const T * vB,
unsigned int sizeA,
unsigned int sizeB,
UXMatchMethod method)
710 if(!vA || !vB || sizeA == 0 || sizeB == 0)
712 return std::vector<T>();
715 std::vector<T> result(sizeA + sizeB - 1);
719 if(method > UXCorrCoeff)
721 meanA =
uMean(vA, sizeA);
722 meanB =
uMean(vB, sizeB);
726 if(method == UXCorrCoeff || method == UXCovCoeff)
730 else if(method == UXCorrBiased || method == UXCovBiased)
732 den = (T)std::max(sizeA, sizeB);
745 for(
unsigned int i=0; i<sizeA; ++i)
747 if(method == UXCorrUnbiased || method == UXCovUnbiased)
752 posA = sizeA - i - 1;
753 posB = sizeB - i - 1;
756 for(j=0; (j + posB) < sizeB && (j + posA) < sizeA; ++j)
758 resultA += (vA[j] - meanA) * (vB[j + posB] - meanB);
759 resultB += (vA[j + posA] - meanA) * (vB[j] - meanB);
760 if(method == UXCorrUnbiased || method == UXCovUnbiased)
766 result[i] = resultA / den;
767 result[result.size()-1 -i] = resultB / den;
772 for(
unsigned int i=0; i<result.size(); ++i)
774 if(method == UXCorrUnbiased || method == UXCovUnbiased)
779 int posB = sizeB - i - 1;
783 for(
unsigned int j=0; (j + posB) < sizeB && j < sizeA; ++j)
785 r += (vA[j] - meanA) * (vB[j + posB] - meanB);
786 if(method == UXCorrUnbiased || method == UXCovUnbiased)
795 for(
unsigned int i=0; (i+posA) < sizeA && i < sizeB; ++i)
797 r += (vA[i+posA] - meanA) * (vB[i] - meanB);
798 if(method == UXCorrUnbiased || method == UXCovUnbiased)
822 return uXMatch(vA.data(), vB.data(), vA.size(), vB.size(), method);
836inline T
uXMatch(
const T * vA,
const T * vB,
unsigned int sizeA,
unsigned int sizeB,
unsigned int index,
UXMatchMethod method)
839 if(!vA || !vB || sizeA == 0 || sizeB == 0)
846 if(method > UXCorrCoeff)
848 meanA =
uMean(vA, sizeA);
849 meanB =
uMean(vB, sizeB);
851 unsigned int size = sizeA + sizeB - 1;
854 if(method == UXCorrCoeff || method == UXCovCoeff)
858 else if(method == UXCorrBiased || method == UXCovBiased)
860 den = (T)std::max(sizeA, sizeB);
862 else if(method == UXCorrUnbiased || method == UXCovUnbiased)
869 int posB = sizeB - index - 1;
873 for(i=0; (i + posB) < sizeB && i < sizeA; ++i)
875 result += (vA[i] - meanA) * (vB[i + posB] - meanB);
876 if(method == UXCorrUnbiased || method == UXCovUnbiased)
885 for(i=0; (i+posA) < sizeA && i < sizeB; ++i)
887 result += (vA[i+posA] - meanA) * (vB[i] - meanB);
888 if(method == UXCorrUnbiased || method == UXCovUnbiased)
909inline T
uXMatch(
const std::vector<T> & vA,
const std::vector<T> & vB,
unsigned int index,
UXMatchMethod method)
911 return uXMatch(vA.data(), vB.data(), vA.size(), vB.size(), index, method);
921 std::vector<float> w(L);
922 unsigned int N = L-1;
923 float pi = 3.14159265f;
924 for(
unsigned int n=0; n<N; ++n)
926 w[n] = 0.54f-0.46f*std::cos(2.0f*pi*
float(n)/
float(N));
932bool uIsInBounds(
const T& value,
const T& low,
const T& high)
934 return uIsFinite(value) && !(value < low) && !(value >= high);
bool uIsNan(const T &value)
T uMax(const T *v, unsigned int size, unsigned int &index)
T uMeanSquaredError(const T *x, unsigned int sizeX, const T *y, unsigned int sizeY)
std::vector< T > uNormalize(const std::vector< T > &v)
std::list< unsigned int > uLocalMaxima(const T *v, unsigned int size)
T uMax3(const T &a, const T &b, const T &c)
T uMean(const T *v, unsigned int size)
T uSum(const std::list< T > &list)
std::vector< T > uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method)
T uMin(const T *v, unsigned int size, unsigned int &index)
T uNorm(const std::vector< T > &v)
bool uIsFinite(const T &value)
T uMin3(const T &a, const T &b, const T &c)
T uVariance(const T *v, unsigned int size, T meanV)
std::vector< float > uHamming(unsigned int L)
T uSumSquared(const T *v, unsigned int size, T subtract=T())
T uNormSquared(const std::vector< T > &v)
void uMinMax(const T *v, unsigned int size, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax)