python – 为什么numpy fft会返回错误的相位信息?
发布时间:2020-12-20 11:07:45 所属栏目:Python 来源:网络整理
导读:我比较了Matlab和numpy中的相位和幅度谱.我认为Matlab工作正确,但numpy计算正确的幅度谱,但相位谱很奇怪.如何通过numpy更改 python代码以获得正确的计算fft? Matlab的: fs = 1e4;dt = 1 / fs;t = 0:dt:0.5;F = 1e3;y = cos(2*pi*F*t);S = fftshift(fft(y)
我比较了Matlab和numpy中的相位和幅度谱.我认为Matlab工作正确,但numpy计算正确的幅度谱,但相位谱很奇怪.如何通过numpy更改
python代码以获得正确的计算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) plot(f_scale,a) title('amplitude') subplot(2,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,y.shape[0]) * (fs / 2) a = np.abs(S) phi = np.angle(S) plt.subplot(2,title="amplitude") plt.plot(f_scale,a) plt.subplot(2,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) 一切都会好起来的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |