数据输出说明及配置
在实际应用中,FFT 计算的数据结果输出通常是复数形式,表示为实部和虚部。对于实数输入的 FFT,输出结果具有对称性,因此只需输出前一半的数据点加上中间的一个点。而对于复数输入的
FFT,输出结果不具有对称性,需要输出所有数据点。
- FFT 计算的每个输出点均先输出实部数据 (即 y[n]_real)再输出虚部数据 (即 y[n]_img)。
- 对于实数输入的 FFT,只输出 0 到 (N/2) 个点的数据,输出的数据长度为 (N/2 + 1),输出的复数为 y[0]_real、y[0]_img、y[1]_real、y[1]_img、…、y[N/2 -1]_real、y[N/2 -1]_img、y[N/2]_real、y[N/2]_img。
- 对于复数输入的 FFT,需输出 N 个点复数的数据,对应的输出的复数为 y[0]_real、y[0]_img、y[1]_real、y[1]_img、…、y[N-1]_real、y[N-1]_img。
在硬件实现中,输出结果采用 Q15 或 Q31 的定点数表示,详细说明如下。输出结果需要进行缩放,输出缩放系数为 1/N。
定点数 | 数值范围 | 输出缩放系数 | 保存方式 |
---|---|---|---|
Q15 | [-1 , +1) | 1/N | 采用 1 个 32-bit word 保存,保存在低 16 位。 |
Q31 | [-1 , +1) | 1/N | 采用 1 个 32-bit word 保存,保存在整个 word,实部和虚部各占一个 word。 |
输出配置
注: 关于单精度数据的详细描述,可查看单精度浮点。
序号 | OUT_TYP | ABS_OUT_EN | FLOAT_OUT_CVR | 输出格式 |
---|---|---|---|---|
1 | 0x0/0x2 | 0x0 | 0x0 | Q31 定点数,按照实部在前、虚部在后的方式输出 |
2 | 0x1/0x3 | 0x0 | 0x0 | Q15 定点数,按照实部在前、虚部在后的方式输出 |
3 | any | 0x0 | 0x1 | 单精度浮点数,按照实部在前、虚部在后的方式输出 |
4 | 0x0/0x1 | 0x1 | any | Q31 定点数,按照幅值在前、相位在后的方式输出 |
5 | 0x2/0x3 | 0x1 | any | Q15 定点数,按照幅值在前、相位在后的方式输出 |
输出数据的幅值和相位计算
输出数据支持进行幅值和相位计算,即硬件对输出的复数结果进行幅值和相位的计算,减轻后续软件的计算负担。详细说明如下:
-
配置寄存器 ABS_OUT_EN = 0x1 使能幅值输出。使能后,输出结果为 N 个点实数的数据,即 y[0]_abs、y[0]_ph、y[1] _abs、y[1] _ph、…、y[N-1]_abs、y[N-1]_ph。
-
幅值的计算方式为
-
相位的计算方式为