made cic cascade order flexible, normalize comb output from cascade gain

This commit is contained in:
Ahmet Inan 2015-01-10 11:31:16 +01:00
parent 968fea3bed
commit 409edeb489
2 changed files with 11 additions and 14 deletions

View file

@ -21,11 +21,6 @@ typedef struct {
int prev_comb, prev_int;
} cic_t;
static const int cic_cascade_order = 5;
typedef struct {
cic_t cic[cic_cascade_order];
} cic_cascade_t;
static int cic_comb(cic_t *cic, int input)
{
int output = input - cic->prev_comb;
@ -38,17 +33,17 @@ static int cic_int(cic_t *cic, int input)
return cic->prev_int = input + cic->prev_int;
}
static int cic_comb_cascade(cic_cascade_t *cascade, int input)
static int cic_comb_cascade(cic_t *cascade, int input, int order)
{
for (int i = 0; i < cic_cascade_order; ++i)
input = cic_comb(cascade->cic + i, input);
for (int i = 0; i < order; ++i)
input = cic_comb(cascade + i, input);
return input;
}
static int cic_int_cascade(cic_cascade_t *cascade, int input)
static int cic_int_cascade(cic_t *cascade, int input, int order)
{
for (int i = 0; i < cic_cascade_order; ++i)
input = cic_int(cascade->cic + i, input);
for (int i = 0; i < order; ++i)
input = cic_int(cascade + i, input);
return input;
}

View file

@ -57,12 +57,14 @@ static void spectrum_analyzer(int amplitude)
static complex_t output[radix2_N];
#if 1
static cic_cascade_t cascade;
int tmp = cic_int_cascade(&cascade, amplitude);
const int order = 5;
const int gain = pown(M, order);
static cic_t cascade[order];
int tmp = cic_int_cascade(&cascade, amplitude, order);
if (++m < M)
return;
m = 0;
amplitude = cic_comb_cascade(&cascade, tmp);
amplitude = cic_comb_cascade(&cascade, tmp, order) / gain;
#else
static int sum;
sum += amplitude;