>> b=[1 2 3 4 5 6 7 8]
b =
1 2 3 4 5 6 7 8
>> fft(b)
ans =
Columns 1 through 5
36.0000 -4.0000 + 9.6569i -4.0000 + 4.0000i -4.0000 + 1.6569i -4.0000
Columns 6 through 8
-4.0000 - 1.6569i -4.0000 - 4.0000i -4.0000 - 9.6569i
>> c=[1 2 3 4 5 6 7]
c =
1 2 3 4 5 6 7
>> fft(c)
ans =
Columns 1 through 5
28.0000 -3.5000 + 7.2678i -3.5000 + 2.7912i -3.5000 + 0.7989i -3.5000 - 0.7989i
Columns 6 through 7
-3.5000 - 2.7912i -3.5000 - 7.2678i
观察可得,b的FFT变换结果(暂且记为B(k)吧)B(2)与B(8)、B(3)与B(7)、B(4)与B(6)互为共轭……
c的FFT变换结果(暂且记为C(k)吧)C(2)与C(7)、C(3)与C(6)、C(4)与C(5)互为共轭……
我们将FFT变换结果的下标从0开始,则重新记为B(1)与B(7)、B(2)与B(6)、B(3)与B(5)互为共轭;C(1)与C(6)、C(2)与C(5)、C(3)与C(4)互为共轭。
其实这是一个一般的规律,一个长为N的实数数组a,对其进行离散傅里叶变换得数组A,则A(i)与A(N-i)互为共轭,其i的取值与N的奇偶有关,详细如下:
1)N为偶数时,i=1,...,N/2-1,A(0)与A(N/2)各为其值,且肯定是实数;
2)N为奇数时,i=1,...,(N-1)/2,A(0)为实数
以上均将FFT变换结果的下标从0开始记录。
其实根据离散傅里叶变换的公式,我们还可以推导得出以下结论:
1)A(0)等于数组a各元素之和;2)当N为偶数时,A(N/2)=sum[(-1)^i*a(i)] , i=0,...,N-1
其实一切均可以从DFT的公式中得出:
此性质很重要,在FGPA编程实现时,对实序列进行FFT变换后可以只存储部分值即可,例如作8192点的实序列FFT变换,只需要存储前4097点即可,后面的4095个变换结果与第1~4096个结果互为共轭,这样就大大节省了FPGA的资源……