我试图通过计算机程序对数字列表进行离散傅立叶变换。在此之前,我决定通过运行一个包含 1000 个数字的列表来测试它,这些数字是我通过对公式 sin(2*pi*1 到 1000 之间的整数/所需频率)创建的 20 个正弦波求和而创建的。根据我对 DFT 的理解,除了我的 20 个所需频率 8、13、13、14、18、23、25、32、33、38、41、48、51、64 之外,我应该得到所有值的 0 , 73, 79, 82, 85, 91, 和 100。我的一些第一个输出是:
0 : (-140.00101976200014-0j)
1 : (-140.50548903670193-3.1117640585553277j)
2 : (-142.0510770346883-6.33051372898894j)
3 : (-144.74035295772114-9.776661681575883j)
4 : (-148.76670548437778-13.601419744876273j)
5 : (-154.45783389980753-18.014310511371548j)
6 : (-162.3639888189583-23.333771555566614j)
从python 3.2中的这个程序:
导入 cmath
定义计算_dft(输入):
n = len(input)
output = [0] * n
for k in range(n):
s = 0
for t in range(n):
s += input[t] * cmath.exp(-1j * 2 * cmath.pi * t * k / n)
output[k] = -s
return output
答案 = compute_dft(unsorted_v)
对于答案中的项目:
print(answer.index(item), ":", item)
然后我去网上检查了一些 DFT 示例的程序,发现它吐出的答案与示例答案相同,这让我怀疑我对输出的期望是否错误。
任何有关解决我的问题的建议将不胜感激。