[fix](trx-backend-soapysdr): lower wfm internal rate ceiling
Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -365,6 +365,14 @@ pub struct ChannelDsp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ChannelDsp {
|
impl ChannelDsp {
|
||||||
|
fn clamp_bandwidth_for_mode(mode: &RigMode, bandwidth_hz: u32) -> u32 {
|
||||||
|
if *mode == RigMode::WFM {
|
||||||
|
bandwidth_hz.min(192_000)
|
||||||
|
} else {
|
||||||
|
bandwidth_hz
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_channel_if_hz(&mut self, channel_if_hz: f64) {
|
pub fn set_channel_if_hz(&mut self, channel_if_hz: f64) {
|
||||||
self.channel_if_hz = channel_if_hz;
|
self.channel_if_hz = channel_if_hz;
|
||||||
self.mixer_phase_inc = if self.sdr_sample_rate == 0 {
|
self.mixer_phase_inc = if self.sdr_sample_rate == 0 {
|
||||||
@@ -385,7 +393,7 @@ impl ChannelDsp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let target_rate = if *mode == RigMode::WFM {
|
let target_rate = if *mode == RigMode::WFM {
|
||||||
audio_bandwidth_hz.max(audio_sample_rate.saturating_mul(4)).max(228_000)
|
audio_bandwidth_hz.max(audio_sample_rate.saturating_mul(4)).max(192_000)
|
||||||
} else {
|
} else {
|
||||||
audio_sample_rate.max(1)
|
audio_sample_rate.max(1)
|
||||||
};
|
};
|
||||||
@@ -395,6 +403,7 @@ impl ChannelDsp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn rebuild_filters(&mut self, reset_wfm_decoder: bool) {
|
fn rebuild_filters(&mut self, reset_wfm_decoder: bool) {
|
||||||
|
self.audio_bandwidth_hz = Self::clamp_bandwidth_for_mode(&self.mode, self.audio_bandwidth_hz);
|
||||||
let (next_decim_factor, channel_sample_rate) = Self::pipeline_rates(
|
let (next_decim_factor, channel_sample_rate) = Self::pipeline_rates(
|
||||||
&self.mode,
|
&self.mode,
|
||||||
self.sdr_sample_rate,
|
self.sdr_sample_rate,
|
||||||
@@ -459,6 +468,7 @@ impl ChannelDsp {
|
|||||||
pcm_tx: broadcast::Sender<Vec<f32>>,
|
pcm_tx: broadcast::Sender<Vec<f32>>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let output_channels = output_channels.max(1);
|
let output_channels = output_channels.max(1);
|
||||||
|
let audio_bandwidth_hz = Self::clamp_bandwidth_for_mode(mode, audio_bandwidth_hz);
|
||||||
let frame_size = if audio_sample_rate == 0 || frame_duration_ms == 0 {
|
let frame_size = if audio_sample_rate == 0 || frame_duration_ms == 0 {
|
||||||
960 * output_channels
|
960 * output_channels
|
||||||
} else {
|
} else {
|
||||||
@@ -557,7 +567,7 @@ impl ChannelDsp {
|
|||||||
///
|
///
|
||||||
/// Changes take effect on the next call to `process_block`.
|
/// Changes take effect on the next call to `process_block`.
|
||||||
pub fn set_filter(&mut self, bandwidth_hz: u32, taps: usize) {
|
pub fn set_filter(&mut self, bandwidth_hz: u32, taps: usize) {
|
||||||
self.audio_bandwidth_hz = bandwidth_hz;
|
self.audio_bandwidth_hz = Self::clamp_bandwidth_for_mode(&self.mode, bandwidth_hz);
|
||||||
self.fir_taps = taps.max(1);
|
self.fir_taps = taps.max(1);
|
||||||
self.rebuild_filters(false);
|
self.rebuild_filters(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user