complex/cossin: decouple modules

This commit is contained in:
Robert Jördens 2021-02-01 12:07:03 +01:00
parent 2d43b8970b
commit 0fd4b167b4
2 changed files with 8 additions and 8 deletions

View File

@ -1,7 +1,6 @@
use super::{atan2, cossin};
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Default, PartialEq, Debug, Deserialize, Serialize)]
#[derive(Copy, Clone, Default, PartialEq, Debug)]
pub struct Complex<T>(pub T, pub T);
impl Complex<i32> {
@ -17,7 +16,8 @@ impl Complex<i32> {
/// ```
#[inline(always)]
pub fn from_angle(angle: i32) -> Complex<i32> {
cossin(angle)
let (c, s) = cossin(angle);
Complex(c, s)
}
/// Return the absolute square (the squared magnitude).

View File

@ -1,4 +1,3 @@
use super::Complex;
use core::f64::consts::PI;
include!(concat!(env!("OUT_DIR"), "/cossin_table.rs"));
@ -11,10 +10,10 @@ include!(concat!(env!("OUT_DIR"), "/cossin_table.rs"));
/// * `phase` - 32-bit phase.
///
/// # Returns
/// The cos and sin values of the provided phase as a `Complex<i32>`
/// value. With a 7-bit deep LUT there is 1e-5 max and 6e-8 RMS error
/// The cos and sin values of the provided phase as a `(i32, i32)`
/// tuple. With a 7-bit deep LUT there is 1e-5 max and 6e-8 RMS error
/// in each quadrature over 20 bit phase.
pub fn cossin(phase: i32) -> Complex<i32> {
pub fn cossin(phase: i32) -> (i32, i32) {
// Phase bits excluding the three highes MSB
const OCTANT_BITS: usize = 32 - 3;
@ -69,12 +68,13 @@ pub fn cossin(phase: i32) -> Complex<i32> {
sin *= -1;
}
Complex(cos, sin)
(cos, sin)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::Complex;
use core::f64::consts::PI;
#[test]