jimmhu 发表于 2025-2-17 11:36

在构建查找表和进行FFT计算时,要确保数据的格式和类型保持一致。例如,如果查找表中的值是浮点数,那么在进行蝶形运算时,相关的计算也应该使用浮点数运算,以避免数据类型转换带来的精度损失。

LinkMe 发表于 2025-2-17 12:05

列表在一定的复杂程度上可以省钱,

usysm 发表于 2025-2-17 13:20

当将查找表中的值存储为离散的数值时,会引入量化误差。这种误差可能会随着计算的传播而积累,影响最终的结果。因此,需要在构建查找表时选择合适的量化精度,并在计算过程中采取适当的措施来控制误差的传播。

digit0 发表于 2025-2-18 17:30

查表法实现FFT通过预先计算并存储常见的复数乘积结果,在运算时直接查表获取,从而提高运算速度。具体实现包括构建蝶形运算的预先计算表,并在运算时根据输入信号的下标查找对应结果。

chenqianqian 发表于 2025-2-26 19:23

查表法的精度如何呢?能满足要求吗?

suncat0504 发表于 2025-2-26 22:26

硬件资源够的话,查表法也是一个不错的选择。

物联万物互联 发表于 2025-2-27 07:01

查表法虽然应用广泛,但其有效性依赖于特定场景和需求,在某些场景下效果较好,但并非所有情况都适用。

结合国际经验 发表于 2025-2-27 14:27

FFT算法基于分治思想,将大问题分解为小问题。

地瓜patch 发表于 2025-2-28 12:08

这是fft滤波么

gejigeji521 发表于 2025-2-28 15:08

查表法适用于特定点数的FFT计算。

yangjiaxu 发表于 2025-2-28 15:24

好像查表法确实比较方便,就是占用了一些存储空间

单芯多芯 发表于 2025-2-28 18:35

可以通过计算标准FFT算法的结果与查表法实现的FFT结果进行对比,以验证查表法实现的FFT的正确性。

鹿鼎计 发表于 2025-3-2 23:37

检查表不仅提升效率,更能在复杂项目中节约成本

未来AI 发表于 2025-3-4 21:05

查表法能减少计算复杂度,从而节省计算资源,提高效率

zhengshuai888 发表于 2025-3-6 22:01

如果使用查表法计算,会影响运算速度吧。

weifeng90 发表于 2025-3-7 08:04

查表法计算精度和效率会受影响吗

PreWorld 发表于 2025-3-8 07:12

优化代码,减少循环次数和复杂度,使用更高效算法,提高计算速度

andy520520 发表于 2025-3-9 11:30

本帖最后由 andy520520 于 2025-3-9 18:09 编辑

zhuotuzi 发表于 2025-1-24 17:58

这个FFT计算完全是错误的,不知道是哪里搞的

计算N点的FFT,分为log2(N) 层,旋转因子的表格大小为twiddle_factors_table

andy520520 发表于 2025-3-9 11:38

本帖最后由 andy520520 于 2025-3-15 17:45 编辑

zhuotuzi 发表于 2025-1-24 17:58

上面的FFT计算完全是错误的,不知道是哪里搞的

计算N点的FFT,分为log2(N) 层,每层N/2个蝶形,每个蝶形有一个复数乘法,旋转因子的表格 twiddle_factors_table旋转因子表格大小是N/2
stage =0 , 1 , 2 , ... ,log2(N)- 1
在第0层,    W_N^0 = 1
在第一层,W_N^0 = 1,   W_N^(N/2^(stage +1)))
在第二层,W_N^0 = 1,   W_N^(N/2^(stage + 1)),   W_N^(2 *N/2^(stage + 1)),W_N^(3 * N/ 2^(stage + 1))

下面给出旋转因子表格

#define SCALE_FACTOR (1 << 14)          //   在乘法的时候再缩回

// 定义复数结构体,元素类型改为

typedef struct
{    long int real;   
   long int imag;
} complex_int;

// 获取旋转因子表
void get_twiddle_factors(int n, complex_int *twiddle_factors)
{   
for (int k = 0; k < n / 2; k++)
{      
   double angle = -2 * M_PI * k / n;      
   double real_part = cos(angle);      
   double imag_part = sin(angle);      
   // 将实部和虚部乘以放大因子并取整      
   twiddle_factors.real    = (long int)(real_part   * SCALE_FACTOR);      
   twiddle_factors.imag= (long int)(imag_part * SCALE_FACTOR);   
   }
}

FFT的精髓在下面的公式 ,合并了复数乘法,减少了乘法的次数,基2时间抽取法的FFT,乘法次数是 N/2 * log2(N)
t = W_N^k * odd

X             =oven+   t

X    =even-    t

LinkMe 发表于 2025-3-9 12:24

查表法确实有其局限性,并非万能,只适用于特定场景,需要结合具体情况灵活使用。
页: 1 2 3 [4] 5
查看完整版本: 查表法实现FFT