LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
fft.c 文件参考

使用 radix-2 Cooley-Tukey 与 Bluestein chirp-z 实现任意长度 N 的 FFT. 更多...

#include <math.h>
#include <stdint.h>
#include <string.h>
#include "memory_bridge.h"
#include "internal.h"
#include "lmmc/config.h"
#include "lmmc/fft.h"
#include "lmmc/numeric_scalar.h"
fft.c 的引用(Include)关系图:

浏览该文件的源代码.

函数

lmmc_status_t lmmc_fft (lmmc_real_t *real, lmmc_real_t *imag, size_t n, int inverse)
 计算任意长度 N 点 DFT(正变换或逆变换).
lmmc_status_t lmmc_fft_forward (lmmc_real_t *real, lmmc_real_t *imag, size_t n)
 等价于 ::lmmc_fft(real, imag, n, 0) .
lmmc_status_t lmmc_fft_inverse (lmmc_real_t *real, lmmc_real_t *imag, size_t n)
 等价于 ::lmmc_fft(real, imag, n, 1) .
lmmc_status_t lmmc_fft_radix4_pad_into (const lmmc_real_t *real_in, const lmmc_real_t *imag_in, size_t n, lmmc_real_t *real_out, lmmc_real_t *imag_out, size_t *out_nfft)
 将长度 n 的输入零填充至不小于它的最小 4 的幂。

详细描述

使用 radix-2 Cooley-Tukey 与 Bluestein chirp-z 实现任意长度 N 的 FFT.

lmmc_fft,lmmc_fft_forward 与 lmmc_fft_inverse 处理任意 N, lmmc_fft_radix4_pad_into 提供显式填充接口.

分派规则:

  • N 为 4 的幂:使用现有 radix-4 路径
  • N 为 2 的幂:使用原地迭代 radix-2 Cooley-Tukey
  • 其他 N:使用 Bluestein chirp-z,并填充到不小于 2N-1 的 2 的幂
参见
James W. Cooley and John W. Tukey, "An Algorithm for the Machine Calculation of Complex Fourier Series," 1965.
Leo I. Bluestein, "A Linear Filtering Approach to the Computation of Discrete Fourier Transform," 1970.

在文件 fft.c 中定义.

函数说明

◆ lmmc_fft()

lmmc_status_t lmmc_fft ( lmmc_real_t * real,
lmmc_real_t * imag,
size_t n,
int inverse )

计算任意长度 N 点 DFT(正变换或逆变换).

N 为 4 的幂时使用 radix-4,其余 2 的幂使用 radix-2 Cooley-Tukey, 其他长度使用 Bluestein chirp-z 算法。

参数
[in,out]real实部数组,长度 n ;变换后就地覆盖.
[in,out]imag虚部数组,长度 n ;变换后就地覆盖.
[in]nFFT 长度,任意正整数.
[in]inverse非 0 时执行逆变换并归一化(除以 n).
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若 n == 0、指针为 NULL、数组重叠 或数组存储范围的地址计算溢出; LMMC_STATUS_ALLOCATION_FAILED 若 Bluestein 路径内存分配失败.
注解
两数组各覆写 n 个元素,写入前检查并拒绝重叠。 Bluestein 路径分配临时缓冲区并在返回前释放。

在文件 fft.c 第 266 行定义.

引用了 lmmc_fft(), lmmc_fft_radix4(), LMMC_STATUS_INVALID_ARGUMENT , 以及 LMMC_STATUS_OK.

被这些函数引用 lmmc_fft(), lmmc_fft_forward() , 以及 lmmc_fft_inverse().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_fft_forward()

lmmc_status_t lmmc_fft_forward ( lmmc_real_t * real,
lmmc_real_t * imag,
size_t n )

等价于 ::lmmc_fft(real, imag, n, 0) .

在文件 fft.c 第 293 行定义.

引用了 lmmc_fft() , 以及 lmmc_fft_forward().

被这些函数引用 lmmc_fft_forward().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_fft_inverse()

lmmc_status_t lmmc_fft_inverse ( lmmc_real_t * real,
lmmc_real_t * imag,
size_t n )

等价于 ::lmmc_fft(real, imag, n, 1) .

在文件 fft.c 第 297 行定义.

引用了 lmmc_fft() , 以及 lmmc_fft_inverse().

被这些函数引用 lmmc_fft_inverse().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_fft_radix4_pad_into()

lmmc_status_t lmmc_fft_radix4_pad_into ( const lmmc_real_t * real_in,
const lmmc_real_t * imag_in,
size_t n,
lmmc_real_t * real_out,
lmmc_real_t * imag_out,
size_t * out_nfft )

将长度 n 的输入零填充至不小于它的最小 4 的幂。

参数
[in]real_in输入实部数组,长度 n .
[in]imag_in输入虚部数组,长度 n .
[in]n输入长度.
[out]real_out输出实部数组,调用方需预分配至少由 lmmc_fft_radix4_next_size 得到的元素数.
[out]imag_out输出虚部数组,容量要求同 real_out.
[out]out_nfft写入实际填充后的长度(4 的幂).
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若参数无效、存储范围计算溢出, 或任一输出与输入、另一输出、out_nfft 重叠.

所有参数和存储关系均在写入前验证;两个只读输入可以相互重叠。

在文件 fft.c 第 327 行定义.

引用了 lmmc_fft_radix4_next_size(), lmmc_fft_radix4_pad_into(), LMMC_STATUS_INVALID_ARGUMENT , 以及 LMMC_STATUS_OK.

被这些函数引用 lmmc_fft_radix4_pad_into().

函数调用图:
这是这个函数的调用关系图: