aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJamie Bullock <jamie@postlude.co.uk>2007-01-10 14:36:43 +0000
committerJamie Bullock <jamie@postlude.co.uk>2007-01-10 14:36:43 +0000
commitb654be00cfb5275b289e683af7b67de6ee471854 (patch)
tree0065bf4a8d8e2713364d75444663b3734e4e9170 /src
parent66a31d55d10a65c7d293a7cfd9e79992dbfb6439 (diff)
downloadLibXtract-b654be00cfb5275b289e683af7b67de6ee471854.tar.gz
LibXtract-b654be00cfb5275b289e683af7b67de6ee471854.tar.bz2
LibXtract-b654be00cfb5275b289e683af7b67de6ee471854.zip
Made some changes to spectral_mean etc.
Diffstat (limited to 'src')
-rw-r--r--src/scalar.c64
1 files changed, 44 insertions, 20 deletions
diff --git a/src/scalar.c b/src/scalar.c
index cfb3e7c..9b6d9f3 100644
--- a/src/scalar.c
+++ b/src/scalar.c
@@ -130,14 +130,21 @@ int xtract_spectral_mean(const float *data, const int N, const void *argv, float
int xtract_spectral_variance(const float *data, const int N, const void *argv, float *result){
- int M, m;
+ int m;
+ float A = 0.f;
+ const float *freqs, *amps;
+
+ m = N >> 1;
- m = M = N >> 1;
+ amps = data;
+ freqs = data + m;
- while(m--)
- *result += pow((data[m] * data[M +m]) - *(float *)argv, 2);
+ while(m--){
+ A += amps[m];
+ *result += pow((freqs[m] - *(float *)argv) * amps[m], 2);
+ }
- *result = *result / (M - 1);
+ *result = *result / (A - 1);
return SUCCESS;
}
@@ -151,50 +158,67 @@ int xtract_spectral_standard_deviation(const float *data, const int N, const voi
int xtract_spectral_average_deviation(const float *data, const int N, const void *argv, float *result){
- int M, m;
+ int m;
+ float A = 0.f;
+ const float *freqs, *amps;
+
+ m = N >> 1;
- m = M = N >> 1;
+ amps = data;
+ freqs = data + m;
- while(m--)
- *result += fabs((data[m] * data[M + m]) - *(float *)argv);
+ while(m--){
+ A += amps[m];
+ *result += fabs((amps[m] * freqs[m]) - *(float *)argv);
+ }
- *result /= M;
+ *result /= A;
return SUCCESS;
}
int xtract_spectral_skewness(const float *data, const int N, const void *argv, float *result){
- int M, m;
- float temp;
+ int m;
+ float temp, A = 0.f;
+ const float *freqs, *amps;
- m = M = N >> 1;
+ m = N >> 1;
+
+ amps = data;
+ freqs = data + m;
while(m--){
- temp = ((data[m] * data[M + m]) -
+ A += amps[m];
+ temp = ((amps[m] * freqs[m]) -
((float *)argv)[0]) / ((float *)argv)[1];
*result += pow(temp, 3);
}
- *result /= M;
+ *result /= A;
return SUCCESS;
}
int xtract_spectral_kurtosis(const float *data, const int N, const void *argv, float *result){
- int M, m;
- float temp;
+ int m;
+ float temp, A = 0.f;
+ const float *freqs, *amps;
- m = M = N >> 1;
+ m = N >> 1;
+
+ amps = data;
+ freqs = data + m;
while(m--){
- temp = ((data[m] * data[M + m]) -
+ A += amps[m];
+ temp = ((amps[m] * freqs[m]) -
((float *)argv)[0]) / ((float *)argv)[1];
*result += pow(temp, 4);
}
- *result /= M;
+ *result /= A;
*result -= 3.0f;
return SUCCESS;