Fix RTL RMS so it does't return Jank Values;

This commit is contained in:
lwvmobile
2023-08-07 03:43:39 -04:00
parent 81abd65da1
commit d8395fff59
3 changed files with 11 additions and 10 deletions

View File

@@ -280,7 +280,7 @@ typedef struct
int rtl_udp_port;
int rtl_bandwidth;
int rtl_started;
int rtl_rms;
long int rtl_rms;
int monitor_input_audio;
int pulse_raw_rate_in;
int pulse_raw_rate_out;
@@ -1229,7 +1229,7 @@ void cleanup_rtlsdr_stream();
int get_rtlsdr_sample(int16_t *sample, dsd_opts * opts, dsd_state * state);
void rtlsdr_sighandler();
void rtl_dev_tune(dsd_opts * opts, long int frequency);
int rtl_return_rms();
long int rtl_return_rms();
void rtl_clean_queue();
#endif
//DMR TRELLIS

View File

@@ -2290,7 +2290,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
printw (" Gain: %idB;", opts->rtl_gain_value);
printw (" PPM: %i;", opts->rtlsdr_ppm_error);
printw (" SQ: %i;", opts->rtl_squelch_level);
printw (" RMS: %04i;", opts->rtl_rms);
printw (" RMS: %04li;", opts->rtl_rms);
printw (" BW: %i kHz;", opts->rtl_bandwidth);
printw (" FRQ: %i;", opts->rtlsdr_center_freq);
if (opts->rtl_udp_port != 0) printw ("\n| External RTL Tuning on UDP Port: %i", opts->rtl_udp_port);

View File

@@ -464,10 +464,11 @@ void dc_block_filter(struct demod_state *fm)
fm->dc_avg = avg;
}
int rms(int16_t *samples, int len, int step)
long int rms(int16_t *samples, int len, int step)
/* largely lifted from rtl_power */
{
int i;
long int rms;
long p, t, s;
double dc, err;
@@ -481,7 +482,10 @@ int rms(int16_t *samples, int len, int step)
dc = (double)(t*step) / (double)len;
err = t * 2 * dc - dc * dc * len;
return (int)sqrt((p-err) / len);
rms = (long int)sqrt((p-err) / len);
//going with a value that's easy to figure out when its done the thing
if (rms < 0){ rms = 999; }
return rms;
}
void full_demod(struct demod_state *d)
@@ -1123,13 +1127,10 @@ void rtl_dev_tune(dsd_opts * opts, long int frequency)
}
//return RMS value (root means square) power level -- used as soft squelch inside of framesync
int rtl_return_rms()
long int rtl_return_rms()
{
int sr = 0;
long int sr = 0;
sr = rms(demod.lowpassed, demod.lp_len, 1);
// 'Fix' potential negative value overflow from the rms function -- Observed in Windows builds
sr = abs(sr);
if (sr > 9999) sr = 9999;
return (sr);
}