diff options
author | Jamie Bullock <jamie@postlude.co.uk> | 2007-01-10 14:36:43 +0000 |
---|---|---|
committer | Jamie Bullock <jamie@postlude.co.uk> | 2007-01-10 14:36:43 +0000 |
commit | b654be00cfb5275b289e683af7b67de6ee471854 (patch) | |
tree | 0065bf4a8d8e2713364d75444663b3734e4e9170 /src | |
parent | 66a31d55d10a65c7d293a7cfd9e79992dbfb6439 (diff) | |
download | LibXtract-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.c | 64 |
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; |