Numpy fft函数给出的输出与使用公式计算的dft不同

问题描述 投票:0回答:1

我正在尝试在python中实现dft。我正在使用标准公式:enter image description here

这是我的代码:

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图:

enter image description here

和FFT图:

enter image description here

我在做什么错?

python numpy signal-processing fft dft
1个回答
0
投票

[假设您没有下载数据文件,则其中有100多个样本。如果是这样,则

np.fft.fft(xn, n=100, axis=0)

截取前100个样本,并对其进行FFT计算。也就是说,它不会计算出与您的代码相同的东西。

[当我使用xn = np.random.randn(100)并运行您的代码时,直到Xk左右,Xk11e-13都是相同的。这表明您的代码是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.