Skip to main content

oxifft/reodft/
rodft.rs

1//! Real Odd DFT (Discrete Sine Transform variants).
2//!
3//! RODFT00 = DST-I
4//! RODFT01 = DST-III
5//! RODFT10 = DST-II
6//! RODFT11 = DST-IV
7//!
8//! These are re-exports of the implementations in `rdft::solvers::r2r`.
9
10use crate::kernel::Float;
11use crate::rdft::solvers::{
12    dst1 as r2r_dst1, dst2 as r2r_dst2, dst3 as r2r_dst3, dst4 as r2r_dst4,
13};
14
15/// DST type.
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
17#[non_exhaustive]
18pub enum DstType {
19    /// DST-I (RODFT00)
20    I,
21    /// DST-II (RODFT10)
22    II,
23    /// DST-III (RODFT01)
24    III,
25    /// DST-IV (RODFT11)
26    IV,
27}
28
29/// Execute DST-I.
30pub fn dst_i<T: Float>(input: &[T], output: &mut [T]) {
31    r2r_dst1(input, output);
32}
33
34/// Execute DST-II.
35pub fn dst_ii<T: Float>(input: &[T], output: &mut [T]) {
36    r2r_dst2(input, output);
37}
38
39/// Execute DST-III.
40pub fn dst_iii<T: Float>(input: &[T], output: &mut [T]) {
41    r2r_dst3(input, output);
42}
43
44/// Execute DST-IV.
45pub fn dst_iv<T: Float>(input: &[T], output: &mut [T]) {
46    r2r_dst4(input, output);
47}