From: Kostya Shishkov Date: Thu, 16 Jun 2022 14:32:34 +0000 (+0200) Subject: codec-support: add division support for FFTComplex X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=03d914bb5e76c7e83cf98a501238472732bf11c8;p=nihav.git codec-support: add division support for FFTComplex --- diff --git a/nihav-codec-support/src/dsp/fft.rs b/nihav-codec-support/src/dsp/fft.rs index 4629f75..9a80509 100644 --- a/nihav-codec-support/src/dsp/fft.rs +++ b/nihav-codec-support/src/dsp/fft.rs @@ -1,6 +1,6 @@ //! FFT and RDFT implementation. use std::f32::{self, consts}; -use std::ops::{Not, Neg, Add, AddAssign, Sub, SubAssign, Mul, MulAssign}; +use std::ops::{Not, Neg, Add, AddAssign, Sub, SubAssign, Mul, MulAssign, Div}; use std::fmt; /// Complex number. @@ -26,6 +26,14 @@ impl FFTComplex { pub fn scale(self, scale: f32) -> Self { FFTComplex { re: self.re * scale, im: self.im * scale } } + /// Returns squared modulus value of the complex number. + pub fn sq_modulus(self) -> f32 { + self.re * self.re + self.im * self.im + } + /// Returns reciprocal of the complex number. + pub fn reciprocal(self) -> Self { + !self.scale(self.sq_modulus()) + } } impl Neg for FFTComplex { @@ -87,6 +95,13 @@ impl MulAssign for FFTComplex { } } +impl Div for FFTComplex { + type Output = FFTComplex; + fn div(self, other: Self) -> Self::Output { + self * other.reciprocal() + } +} + impl fmt::Display for FFTComplex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "({}, {})", self.re, self.im)