Optimize frequency shift

This commit is contained in:
Jan Hamal Dvořák 2024-07-02 13:00:14 +02:00
parent e694692a8c
commit cb47fd3aa5

View file

@ -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;