Better filter, 16b samples

This commit is contained in:
Jan Hamal Dvořák 2025-07-03 21:45:25 +02:00
parent 1e4846dac3
commit da73da4e38

View file

@ -141,8 +141,6 @@ static void init_bias()
gpio_set_drive_strength(FB_PIN, GPIO_DRIVE_STRENGTH_2MA);
gpio_set_slew_rate(FB_PIN, GPIO_SLEW_RATE_SLOW);
PIO->input_sync_bypass = 1u << RX_PIN;
const uint16_t insn[] = {
pio_encode_mov(pio_isr, pio_null),
pio_encode_in(pio_y, 4),
@ -209,8 +207,8 @@ static void init_adder()
* Should wrap here.
* Jump to this portion must be inserted from the outside.
*/
pio_encode_in(pio_y, 32),
pio_encode_in(pio_x, 32),
pio_encode_in(pio_x, 16),
pio_encode_in(pio_y, 16),
pio_encode_out(pio_pc, 4),
};
@ -438,42 +436,66 @@ inline static uint32_t pio_sm_get_blocking_unsafe(pio_hw_t *pio, int sm)
inline static int nextI()
{
static int prevI2, prevI1, prevI;
static uint16_t py, px;
int sI2 = pio_sm_get_blocking_unsafe(PIO, SM_COS);
uint32_t yx = pio_sm_get_blocking_unsafe(PIO, SM_COS);
uint16_t y = yx >> 16;
uint16_t x = yx;
int I2 = sI2 - prevI2;
prevI2 = sI2;
uint16_t ny = py - y;
uint16_t nx = px - x;
int sI1 = pio_sm_get_blocking_unsafe(PIO, SM_COS);
int I1 = sI1 - prevI1;
prevI1 = sI1;
py = y;
px = x;
int sI = I2 + I2 + I1;
int I = sI - prevI;
prevI = sI;
int s = ((int)ny << 1) + (int)nx;
int s0 = s;
return I;
static int a1, a2;
s = s0 - a2;
a2 = a1;
a1 = s0;
s0 = s;
static int b1, b2;
s = s0 - b2;
b2 = b1;
b1 = s0;
s0 = s;
return s >> 2;
}
inline static int nextQ()
{
static int prevQ2, prevQ1, prevQ;
static uint16_t py, px;
int sQ2 = pio_sm_get_blocking_unsafe(PIO, SM_SIN);
uint32_t yx = pio_sm_get_blocking_unsafe(PIO, SM_SIN);
uint16_t y = yx >> 16;
uint16_t x = yx;
int Q2 = sQ2 - prevQ2;
prevQ2 = sQ2;
uint16_t ny = py - y;
uint16_t nx = px - x;
int sQ1 = pio_sm_get_blocking_unsafe(PIO, SM_SIN);
int Q1 = sQ1 - prevQ1;
prevQ1 = sQ1;
py = y;
px = x;
int sQ = Q2 + Q2 + Q1;
int Q = sQ - prevQ;
prevQ = sQ;
int s = ((int)ny << 1) + (int)nx;
int s0 = s;
return Q;
static int a1, a2;
s = s0 - a2;
a2 = a1;
a1 = s0;
s0 = s;
static int b1, b2;
s = s0 - b2;
b2 = b1;
b1 = s0;
s0 = s;
return s >> 2;
}
static void rf_rx(void)