数据输出说明及配置
3 Mar 2025
Read time: 2 minute(s)
在实际应用中,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。
-
幅值的计算方式为
-
相位的计算方式为