gpt4 book ai didi

python - 为什么 numpy fft 返回不正确的相位信息?

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:20 24 4
gpt4 key购买 nike

我比较了 Matlab 和 numpy 中的相位和幅度谱。我认为 Matlab 工作正确,但 numpy 计算正确的幅度谱,但相位谱很奇怪。我必须如何更改 python 代码才能通过 numpy 正确计算 fft?

Matlab:

fs = 1e4;
dt = 1 / fs;
t = 0:dt:0.5;
F = 1e3;

y = cos(2*pi*F*t);
S = fftshift(fft(y) / length(y));
f_scale = linspace(-1, 1, length(y)) * (fs / 2);

a = abs(S);
phi = (angle(S));

subplot(2, 1, 1)
plot(f_scale, a)
title('amplitude')

subplot(2, 1, 2)
plot(f_scale, phi)
title('phase')

python :

import numpy as np
import matplotlib.pyplot as plt

fs = 1e4
dt = 1 / fs
t = np.arange(0, 0.5, dt)
F = 1e3

y = np.cos(2*np.pi*F*t)
S = np.fft.fftshift(np.fft.fft(y) / y.shape[0])
f_scale = np.linspace(-1, 1, y.shape[0]) * (fs / 2)

a = np.abs(S)
phi = np.angle(S)

plt.subplot(2, 1, 1, title="amplitude")
plt.plot(f_scale, a)

plt.subplot(2, 1, 2, title="phase")
plt.plot(f_scale, phi)

plt.show()

matlab output

numpy output

最佳答案

理解np.arange是个问题。它在达到所需值之前停止一个 dt (您通过的间隔在右侧打开)。如果你定义

t = np.arange(0, 0.5+dt, dt)

一切都会好起来的。

关于python - 为什么 numpy fft 返回不正确的相位信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com