这是我的代码:
k = np.array([np.arange(-50, 50)])
fs, xn = wavfile.read('voice_recording.wav')
nbits = 16
max_nbits = float(2**(nbits-1))
xn = xn / (max_nbits + 1.0)
xn = np.expand_dims(xn[:,0], axis=1)
N = len(xn)
n = np.array([np.arange(0, N)])
Xk = np.sum(xn*np.exp(((-1j*2*math.pi)/N)*np.matmul(n.T, k)), axis=0)
这里,xn
是从.wav文件(voice_recording.wav)读取的音频信号。 FFT的代码是:
Xk1 = np.fft.fftshift(np.fft.fft(xn, n=100, axis=0))
但是两个结果完全不同,即使它们应该相同。DFT图:
和FFT图:
我在做什么错?
[假设您没有下载数据文件,则其中有100多个样本。如果是这样,则
np.fft.fft(xn, n=100, axis=0)
截取前100个样本,并对其进行FFT计算。也就是说,它不会计算出与您的代码相同的东西。
[当我使用xn = np.random.randn(100)
并运行您的代码时,直到Xk
左右,Xk1
和1e-13
都是相同的。这表明您的代码是正确的。