diff options
author | Jamie Bullock <jamie@postlude.co.uk> | 2008-01-02 02:26:13 +0000 |
---|---|---|
committer | Jamie Bullock <jamie@postlude.co.uk> | 2008-01-02 02:26:13 +0000 |
commit | 5fe601c3f693ee4ac1569ba93e3614fd9a0f7501 (patch) | |
tree | 20f75ff904e7919ce4f42633d7080927aee30257 /src/vector.c | |
parent | 7f86524dd021c5905df111d1254004576fd872f0 (diff) | |
download | LibXtract-5fe601c3f693ee4ac1569ba93e3614fd9a0f7501.tar.gz LibXtract-5fe601c3f693ee4ac1569ba93e3614fd9a0f7501.tar.bz2 LibXtract-5fe601c3f693ee4ac1569ba93e3614fd9a0f7501.zip |
- Re-factoring in xtract_spectrum and fixed normalisation bug
- Fixed bug in xtract_lnorm
Diffstat (limited to 'src/vector.c')
-rw-r--r-- | src/vector.c | 101 |
1 files changed, 52 insertions, 49 deletions
diff --git a/src/vector.c b/src/vector.c index 0ffd8ae..c721be7 100644 --- a/src/vector.c +++ b/src/vector.c @@ -47,7 +47,8 @@ int xtract_spectrum(const float *data, const int N, const void *argv, float *res float *input, *rfft, q, temp, max; size_t bytes; - int n, + int n, + m, NxN, M, vector, @@ -91,36 +92,37 @@ int xtract_spectrum(const float *data, const int N, const void *argv, float *res temp = log(sqrt(temp) / N); else temp = XTRACT_LOG_LIMIT_DB; - if(withDC) { - result[n] = - /*Normalise*/ - (temp + XTRACT_DB_SCALE_OFFSET) / - XTRACT_DB_SCALE_OFFSET; - result[M + n + 1] = n * q; - } - else { - result[n - 1] = - (temp + XTRACT_DB_SCALE_OFFSET) / - XTRACT_DB_SCALE_OFFSET; - result[M + n - 1] = n * q; - } - max = result[n] > max ? result[n] : max; + + if(withDC){ + m = n; + result[M + m + 1] = n * q; + } + else{ + m = n - 1; + result[M + m] = n * q; + } + + result[m] = + /* Scaling */ + (temp + XTRACT_DB_SCALE_OFFSET) / + XTRACT_DB_SCALE_OFFSET; + + max = result[m] > max ? result[m] : max; } break; case XTRACT_POWER_SPECTRUM: for(n = 1; n < M; n++){ - if(withDC){ - result[n] = (XTRACT_SQ(rfft[n]) + XTRACT_SQ(rfft[N - n])) - / NxN; - result[M + n + 1] = n * q; - } - else { - result[n - 1] = - (XTRACT_SQ(rfft[n]) + XTRACT_SQ(rfft[N - n])) / NxN; - result[M + n - 1] = n * q; - } - max = result[n] > max ? result[n] : max; + if(withDC){ + m = n; + result[M + m + 1] = n * q; + } + else{ + m = n - 1; + result[M + m] = n * q; + } + result[m] = (XTRACT_SQ(rfft[n]) + XTRACT_SQ(rfft[N - n])) / NxN; + max = result[m] > max ? result[m] : max; } break; @@ -131,34 +133,37 @@ int xtract_spectrum(const float *data, const int N, const void *argv, float *res temp = log(temp / NxN); else temp = XTRACT_LOG_LIMIT_DB; - if(withDC){ - result[n] = (temp + XTRACT_DB_SCALE_OFFSET) / - XTRACT_DB_SCALE_OFFSET; - result[M + n + 1] = n * q; - } - else { - result[n - 1] = (temp + XTRACT_DB_SCALE_OFFSET) / + + if(withDC){ + m = n; + result[M + m + 1] = n * q; + } + else{ + m = n - 1; + result[M + m] = n * q; + } + + result[m] = (temp + XTRACT_DB_SCALE_OFFSET) / XTRACT_DB_SCALE_OFFSET; - result[M + n - 1] = n * q; - } - max = result[n] > max ? result[n] : max; + max = result[m] > max ? result[m] : max; } break; default: /* MAGNITUDE_SPECTRUM */ for(n = 1; n < M; n++){ - if(withDC){ - result[n] = sqrt(XTRACT_SQ(rfft[n]) + - XTRACT_SQ(rfft[N - n])) / N; - result[M + n + 1] = n * q; - } - else { - result[n - 1] = sqrt(XTRACT_SQ(rfft[n]) + - XTRACT_SQ(rfft[N - n])) / N; - result[M + n - 1] = n * q; - } - max = result[n] > max ? result[n] : max; + if(withDC){ + m = n; + result[M + m + 1] = n * q; + } + else{ + m = n - 1; + result[M + m] = n * q; + } + + result[m] = sqrt(XTRACT_SQ(rfft[n]) + + XTRACT_SQ(rfft[N - n])) / N; + max = result[m] > max ? result[m] : max; } break; } @@ -172,7 +177,6 @@ int xtract_spectrum(const float *data, const int N, const void *argv, float *res result[M] = XTRACT_SQ(rfft[M]); result[N + 1] = q * M; max = result[M] > max ? result[M] : max; - M++; /* So we normalise the Nyquist (below) */ } else { /* The Nyquist */ @@ -180,7 +184,6 @@ int xtract_spectrum(const float *data, const int N, const void *argv, float *res result[N - 1] = q * M; max = result[M - 1] > max ? result[M - 1] : max; } - if(normalise){ for(n = 0; n < M; n++) |