From 17389d28c49305ffc1cf33080dead6d30470cdb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= Date: Fri, 1 Mar 2024 14:44:13 +0100 Subject: [PATCH] Prevent overflow with jittery sampling --- src/main.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index 05456df..08c7300 100644 --- a/src/main.c +++ b/src/main.c @@ -556,8 +556,10 @@ static void rf_tx_stop() static void rf_rx(void) { - const int amp_max = CLK_SYS_HZ / 2 / BANDWIDTH * DECIMATION + 16; - const int amp_scale = INT_MAX / amp_max; + const int amp_max = CLK_SYS_HZ / 2 / BANDWIDTH * DECIMATION; + + /* Scale down 2× to accomodate for jitter. */ + const int amp_scale = INT_MAX / amp_max / 2; static int8_t block[IQ_BLOCK_LEN]; uint32_t prev_transfers = dma_hw->ch[dma_ch_in_cos].transfer_count; @@ -788,7 +790,8 @@ static void do_rx(int rx_pin, int bias_pin, float freq, char mode) fwrite(block, sizeof block, 1, stdout); fflush(stdout); } else { - float rssi = 10.0f * log10f(powf((float)agc / (float)INT_MAX, 2)); + float rssi = + 10.0f * log10f(powf((float)agc / (float)INT_MAX * 2, 2)); for (int i = 0; i < IQ_BLOCK_LEN / 2; i += 8) { int I = block[i * 2];