Improve secondary filter
This commit is contained in:
parent
421d298c86
commit
69d7cd9595
31
src/main.c
31
src/main.c
|
@ -37,9 +37,9 @@
|
|||
static uint32_t lo_cos[LO_WORDS] __attribute__((__aligned__(1 << LO_BITS_DEPTH)));
|
||||
static uint32_t lo_sin[LO_WORDS] __attribute__((__aligned__(1 << LO_BITS_DEPTH)));
|
||||
|
||||
#define DECIMATE 2
|
||||
#define DECIMATE 4
|
||||
#define RX_STRIDE (2 * IQ_SAMPLES * DECIMATE)
|
||||
#define RX_BITS_DEPTH 12
|
||||
#define RX_BITS_DEPTH 13
|
||||
#define RX_WORDS (1 << (RX_BITS_DEPTH - 2))
|
||||
|
||||
static_assert(RX_STRIDE * 4 < RX_WORDS, "RX_STRIDE * 4 < RX_WORDS");
|
||||
|
@ -430,7 +430,8 @@ static void rf_rx(void)
|
|||
unsigned pos = 0;
|
||||
|
||||
int64_t dcI = 0, dcQ = 0;
|
||||
int prevI = 0, prevQ = 0;
|
||||
int prevI1 = 0, prevI2 = 0, prevI3 = 0;
|
||||
int prevQ1 = 0, prevQ2 = 0, prevQ3 = 0;
|
||||
|
||||
while (true) {
|
||||
if (multicore_fifo_rvalid()) {
|
||||
|
@ -486,8 +487,16 @@ static void rf_rx(void)
|
|||
cos_pos = *cos_ptr++;
|
||||
int I2 = cos_neg - cos_pos;
|
||||
|
||||
int64_t I = (prevI + I1 + I1 + I2) / 2;
|
||||
prevI = I2;
|
||||
cos_neg = *cos_ptr++;
|
||||
cos_pos = *cos_ptr++;
|
||||
int I3 = cos_neg - cos_pos;
|
||||
|
||||
cos_neg = *cos_ptr++;
|
||||
cos_pos = *cos_ptr++;
|
||||
int I4 = cos_neg - cos_pos;
|
||||
|
||||
int64_t I = (prevI3 + prevI2 * 3 + prevI1 * 4 + I1 * 4 + I2 * 3 + I3) / 4;
|
||||
prevI1 = I4, prevI2 = I3, prevI3 = I2;
|
||||
|
||||
int64_t I16 = I << 16;
|
||||
dcI = ((dcI << 16) - dcI + I16) >> 16;
|
||||
|
@ -511,8 +520,16 @@ static void rf_rx(void)
|
|||
sin_pos = *sin_ptr++;
|
||||
int Q2 = sin_neg - sin_pos;
|
||||
|
||||
int64_t Q = (prevQ + Q1 + Q1 + Q2) / 2;
|
||||
prevQ = Q2;
|
||||
sin_neg = *sin_ptr++;
|
||||
sin_pos = *sin_ptr++;
|
||||
int Q3 = sin_neg - sin_pos;
|
||||
|
||||
sin_neg = *sin_ptr++;
|
||||
sin_pos = *sin_ptr++;
|
||||
int Q4 = sin_neg - sin_pos;
|
||||
|
||||
int64_t Q = (prevQ3 + prevQ2 * 3 + prevQ1 * 4 + Q1 * 4 + Q2 * 3 + Q3) / 4;
|
||||
prevQ1 = Q4, prevQ2 = Q3, prevQ3 = Q2;
|
||||
|
||||
int64_t Q16 = Q << 16;
|
||||
dcQ = ((dcQ << 16) - dcQ + Q16) >> 16;
|
||||
|
|
Loading…
Reference in a new issue