ELI5:如何使这些与FFT相关的列表正常运行?

时间:2013-12-17 23:31:36

标签: python python-2.7 fft

过去几周我一直在进行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 '

如果你愿意帮助我,我欠你们一千瓶啤酒

编辑:真的让我感到温暖,你们这些对我这样的新手很好:)谢谢你

2 个答案:

答案 0 :(得分:2)

问题出在你的循环中。 您每次都为freq分配一个新值,覆盖旧的freq值。您在最后一行中尝试执行的操作是访问列表的元素,但它不是列表(它是一个int)。 如果您想成为频率列表,请将循环中的行更改为:

freq.append(k[n]*samplerate/N)

编辑:也许我不能正确理解你的问题,然后请告诉我们结果会是什么样的。

答案 1 :(得分:2)

您的问题是每次freq循环都会重新分配for。相反,请将其设为相应list的值的n

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排除了上限。