Edit online

数据输出说明及配置

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。
1. FFT 模块的数据输出 y[n] 说明

定点数

数值范围

输出缩放系数

保存方式

Q15

[-1 , +1)

1/N

采用 1 个 32-bit word 保存,保存在低 16 位。

Q31

[-1 , +1)

1/N

采用 1 个 32-bit word 保存,保存在整个 word,实部和虚部各占一个 word。

输出配置

注: 关于单精度数据的详细描述,可查看单精度浮点
2. 输出配置

序号

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。

  • 幅值的计算方式为 y n _ a b s = ( y [ n ] _ r e a l ) 2 + ( y [ n ] _ i m g ) 2

  • 相位的计算方式为 y n _ p h = A t a n 2 ( y [ n ] _ i m g , y [ n ] _ r e a l )