aboutsummaryrefslogtreecommitdiff
path: root/src/init.c
diff options
context:
space:
mode:
authorJamie Bullock <jamie@jamiebullock.com>2013-06-02 22:54:41 +0100
committerJamie Bullock <jamie@jamiebullock.com>2013-06-02 22:54:41 +0100
commit4d4231f47627d56fcb636dbd8fb0687118ee37f9 (patch)
tree71e3812018ee351020bbf89311874e44998117a1 /src/init.c
parent502d3682876e11fad90dc0613c925eea0060860f (diff)
downloadLibXtract-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.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/init.c b/src/init.c
index 7031606..629be76 100644
--- a/src/init.c
+++ b/src/init.c
@@ -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;
}