Accumulate DC average for audio signal.

This commit is contained in:
wb2osz 2017-12-16 10:10:36 -05:00
parent 22c810e442
commit 5b00875549
2 changed files with 16 additions and 0 deletions

View File

@ -292,6 +292,14 @@ unsigned char is_crc_in_queue(unsigned int chan, unsigned int crc) {
*
*------------------------------------------------------------------------------*/
static float dc_average[MAX_CHANS];
int multi_modem_get_dc_average (int chan)
{
// Scale to +- 200 so it will like the deviation measurement.
return ( (int) ((float)(dc_average[chan]) * (200.0f / 32767.0f) ) );
}
__attribute__((hot))
void multi_modem_process_sample (int chan, int audio_sample)
@ -300,6 +308,12 @@ void multi_modem_process_sample (int chan, int audio_sample)
int subchan;
static int i = 0; /* for interleaving among multiple demodulators. */
// Accumulate an average DC bias level.
// Shouldn't happen with a soundcard but could with mistuned SDR.
dc_average[chan] = dc_average[chan] * 0.999f + (float)audio_sample * 0.001f;
// TODO: temp debug, remove this.
assert (save_audio_config_p->achan[chan].num_subchan > 0 && save_audio_config_p->achan[chan].num_subchan <= MAX_SUBCHANS);

View File

@ -14,6 +14,8 @@ void multi_modem_init (struct audio_s *pmodem);
void multi_modem_process_sample (int c, int audio_sample);
int multi_modem_get_dc_average (int chan);
void multi_modem_process_rec_frame (int chan, int subchan, int slice, unsigned char *fbuf, int flen, alevel_t alevel, retry_t retries);
#endif