From b6e22b576bb9c39fb6104c853e14a20ca609a512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Mon, 1 Feb 2021 17:18:10 +0100 Subject: [PATCH] iir: add const fn new() --- dsp/src/iir.rs | 9 +++++++++ src/bin/dual-iir.rs | 4 ++-- src/bin/lockin-external.rs | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/dsp/src/iir.rs b/dsp/src/iir.rs index 8d0dbe4..c8ef6ba 100644 --- a/dsp/src/iir.rs +++ b/dsp/src/iir.rs @@ -48,6 +48,15 @@ pub struct IIR { } impl IIR { + pub const fn new(gain: f32, y_min: f32, y_max: f32) -> Self { + Self { + ba: Vec5([gain, 0., 0., 0., 0.]), + y_offset: 0., + y_min: y_min, + y_max: y_max, + } + } + /// Configures IIR filter coefficients for proportional-integral behavior /// with gain limit. /// diff --git a/src/bin/dual-iir.rs b/src/bin/dual-iir.rs index d9ca445..e28465b 100644 --- a/src/bin/dual-iir.rs +++ b/src/bin/dual-iir.rs @@ -17,7 +17,7 @@ use stabilizer::{hardware, server}; use dsp::iir; use hardware::{Adc0Input, Adc1Input, Dac0Output, Dac1Output, AFE0, AFE1}; -const SCALE: f32 = i16::MAX as f32; +const SCALE: f32 = i16::MAX as _; const TCP_RX_BUFFER_SIZE: usize = 8192; const TCP_TX_BUFFER_SIZE: usize = 8192; @@ -36,7 +36,7 @@ const APP: () = { // Format: iir_state[ch][cascade-no][coeff] #[init([[iir::Vec5([0.; 5]); IIR_CASCADE_LENGTH]; 2])] iir_state: [[iir::Vec5; IIR_CASCADE_LENGTH]; 2], - #[init([[iir::IIR { ba: iir::Vec5([1., 0., 0., 0., 0.]), y_offset: 0., y_min: -SCALE, y_max: SCALE }; IIR_CASCADE_LENGTH]; 2])] + #[init([[iir::IIR::new(1., -SCALE, SCALE); IIR_CASCADE_LENGTH]; 2])] iir_ch: [[iir::IIR; IIR_CASCADE_LENGTH]; 2], } diff --git a/src/bin/lockin-external.rs b/src/bin/lockin-external.rs index 72d3fc9..2e7f012 100644 --- a/src/bin/lockin-external.rs +++ b/src/bin/lockin-external.rs @@ -21,7 +21,7 @@ use hardware::{ Adc0Input, Adc1Input, Dac0Output, Dac1Output, InputStamper, AFE0, AFE1, }; -const SCALE: f32 = i16::MAX as f32; +const SCALE: f32 = i16::MAX as _; const TCP_RX_BUFFER_SIZE: usize = 8192; const TCP_TX_BUFFER_SIZE: usize = 8192; @@ -40,7 +40,7 @@ const APP: () = { // Format: iir_state[ch][cascade-no][coeff] #[init([[iir::Vec5([0.; 5]); IIR_CASCADE_LENGTH]; 2])] iir_state: [[iir::Vec5; IIR_CASCADE_LENGTH]; 2], - #[init([[iir::IIR { ba: iir::Vec5([1., 0., 0., 0., 0.]), y_offset: 0., y_min: -SCALE, y_max: SCALE }; IIR_CASCADE_LENGTH]; 2])] + #[init([[iir::IIR::new(1./(1 << 16) as f32, -SCALE, SCALE); IIR_CASCADE_LENGTH]; 2])] iir_ch: [[iir::IIR; IIR_CASCADE_LENGTH]; 2], timestamper: InputStamper,