From cb47fd3aa52022b47d273390c836b5196eb634a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= Date: Tue, 2 Jul 2024 13:00:14 +0200 Subject: [PATCH] Optimize frequency shift --- src/main.c | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/main.c b/src/main.c index a450aeb..3b39512 100644 --- a/src/main.c +++ b/src/main.c @@ -500,7 +500,7 @@ static void rf_rx(void) * gain but keep it slightly below the maximum to make * sure we do not overshoot often. */ - max_amplitude = max_amplitude / 2; + max_amplitude /= 2; /* * We are allowing the counters to only go as high @@ -509,40 +509,38 @@ static void rf_rx(void) max_amplitude /= sample_rate; for (int i = 0; i < IQ_SAMPLES; i++) { - uint32_t cos_neg = *cos_ptr++; - uint32_t cos_pos = *cos_ptr++; - int I1 = cos_neg - cos_pos; + int sI = 0, sQ = 0; - cos_neg = *cos_ptr++; - cos_pos = *cos_ptr++; - int I2 = cos_neg - cos_pos; + /* + * I: +I1 -I3 +Q2 -Q4 + * Q: +Q1 -Q3 -I2 +I4 + */ + sI += *cos_ptr++; + sI -= *cos_ptr++; - cos_neg = *cos_ptr++; - cos_pos = *cos_ptr++; - int I3 = cos_neg - cos_pos; + sQ -= *cos_ptr++; + sQ += *cos_ptr++; - cos_neg = *cos_ptr++; - cos_pos = *cos_ptr++; - int I4 = cos_neg - cos_pos; + sI -= *cos_ptr++; + sI += *cos_ptr++; - uint32_t sin_neg = *sin_ptr++; - uint32_t sin_pos = *sin_ptr++; - int Q1 = sin_neg - sin_pos; + sQ += *cos_ptr++; + sQ -= *cos_ptr++; - sin_neg = *sin_ptr++; - sin_pos = *sin_ptr++; - int Q2 = sin_neg - sin_pos; + sQ += *sin_ptr++; + sQ -= *sin_ptr++; - sin_neg = *sin_ptr++; - sin_pos = *sin_ptr++; - int Q3 = sin_neg - sin_pos; + sI += *sin_ptr++; + sI -= *sin_ptr++; - sin_neg = *sin_ptr++; - sin_pos = *sin_ptr++; - int Q4 = sin_neg - sin_pos; + sQ -= *sin_ptr++; + sQ += *sin_ptr++; - int64_t I = I1 - I3 + Q2 - Q4; - int64_t Q = Q1 - Q3 - I2 + I4; + sI -= *sin_ptr++; + sI += *sin_ptr++; + + int64_t I = sI; + int64_t Q = sQ; I *= gain; I /= max_amplitude;