快速傅里叶变换np.fft.fft的使用

np.fft.fft进行快速傅里叶变换,需要特别注意的是,默认是对最后一个维度的数据进行fft变换,若你输入的是一维数组,请忽略后面,如果你是二维列矢量,如果不将数据变为行矢量或将axis参数设为0,将得到与输入相同的结果,导致后续的计算无缘无故出错。

二话不说,直接上代码,产生一个正弦信号,并对其进行fft变换,对应的频率点可通过np.fft.fftfreq计算得到,需要输入的两个参数分别是FFT的长度和采样时间间隔。

需要注意的是fft计算出来的幅度一般与真实的是不一样的,在ifft中会考虑这个因素,因此ifft恢复的信号与原来的信号是相同的。如果需要获得真实结果则需要乘以“2/FFT长度” 这个因子。

得到的频谱关于奈奎斯特频率对称,实际只需要取前一半的频谱信号即可。

import numpy as np
import matplotlib.pyplot as plt
# 产生正弦信号
Ts=0.001
t = Ts*np.array(range(10000))
x = np.sin(2*np.pi*325*t)

# FFT变换
X=np.fft.fft(x,np.size(x,0),axis=0)/x.size*2
freq=np.fft.fftfreq(np.size(x,0),Ts)

plt.figure(1)
plt.plot(t,x)
plt.show()
plt.figure(2)
plt.plot(freq,np.real(X))
plt.show()

                                                                             图1 原始信号

                                                                        图2 fft频谱图

  • 26
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txh3093

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值