CSI-DSP  Version 1.0.0
CSI DSP Software Library
Content | 函数
复数FFT函数

Content

 基数8复数傅里叶变换
 
 复数 FFT 表
 

函数

void csky_cfft_f32 (const csky_cfft_instance_f32 *S, float32_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag)
 浮点复数FFT处理函数 更多...
 
void csky_cfft_q15 (const csky_cfft_instance_q15 *S, q15_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag)
 Q15复数FFT处理函数 更多...
 
void csky_cfft_q31 (const csky_cfft_instance_q31 *S, q31_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag)
 Q31复数FFT处理函数 更多...
 

简要说明

快速傅里叶变换 (FFT) 是一个离散傅里叶变换(DFT)的快速算法。FFT比DFT快了几个数量级,特别是处理较长的序列。 这节描述的算法是处理复数数据的,另外有一组函数专门用于处理实数序列。
为浮点,Q15和Q31分别提供了不同的算法。
FFT函数在原地操作。也就是说,保存输入数据的数组也会被用作保存对应的结果。输入数据是复数的,并且包括 2*fftLen 个交错的数据,如下所示:
 {real[0], imag[0], real[1], imag[1],..} 
FFT结果也会包含在相同的数组,并且频域的值也会有一样的交错方式。
浮点
浮点复数FFT使用一种混合基算法。多个radix-8步骤跟单个的radix-2或者radix-4步骤一起处理。 算法支持长度 [16, 32, 64, ..., 4096] ,并且每种长度分别使用不同的旋转因子表。
函数使用了标准FFT定义,当计算正向变换的时候,输出值可能增长 fftLen。 逆变换包括一个缩放 1/fftLen 作为计算的一部分,这跟教科书中的逆FFT定义相符
预初始化数据结构提供了旋转因子和位翻转表,都定义在 csky_const_structs.h. 可以你的函数里面包含这个头文件,然后将其作为参数传给 csky_cfft_f32. 比如:
csky_cfft_f32(csky_cfft_sR_f32_len64, pSrc, 1, 1)
是带位翻转的计算64点的复数逆FFT。 数据结构被视作常量,不会在计算过程中改变。 相同的数据结构可以在多个正逆变换中重复使用。
库的早期发布版本分别为浮点类型提供了radix-2和radix-4算法。这些函数现在不推荐使用。新函数相对更快,也更通用。
如下是一个初始化csky_cfft_f32函数常量的示例:
const static csky_cfft_instance_f32 *S;
...
switch (length) {
case 16:
break;
case 32:
break;
case 64:
break;
case 128:
break;
case 256:
break;
case 512:
break;
case 1024:
break;
case 2048:
break;
case 4096:
break;
}
Q15 and Q31
定点复数FFT使用了一种混合基算法. 多个radix-4步骤和单个radix-2步骤一起处理。 算法支持长度 [16, 32, 64, ..., 4096] ,并且分别为不同的长度提供旋转因子表。
函数使用了标准FFT定义,当计算正向变换的时候,输出值可能会增长 fftLen 。逆变换包括了一个缩放1/fftLen作为计算的一部分,这跟教科书中的逆FFT定义相符。
与初始化的数据结构提供了旋转因子和位翻转表,定义在头文件 csky_const_structs.h. 可以你的函数里面包含这个头文件,然后将其作为参数传给 csky_cfft_q31. 比如:
csky_cfft_q31(csky_cfft_sR_q31_len64, pSrc, 1, 1)
是一个包括了位翻转的64点的复数逆FFT。 数据结构被视作常量,不会在计算过程中改变。 相同的数据结构可以在多个正逆变换中重复使用。
库的早期发布版本分别为定点类型提供了radix-2和radix-4算法。这些函数现在不推荐使用。新函数相对更快,也更通用。
如下是一个初始化csky_cfft_q31函数常量的示例:
const static csky_cfft_instance_q31 *S;
...
switch (length) {
case 16:
break;
case 32:
break;
case 64:
break;
case 128:
break;
case 256:
break;
case 512:
break;
case 1024:
break;
case 2048:
break;
case 4096:
break;
}

函数说明

void csky_cfft_f32 ( const csky_cfft_instance_f32 S,
float32_t p1,
uint8_t  ifftFlag,
uint8_t  bitReverseFlag 
)
参数
[in]*S指向浮点 CFFT结构体实例
[in,out]*p1指向复数数据缓存,大小是 2*fftLen. 原地处理.
[in]ifftFlag设置是正向 (ifftFlag=0) 还是逆向 (ifftFlag=1) 变换的标志位.
[in]bitReverseFlag设置输出位翻转 (bitReverseFlag=1) 或者不翻转 (bitReverseFlag=0) 的标志位
返回
none.
示例:
csky_fft_bin_example_f32.c.
void csky_cfft_q15 ( const csky_cfft_instance_q15 S,
q15_t p1,
uint8_t  ifftFlag,
uint8_t  bitReverseFlag 
)
参数
[in]*S指向Q15 CFFT结构体实例
[in,out]*p1指向复数数据缓存,大小是 2*fftLen. 原地处理.
[in]ifftFlag设置是正向 (ifftFlag=0) 还是逆向 (ifftFlag=1) 变换的标志位.
[in]bitReverseFlag设置输出位翻转 (bitReverseFlag=1) 或者不翻转 (bitReverseFlag=0) 的标志位
返回
none.
void csky_cfft_q31 ( const csky_cfft_instance_q31 S,
q31_t p1,
uint8_t  ifftFlag,
uint8_t  bitReverseFlag 
)
参数
[in]*S指向Q31 CFFT结构体实例
[in,out]*p1指向复数数据缓存,大小是 2*fftLen. 原地处理.
[in]ifftFlag设置是正向 (ifftFlag=0) 还是逆向 (ifftFlag=1) 变换的标志位.
[in]bitReverseFlag设置输出位翻转 (bitReverseFlag=1) 或者不翻转 (bitReverseFlag=0) 的标志位.
返回
none.