DFT公式说明
DFT的计算公式:
其中x(n)是离散时间信号,既可以是实信号也可以是复信号。k是频率的index;N是离散信号x(n)的长度,N也是DFT结果X(k)的长度。
DFT的含义是信号在各个频率分量的投影,投影可以理解为两个矢量的点乘。因此DFT的公式可以看作成两个序列的点乘:x(n)和sk(n):
x(n)是一个复数信号。sk(n)是一个复数序列,两个复数序列的点乘时要对其中一个信号进行取共轭:
使用python的numpy可以对两个数组进行点乘:
xk = sum(x*np.conjugate(s))
其中x是输入信号的数组,s是上文提到的sk(n)。两个数组元素相乘让后求和。
Python实现
我们要计算一个复数信号x(n)DFT:
其中k0 = 7,n的范围是[0,63]。
import numpy as np
import matplotlib.pyplot as plt
N = 64
k0 = 7
x = np.exp(1j*2*np.pi*k0/N*np.arange(N))
X = np.array([])
for k in range(N):
s = np.exp(1j*2*np.pi*k/N*np.arange(N))
X = np.append(X, sum(x*np.conjugate(s)))
plt.plot(np.arange(N), abs(X))
plt.show()