过去几周我一直在做 FFT 作业。它将于星期四到期,我认为选择 Python 并编写一个从时域转换到频域的 FFT 计算器会很酷。现在,我今天才刚刚开始学习 Python,所以请多多包涵。
无论如何,我偶然发现了一个问题
频率由下式给出(k*采样率)/N
其中 k 是一个整数,范围从 0 到 N-1,其中 N 是样本数量。
我想要的是一个列表,freq[n],像这样:
freq[n] = k[n]*sample rate/N
我尝试了以下方法,但没有成功:
samplerate = 44100
N = 2048
k = range(0,N-1)
for n in range(0,N-1):
freq = k[n]*samplerate/N
print freq[2]
出现以下错误:TypeError: 'int' 对象没有属性 'getitem'
如果你们愿意帮助我,我欠你们一千瓶啤酒
编辑:你们对像我这样的新手这么好,真的很温暖我的心:)谢谢
您的问题是 freq
每次通过您的 for
循环都被重新分配。相反,使它成为相应 n
值的 list
:
freq = [(k[n] * samplerate) / N for n in range(0, N)]
或者,给定k[n] == n
,简单地
freq = [(n * samplerate) / N for n in range(0, N)]
请注意,Python 中的 range
不包括上限。
我是一名优秀的程序员,十分优秀!