过去几周我一直在进行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 '
如果你愿意帮助我,我欠你们一千瓶啤酒编辑:真的让我感到温暖,你们这些对我这样的新手很好:)谢谢你
答案 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
排除了上限。