nimphea/cmsis/dsp_transforms

Source   Edit  

CMSIS-DSP Transform Functions

This module provides optimized Fast Fourier Transforms (FFT). FFT instances are designed to be static-allocated with compile-time known sizes. Zero heap allocation is used.

Types

CfftInstanceF32 {.importcpp: "arm_cfft_instance_f32", header: "arm_math.h".} = object
  fftLen*: uint16
  pTwiddle*: ptr float32_t
  pBitRevTable*: ptr uint16
  bitRevLength*: uint16
Source   Edit  
FftInstance[N] = object
  instance*: CfftInstanceF32
A compile-time sized Complex FFT instance. N must be a power of 2: 16, 32, 64, ..., 4096. Source   Edit  
RealFftInstance[N] = object
  instance*: RfftFastInstanceF32
A compile-time sized Real FFT instance. N must be a power of 2: 32, 64, 128, ..., 4096. Source   Edit  
RfftFastInstanceF32 {.importcpp: "arm_rfft_fast_instance_f32",
                      header: "arm_math.h".} = object
  Sint*: CfftInstanceF32
  fftLenRFFT*: uint16
  pTwiddleRFFT*: ptr float32_t
Source   Edit  

Procs

proc arm_cfft_f32(S: ptr CfftInstanceF32; p1: ptr float32_t; ifftFlag: uint8;
                  bitReverseFlag: uint8) {.importc, header: "arm_math.h",
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc arm_cfft_init_f32(S: ptr CfftInstanceF32; fftLen: uint16): ArmStatus {.
    importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc arm_rfft_fast_f32(S: ptr RfftFastInstanceF32; pIn: ptr float32_t;
                       pOut: ptr float32_t; ifftFlag: uint8) {.importc,
    header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc arm_rfft_fast_init_f32(S: ptr RfftFastInstanceF32; fftLen: uint16): ArmStatus {.
    importc, header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc forward[N: static int](fft: var FftInstance[N];
                            data: var openArray[float32]): ArmStatus {.inline.}
Perform forward FFT in-place.
data must contain 2*N floats (interleaved real and imaginary).

**Note:** Returns ARM_MATH_ARGUMENT_ERROR if buffer is too small.
Source   Edit  
proc forward[N: static int](fft: var RealFftInstance[N];
                            input: openArray[float32];
                            output: var openArray[float32]): ArmStatus {.inline.}

Perform forward Real FFT. input must contain N real samples. output must contain N floats (complex result in specific format).

Note: Returns ARM_MATH_ARGUMENT_ERROR if buffers are too small.

Source   Edit  
proc init[N: static int](fft: var FftInstance[N]): ArmStatus

Initialize FFT instance for size N.

Returns: ArmStatus indicating success or error

  • ARM_MATH_SUCCESS: Initialization successful
  • ARM_MATH_ARGUMENT_ERROR: FFT size is not supported
Source   Edit  
proc init[N: static int](fft: var RealFftInstance[N]): ArmStatus

Initialize Real FFT instance for size N.

Returns: ArmStatus indicating success or error

  • ARM_MATH_SUCCESS: Initialization successful
  • ARM_MATH_ARGUMENT_ERROR: FFT size is not supported
Source   Edit  
proc inverse[N: static int](fft: var FftInstance[N];
                            data: var openArray[float32]): ArmStatus {.inline.}
Perform inverse FFT in-place.
data must contain 2*N floats (interleaved real and imaginary).

**Note:** Returns ARM_MATH_ARGUMENT_ERROR if buffer is too small.
Source   Edit  
proc inverse[N: static int](fft: var RealFftInstance[N];
                            input: openArray[float32];
                            output: var openArray[float32]): ArmStatus {.inline.}

Perform inverse Real FFT. input contains frequency data (N floats). output will contain N real samples.

Note: Returns ARM_MATH_ARGUMENT_ERROR if buffers are too small.

Source   Edit