diff options
author | Jamie Bullock <jamie@jamiebullock.com> | 2013-06-02 22:54:41 +0100 |
---|---|---|
committer | Jamie Bullock <jamie@jamiebullock.com> | 2013-06-02 22:54:41 +0100 |
commit | 4d4231f47627d56fcb636dbd8fb0687118ee37f9 (patch) | |
tree | 71e3812018ee351020bbf89311874e44998117a1 /src/init.c | |
parent | 502d3682876e11fad90dc0613c925eea0060860f (diff) | |
download | LibXtract-4d4231f47627d56fcb636dbd8fb0687118ee37f9.tar.gz LibXtract-4d4231f47627d56fcb636dbd8fb0687118ee37f9.tar.bz2 LibXtract-4d4231f47627d56fcb636dbd8fb0687118ee37f9.zip |
Pass block size to xtract_init_vdsp_data() instead of block size / 2. Fixes bug with erroneous values in second half of spectrum when using vDSP FFT
Diffstat (limited to 'src/init.c')
-rw-r--r-- | src/init.c | 20 |
1 files changed, 6 insertions, 14 deletions
@@ -126,8 +126,8 @@ void xtract_free_ooura_(void) void xtract_init_vdsp_data(xtract_vdsp_data *vdsp_data, unsigned int N) { vdsp_data->setup = vDSP_create_fftsetupD(log2f(N), FFT_RADIX2); - vdsp_data->fft.realp = (double *) malloc((N >> 1) * sizeof(double)); - vdsp_data->fft.imagp = (double *) malloc((N >> 1) * sizeof(double)); + vdsp_data->fft.realp = (double *) malloc((N >> 1) * sizeof(double) + 1); + vdsp_data->fft.imagp = (double *) malloc((N >> 1) * sizeof(double) + 1); vdsp_data->log2N = log2f(N); vdsp_data->initialised = true; } @@ -144,14 +144,6 @@ void xtract_free_vdsp_data(xtract_vdsp_data *vdsp_data) int xtract_init_vdsp_(int N, int feature_name) { - - int M = N >> 1; - - if(feature_name == XTRACT_AUTOCORRELATION_FFT) - { - M = N; /* allow for zero padding */ - } - switch(feature_name) { case XTRACT_SPECTRUM: @@ -159,27 +151,27 @@ int xtract_init_vdsp_(int N, int feature_name) { xtract_free_vdsp_data(&vdsp_data_spectrum); } - xtract_init_vdsp_data(&vdsp_data_spectrum, M); + xtract_init_vdsp_data(&vdsp_data_spectrum, N); break; case XTRACT_AUTOCORRELATION_FFT: if(vdsp_data_autocorrelation_fft.initialised) { xtract_free_vdsp_data(&vdsp_data_autocorrelation_fft); } - xtract_init_vdsp_data(&vdsp_data_autocorrelation_fft, M); + xtract_init_vdsp_data(&vdsp_data_autocorrelation_fft, N * 2); // allow for zero padding break; case XTRACT_DCT: if(vdsp_data_dct.initialised) { xtract_free_vdsp_data(&vdsp_data_dct); } - xtract_init_vdsp_data(&vdsp_data_dct, M); + xtract_init_vdsp_data(&vdsp_data_dct, N); case XTRACT_MFCC: if(vdsp_data_mfcc.initialised) { xtract_free_vdsp_data(&vdsp_data_mfcc); } - xtract_init_vdsp_data(&vdsp_data_mfcc, M); + xtract_init_vdsp_data(&vdsp_data_mfcc, N); break; } |