Radiosonde beep tone tweaks (#2020)

* Tweak RSSI audio beep frequency range
* Clang & changed min freq
* Save beep/log/crc settings in .ini file
* Update copyright string
* Added generic audio_beep message
This commit is contained in:
Mark Thompson
2024-03-21 04:14:54 -05:00
committed by GitHub
parent 8391ca8052
commit 4aeaf94d2d
9 changed files with 99 additions and 36 deletions

View File

@@ -155,7 +155,7 @@ void MicTXProcessor::on_message(const Message* const msg) {
break;
case Message::ID::RequestSignal:
if (request_message.signal == RequestSignalMessage::Signal::BeepRequest) {
if (request_message.signal == RequestSignalMessage::Signal::RogerBeepRequest) {
beep_index = 0;
beep_timer = 0;
play_beep = true;

View File

@@ -57,24 +57,15 @@ void SondeProcessor::execute(const buffer_c8_t& buffer) {
void SondeProcessor::on_message(const Message* const msg) {
switch (msg->id) {
case Message::ID::RequestSignal:
if ((*reinterpret_cast<const RequestSignalMessage*>(msg)).signal == RequestSignalMessage::Signal::BeepRequest) {
float rssi_ratio = (float)last_rssi / (float)RSSI_CEILING;
uint32_t beep_duration = 0;
on_signal_message(*reinterpret_cast<const RequestSignalMessage*>(msg));
break;
if (rssi_ratio <= PROPORTIONAL_BEEP_THRES) {
beep_duration = BEEP_MIN_DURATION;
} else if (rssi_ratio < 1) {
beep_duration = (int)rssi_ratio * BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
} else {
beep_duration = BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
}
audio::dma::beep_start(beep_freq, AUDIO_SAMPLE_RATE, beep_duration);
}
case Message::ID::AudioBeep:
on_beep_message(*reinterpret_cast<const AudioBeepMessage*>(msg));
break;
case Message::ID::PitchRSSIConfigure:
pitch_rssi_config(*reinterpret_cast<const PitchRSSIConfigureMessage*>(msg));
on_pitch_rssi_config(*reinterpret_cast<const PitchRSSIConfigureMessage*>(msg));
break;
default:
@@ -82,10 +73,31 @@ void SondeProcessor::on_message(const Message* const msg) {
}
}
void SondeProcessor::pitch_rssi_config(const PitchRSSIConfigureMessage& message) {
void SondeProcessor::on_signal_message(const RequestSignalMessage& message) {
if (message.signal == RequestSignalMessage::Signal::RSSIBeepRequest) {
float rssi_ratio = (float)last_rssi / RSSI_CEILING;
uint32_t beep_duration = 0;
if (rssi_ratio <= PROPORTIONAL_BEEP_THRES) {
beep_duration = BEEP_MIN_DURATION;
} else if (rssi_ratio < 1) {
beep_duration = rssi_ratio * BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
} else {
beep_duration = BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
}
audio::dma::beep_start(beep_freq, AUDIO_SAMPLE_RATE, beep_duration);
}
}
void SondeProcessor::on_beep_message(const AudioBeepMessage& message) {
audio::dma::beep_start(message.freq, AUDIO_SAMPLE_RATE, message.duration_ms);
}
void SondeProcessor::on_pitch_rssi_config(const PitchRSSIConfigureMessage& message) {
pitch_rssi_enabled = message.enabled;
beep_freq = (int)((float)message.rssi * (float)RSSI_PITCH_WEIGHT + (float)BEEP_BASE_FREQ);
beep_freq = message.rssi * RSSI_PITCH_WEIGHT + BEEP_BASE_FREQ;
last_rssi = message.rssi;
}

View File

@@ -97,10 +97,12 @@
#define BEEP_MIN_DURATION 60
#define BEEP_DURATION_RANGE 100
#define BEEP_BASE_FREQ 200
#define BEEP_BASE_FREQ 400 // Lowest audible freq for some PortaPack speakers
#define BEEP_MAX_FREQ 8000 // Highest audible freq for some PortaPack speakers
#define BEEP_SIMPLE_FREQ 1000
#define RSSI_CEILING 1000
#define PROPORTIONAL_BEEP_THRES 0.8
#define RSSI_PITCH_WEIGHT 0.5
#define RSSI_PITCH_WEIGHT (float(BEEP_MAX_FREQ - BEEP_BASE_FREQ) / RSSI_CEILING)
#define AUDIO_SAMPLE_RATE 24000
class SondeProcessor : public BasebandProcessor {
@@ -168,7 +170,9 @@ class SondeProcessor : public BasebandProcessor {
baseband_fs, this, baseband::Direction::Receive, /*auto_start*/ false};
RSSIThread rssi_thread{};
void pitch_rssi_config(const PitchRSSIConfigureMessage& message);
void on_signal_message(const RequestSignalMessage& message);
void on_beep_message(const AudioBeepMessage& message);
void on_pitch_rssi_config(const PitchRSSIConfigureMessage& message);
};
#endif /*__PROC_ERT_H__*/