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
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
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