我有44100Hz的音频,这意味着每秒有44100个样本。我想分析它,所以我将数据分成长度为1024的子数组。
对于每个数组,我应用傅里叶变换(fft),它返回一个复数数组。这些数字应该是移位和相位值。
结果的长度为1024,就像一个块。但我不知道,数组的哪个元素对应于哪个频率。我检查了documentation,但我唯一能够找到的是结果是对称的,我可以跳过第一部分。
from scipy.fftpack import fft
res = fft(chunk)
但是如何才能找出结果中给定指数的频率是多少?
答案 0 :(得分:2)
你可以通过对纯音进行FFT来直接看到这一点。在这里我比较:常数函数(零频率),频率1(周期=采样间隔),频率2(周期=采样间隔的一半),依此类推:
import numpy as np
from scipy.fftpack import fft
arr = np.linspace(0, 2*np.pi, 9)[:-1]
for k in range(5):
print np.round(np.abs(fft(np.cos(k*arr))), 10)
结果:
[ 8. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 4. 0. 0. 0. 0. 0. 4.]
[ 0. 0. 4. 0. 0. 0. 4. 0.]
[ 0. 0. 0. 4. 0. 4. 0. 0.]
[ 0. 0. 0. 0. 8. 0. 0. 0.]
因此,第0个条目是常数项,条目1和-1用于频率,其周期是我们采样的时间间隔;条目2和-2的周期是采样时间间隔的一半; 3和-3的周期是采样时间间隔的1/3等,直到我们达到Nyquist frequency。
对于大小为1024的样本: