Browse Source

Split inverse into backward and inverse

master
Ivan Ukhov 9 years ago
parent
commit
fd89df9eab
  1. 15
      src/complex.rs
  2. 14
      src/real.rs
  3. 4
      tests/lib.rs

15
src/complex.rs

@ -14,16 +14,23 @@ pub fn forward(data: &mut [c64]) {
perform(data, n, false);
}
/// Perform the backward transform.
///
/// The number of points should be a power of two.
pub fn backward(data: &mut [c64]) {
let n = power_of_two!(data);
rearrange(data, n);
perform(data, n, true);
}
/// Perform the inverse transform.
///
/// The number of points should be a power of two.
pub fn inverse(data: &mut [c64], scaling: bool) {
pub fn inverse(data: &mut [c64]) {
let n = power_of_two!(data);
rearrange(data, n);
perform(data, n, true);
if scaling {
scale(data, n);
}
scale(data, n);
}
fn rearrange(data: &mut [c64], n: usize) {

14
src/real.rs

@ -28,14 +28,24 @@ pub fn forward(data: &mut [f64]) {
compose(data, n, false);
}
/// Perform the backward transform.
///
/// The number of points should be a power of two. The data should be packed as
/// described in `real::forward`.
pub fn backward(data: &mut [f64]) {
let (data, n) = reinterpret!(data);
compose(data, n, true);
::complex::backward(data);
}
/// Perform the inverse transform.
///
/// The number of points should be a power of two. The data should be packed as
/// described in `real::forward`.
pub fn inverse(data: &mut [f64], scaling: bool) {
pub fn inverse(data: &mut [f64]) {
let (data, n) = reinterpret!(data);
compose(data, n, true);
::complex::inverse(data, scaling);
::complex::inverse(data);
}
/// Unpack a compressed representation produced by `real::forward`.

4
tests/lib.rs

@ -16,7 +16,7 @@ fn complex_forward() {
#[test]
fn complex_inverse() {
let mut data = fixtures::FREQUENCY_DATA_FOR_COMPLEX.to_vec();
fft::complex::inverse(as_c64_mut(&mut data), true);
fft::complex::inverse(as_c64_mut(&mut data));
assert::close(&data, &fixtures::TIME_DATA[..], 1e-14);
}
@ -39,7 +39,7 @@ fn real_forward() {
#[test]
fn real_inverse() {
let mut data = fixtures::FREQUENCY_DATA_FOR_REAL.to_vec();
fft::real::inverse(&mut data, true);
fft::real::inverse(&mut data);
assert::close(&data, &fixtures::TIME_DATA[..], 1e-14);
}

Loading…
Cancel
Save