diff --git a/dsp/src/complex.rs b/dsp/src/complex.rs index 3349460..dc36349 100644 --- a/dsp/src/complex.rs +++ b/dsp/src/complex.rs @@ -8,6 +8,8 @@ pub trait ComplexExt { fn abs_sqr(&self) -> U; fn log2(&self) -> T; fn arg(&self) -> T; + fn saturating_add(&self, other: Self) -> Self; + fn saturating_sub(&self, other: Self) -> Self; } impl ComplexExt for Complex { @@ -23,7 +25,7 @@ impl ComplexExt for Complex { /// ``` fn from_angle(angle: i32) -> Self { let (c, s) = cossin(angle); - Self { re: c, im: s } + Self::new(c, s) } /// Return the absolute square (the squared magnitude). @@ -85,6 +87,15 @@ impl ComplexExt for Complex { fn arg(&self) -> i32 { atan2(self.im, self.re) } + + fn saturating_add(&self, other: Self) -> Self { + Self::new(self.re.saturating_add(other.re), self.im.saturating_add(other.im)) + } + + fn saturating_sub(&self, other: Self) -> Self { + Self::new(self.re.saturating_sub(other.re), self.im.saturating_sub(other.im)) + } + } /// Full scale fixed point multiplication.