mirror of
https://github.com/hubaldv/bioz-firmware-rs.git
synced 2025-12-06 05:01:18 +00:00
Added num_complex instead of custom complex struct.
This commit is contained in:
55
Cargo.lock
generated
55
Cargo.lock
generated
@@ -75,7 +75,7 @@ dependencies = [
|
|||||||
"embassy-usb",
|
"embassy-usb",
|
||||||
"embedded-hal 1.0.0",
|
"embedded-hal 1.0.0",
|
||||||
"heapless 0.9.1",
|
"heapless 0.9.1",
|
||||||
"libm",
|
"num",
|
||||||
"panic-probe",
|
"panic-probe",
|
||||||
"postcard-rpc",
|
"postcard-rpc",
|
||||||
"static_cell",
|
"static_cell",
|
||||||
@@ -776,6 +776,58 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d"
|
checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
|
||||||
|
dependencies = [
|
||||||
|
"num-complex",
|
||||||
|
"num-integer",
|
||||||
|
"num-iter",
|
||||||
|
"num-rational",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-complex"
|
||||||
|
version = "0.4.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.46"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-iter"
|
||||||
|
version = "0.1.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-rational"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
|
||||||
|
dependencies = [
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.19"
|
version = "0.2.19"
|
||||||
@@ -783,6 +835,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
|
"libm",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ bitflags = "2.9.4"
|
|||||||
postcard-rpc = {version = "0.11.15", features = ["embassy-usb-0_4-server", "defmt"]}
|
postcard-rpc = {version = "0.11.15", features = ["embassy-usb-0_4-server", "defmt"]}
|
||||||
bioz-icd-rs = {path = "../bioz-icd-rs"}
|
bioz-icd-rs = {path = "../bioz-icd-rs"}
|
||||||
|
|
||||||
libm = { version = "0.2.15" }
|
# libm = { version = "0.2.15" }
|
||||||
|
|
||||||
|
num = {version = "0.4.3", default-features = false, features = ["libm"]}
|
||||||
|
|
||||||
heapless = { version = "0.9.1" }
|
heapless = { version = "0.9.1" }
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ use static_cell::StaticCell;
|
|||||||
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use num::complex::Complex;
|
||||||
|
|
||||||
use crate::ad5940::*;
|
use crate::ad5940::*;
|
||||||
use crate::ad5940_registers::*;
|
use crate::ad5940_registers::*;
|
||||||
|
|
||||||
@@ -386,14 +388,6 @@ pub async fn impedance_setup_readout_task(mut pin: ExtiInput<'static>, impedance
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern crate libm;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
|
||||||
pub struct Complex {
|
|
||||||
real: i32,
|
|
||||||
imag: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ImpedanceResult {
|
pub struct ImpedanceResult {
|
||||||
pub magnitude: f32,
|
pub magnitude: f32,
|
||||||
@@ -410,29 +404,20 @@ fn sign_extend_18bit(val: u32) -> i32 {
|
|||||||
|
|
||||||
/// Calculate magnitude and phase of Rz using Rcal reference
|
/// Calculate magnitude and phase of Rz using Rcal reference
|
||||||
pub fn calculate_impedance(data: [u32; 4]) -> ImpedanceResult {
|
pub fn calculate_impedance(data: [u32; 4]) -> ImpedanceResult {
|
||||||
let mut signed_data = [0i32; 4];
|
let dft_rcal = Complex::new(
|
||||||
for (i, &val) in data.iter().enumerate() {
|
sign_extend_18bit(data[0]) as f32,
|
||||||
signed_data[i] = sign_extend_18bit(val);
|
sign_extend_18bit(data[1]) as f32
|
||||||
}
|
);
|
||||||
|
let dft_rz = Complex::new(
|
||||||
|
sign_extend_18bit(data[2]) as f32,
|
||||||
|
sign_extend_18bit(data[3]) as f32
|
||||||
|
);
|
||||||
|
|
||||||
let dft_rcal = Complex {
|
let rcal_mag = dft_rcal.norm();
|
||||||
real: signed_data[0],
|
let rz_mag = dft_rz.norm();
|
||||||
imag: signed_data[1],
|
|
||||||
};
|
|
||||||
|
|
||||||
let dft_rz = Complex {
|
let rcal_phase = dft_rcal.arg();
|
||||||
real: signed_data[2],
|
let rz_phase = dft_rz.arg();
|
||||||
imag: signed_data[3],
|
|
||||||
};
|
|
||||||
|
|
||||||
let rcal_mag = libm::sqrtf((dft_rcal.real as f32) * (dft_rcal.real as f32)
|
|
||||||
+ (dft_rcal.imag as f32) * (dft_rcal.imag as f32));
|
|
||||||
|
|
||||||
let rz_mag = libm::sqrtf((dft_rz.real as f32) * (dft_rz.real as f32)
|
|
||||||
+ (dft_rz.imag as f32) * (dft_rz.imag as f32));
|
|
||||||
|
|
||||||
let rcal_phase = libm::atan2f(-(dft_rcal.imag as f32), dft_rcal.real as f32);
|
|
||||||
let rz_phase = libm::atan2f(-(dft_rz.imag as f32), dft_rz.real as f32);
|
|
||||||
|
|
||||||
let magnitude = (rcal_mag / rz_mag) * RCAL_VAL;
|
let magnitude = (rcal_mag / rz_mag) * RCAL_VAL;
|
||||||
let phase = rcal_phase - rz_phase;
|
let phase = rcal_phase - rz_phase;
|
||||||
|
|||||||
Reference in New Issue
Block a user