python实现FFT(快速傅里叶变换)

python实现FFT(快速傅里叶变换)

简单定义一个FFT函数,以后的使用中可以直接幅值粘贴使用。

首先生成了一个频率为1、振幅为1的正弦函数:
频率为1
然后计算该信号的频率和幅值,得到计算结果如下:
在这里插入图片描述
其中计算相位角我使用的较少,为了提高计算效率一般是注释掉了,不在意这点效率的话可以保留。

# 所使用到的库函数
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft

# 简单定义一个FFT函数
def myfft(x,t):
    fft_x = fft(x)                                            #  fft计算
    amp_x = abs(fft_x)/len(x)*2                                 # 纵坐标变换
    label_x = np.linspace(0,int(len(x)/2)-1,int(len(x)/2))    # 生成频率坐标
    amp = amp_x[0:int(len(x)/2)]                              # 选取前半段计算结果即可
    # amp[0] = 0                                              # 可选择是否去除直流量信号
    fs =1/( t[2]-t[1])                                        # 计算采样频率
    fre = label_x/len(x)*fs                                   # 频率坐标变换
    pha = np.unwrap(np.angle(fft_x))                          # 计算相位角并去除2pi跃变
    return amp,fre,pha                                        # 返回幅度和频率


t = np.linspace(0,5*np.pi,200)                                # 时间坐标
x = np.sin(2*np.pi*t)                                         # 正弦函数

amp,fre,pha= myfft(x,t)                                       # 调用函数

# 绘图
plt.figure()
plt.plot(t,x)
plt.title('Signal')
plt.xlabel('Time / s')
plt.ylabel('Intencity / cd')

plt.figure()
plt.plot(fre,amp)
plt.title('Amplitute-Frequence-Curve')
plt.ylabel('Amplitute / a.u.')
plt.xlabel('Frequence / Hz')
plt.show()

我的另一篇文章里给了FFT文件的函数包及调用方法:
链接: https://blog.csdn.net/ruredfive/article/details/116024515.

  • 18
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Python中的FFT是一种用于离散傅里叶变换的算法,可以对信号进行频谱分析和频域处理。FFT的全称是快速傅里叶变换(Fast Fourier Transform),通过将信号从时域转换到频域,我们可以得到信号的频率和幅度信息。 在Python中,我们可以使用NumPy库中的numpy.fft.fft函数来实现FFT计算。这个函数接受一个一维数组作为输入,并返回一个具有复数值的一维数组,表示输入信号的频谱。例如,我们可以使用以下代码进行FFT计算: ``` import numpy as np # 定义输入信号 signal = np.array([0, 1, 2, 3, 4, 5, 6, 7]) # 进行FFT计算 fft_result = np.fft.fft(signal) # 打印FFT结果 print(fft_result) ``` 输出结果将是一个与输入数组长度相同的复数数组,表示输入信号的频谱。你可以通过取绝对值来获取频率的幅度信息。如果你希望将频谱绘制成图形,你可以使用Matplotlib库来实现。例如,你可以使用以下代码绘制输入信号的频谱图: ``` import numpy as np import matplotlib.pyplot as plt # 定义输入信号 signal = np.array([0, 1, 2, 3, 4, 5, 6, 7]) # 进行FFT计算 fft_result = np.fft.fft(signal) # 计算频率 freq = np.fft.fftfreq(len(signal)) # 绘制频谱图 plt.plot(freq, np.abs(fft_result)) plt.xlabel('Frequency') plt.ylabel('Amplitude') plt.show() ``` 通过这些代码,你可以对信号进行FFT计算,并可视化频谱信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python fft测试的使用 简述了pythonfft的使用,并给出了python2测试代码示例](https://download.csdn.net/download/li171049/88225586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [FFT 及其Python实现方法](https://blog.csdn.net/weixin_44463965/article/details/131470294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值