Add zeroed 'bumper' space before and after stack allocated input
buffer in QA code.
Eric Blossom:
"Bottom line, the only thing I can think of that might be going on is
that we're fetching a NaN off of the end of the input buffer,
multiplying it by zero (which works for everything except a NaN), then
propagating that through the rest of the calculation. (In particular
alignment cases the code does deliberately fetch either before or
after the end of the buffer, and it always multiplies those values by
zero. If they happen to be NaN's we hosed :-)) In the production
code we never see the problem since the circular buffer is zero
initialized."
Note: qa_gri_mmse_fir_interpolator::t1 now fails with the bumper code
in place.
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
*
* This file is part of GNU Radio
*
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
- i_type input[INPUT_LEN];
+ i_type input_raw[INPUT_LEN + 4*16/sizeof(i_type)];
+ memset(input_raw, 0, sizeof(input_raw));
+ i_type *input = &input_raw[2*16/sizeof(i_type)];
+
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
*
* This file is part of GNU Radio
*
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
- i_type input[INPUT_LEN];
+ i_type input_raw[INPUT_LEN + 4*16/sizeof(i_type)];
+ memset(input_raw, 0, sizeof(input_raw));
+ i_type *input = &input_raw[2*16/sizeof(i_type)];
+
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
*
* This file is part of GNU Radio
*
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
const int OUTPUT_LEN = 17;
const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN;
- i_type input[INPUT_LEN];
+ i_type input_raw[INPUT_LEN + 4*16/sizeof(i_type)];
+ memset(input_raw, 0, sizeof(input_raw));
+ i_type *input = &input_raw[2*16/sizeof(i_type)];
+
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
o_type expected_output[OUTPUT_LEN];
o_type actual_output[OUTPUT_LEN];
tap_type taps[MAX_TAPS];
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2010 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
*
* This file is part of GNU Radio
*
#include <gri_mmse_fir_interpolator.h>
#include <stdio.h>
#include <cmath>
#include <gri_mmse_fir_interpolator.h>
#include <stdio.h>
#include <cmath>
#define NELEM(x) (sizeof (x) / sizeof (x[0]))
#define NELEM(x) (sizeof (x) / sizeof (x[0]))
qa_gri_mmse_fir_interpolator::t1 ()
{
static const unsigned N = 100;
qa_gri_mmse_fir_interpolator::t1 ()
{
static const unsigned N = 100;
+
+ float input_raw[N + 10 + 4*16/sizeof(float)];
+ memset(input_raw, 0, sizeof(input_raw));
+ float *input = &input_raw[2*16/sizeof(float)];
for (unsigned i = 0; i < NELEM(input); i++)
input[i] = test_fcn ((double) i);
for (unsigned i = 0; i < NELEM(input); i++)
input[i] = test_fcn ((double) i);