python – 为什么numpy fft会返回错误的相位信息?

python – 为什么numpy fft会返回错误的相位信息?,第1张

概述我比较了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 我比较了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 npimport matplotlib.pyplot as pltfs = 1e4dt = 1 / fst = np.arange(0,0.5,dt)F = 1e3y = 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)

一切都会好起来的.

总结

以上是内存溢出为你收集整理的python – 为什么numpy fft会返回错误的相位信息?全部内容,希望文章能够帮你解决python – 为什么numpy fft会返回错误的相位信息?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1192139.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存