一:FFT变换

fft变换其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法。要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义。傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
  和傅立叶变换算法对应的是反傅立叶变换算法。该反变换从本质上说也是一种累加处理,这样就可以将单独改变的正弦波信号转换成一个信号。因此,可以说,傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅立叶反变换将这些频域信号转换成时域信号。

二、频率和振幅的处理

(1)、频率处理方法

1.提供采样率 Fs
  • 采样率就是单位时间内采集的样本数
  • 根据采样区间Ts来算,Fs=1/Ts
  • Ts在非定常计算里就是时间步,也就是采样区间
  • Ts=1.0/Fs
2. 周期 T
  • 用采样率算出我这段数据中一共有多少个周期 T = n/Fs
  • 这个n是我给的这段数据的采样点数,比如我的例子中n = len(y)
3.频率 frq
  • 把采样点数的等差数列k除以周期T,就是频率 frq = k/T
  • k = np.arange(n)(就是 [0, 1, 2, … , n])
  • 所以这样看来,frq = Fs * (k/n)

(2)、幅值处理方法

幅值也是要处理的,幅值的处理就比较简单,进行归一化处理,处理出来的结果除以采样点数n就好了。
这是因为,采样点数越多,振幅是成比例增大的

二、python代码(TestFFT02.py)

该代码的GitHub地址为:https://github.com/taw19960426/jiSuan01

import matplotlib.pyplot as plt
import numpy as npFs = 150.0;                 # 采样率
Ts = 1.0/Fs;                # 采样区间
t = np.arange(0,1,Ts)       # 时间矢量,这里Ts也是步长
#range返回从0到1构成的list,而arange返回一个array对象fs = 25;                    # frequency of the signal信号频率
y = np.sin(2*np.pi*fs*t)n = len(y)                  # 信号长度
k = np.arange(n)            #采样点数的等差数列k
T = n/Fs                    #共有多少个周期T
frq = k/T                   # two sides frequency range两侧频率范围
frq1 = frq[range(int(n/2))] # #由于对称性,取一半区间YY = np.fft.fft(y)          # 未归一化
Y = np.fft.fft(y)/n         #  归一化
Y1 = Y[range(int(n/2))]fig, ax = plt.subplots(4, 1)ax[0].plot(t,y)
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Amplitude振幅')ax[1].plot(frq,abs(YY),'r') #绘制频谱
ax[1].set_xlabel('Freq (Hz)')
ax[1].set_ylabel('|Y(freq)|')ax[2].plot(frq,abs(Y),'g')  # plotting the spectrum
ax[2].set_xlabel('Freq (Hz)')
ax[2].set_ylabel('|Y(freq)|')ax[3].plot(frq1,abs(Y1),'b') # plotting the spectrum
ax[3].set_xlabel('Freq (Hz)')
ax[3].set_ylabel('|Y(freq)|')plt.show()

结果显示:

四、结果分析

  1. 假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=sqrt(a*a+b*b)(某点处的幅度值An = A*(N/2)
  2. 某点处的幅度值An = A*(N/2),A表示原始信号的幅值,N表示采样点。
  3. 原函数频率fs=25Hz,所以采样区间ts=1/25=0.04。与图中第一个波形相同,0.04*5=0.2。
  4. 已知A=1,N=150,由此可以计算出An=75。与图中第二个波形相同。
  5. 归一化幅度值=An/n=75/100=0.75。

基于python的FFT频率和振幅处理相关推荐

  1. 基于python的FFT演示程序

    本章详细介绍如何综合利用之前所学习的numpy,traits,traitsUI和Chaco等多个库,编写一个FFT演示程序.此程序可以帮助你理解FFT是如何将时域信号转换为频域信号的,在开始正式的程序 ...

  2. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点   FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...

  3. 快速傅里叶变换python_基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法. ...

  4. 基于python的快速傅里叶变换FFT(一)

    基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...

  5. 基于Python的国际绝对音名十二等律标准音高频率对照表制作(浮点型精度、十二等律体系、A4=440.01000Hz)

    基于Python的国际绝对音名十二等律标准音高频率对照表制作(浮点型精度.十二等律体系.A4=440.01000Hz) 代码如下: import xlwt book = xlwt.Workbook(e ...

  6. 基于Python的频谱分析(一)

    1.傅里叶变换   傅里叶变换是信号领域沟通时域和频域的桥梁,在频域里可以更方便的进行一些分析.傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样 ...

  7. 频谱分析:基于python画出时域频域波形

    一,FFT解释 FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法.即为快速傅氏变换.它是根据离散傅氏变换的奇.偶.虚.实等特性,对离散傅立叶变换的算法 ...

  8. python numpy.fft.fft和ifft

    python numpy.fft.fft和ifft(离散傅里叶变换和反傅里叶变换) numpy.fft 的fft和ifft是相逆变换操作,这里用ECG信号做演示. 1.傅里叶转换是将时域信号转化为频域 ...

  9. python频谱分析_基于Python的频谱分析(一)

    1.傅里叶变换 傅里叶变换是信号领域沟通时域和频域的桥梁,在频域里可以更方便的进行一些分析.傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样的方 ...

最新文章

  1. Spring工厂常识
  2. [转]gitHub客户端Desktop的安装使用总结 ---基础篇
  3. 世界上最受欢迎的10个Linux发行版
  4. 微信小程序的wxss好难啊,记录我的搞笑界面
  5. bdbus_lxb下载
  6. CodeForces - 1593G Changing Brackets(思维)
  7. 不得不说,其实你的性能优化手段已经过时了
  8. Docker 安装 ES 7.7.0 及 Head、Kibana、IK分词器、Logstash、Filebeat 插件
  9. 上海教育系统计算机职称考试报名,2008年第二季度上海市教育系统职称计算机考试报名的通知...
  10. 算法笔记_072:N皇后问题(Java)
  11. linux 下 php 安装 libevent
  12. 用GibbsLDA做Topic Modeling
  13. windows phone 8.1 让项目开启蓝牙genericAttributeProfile
  14. 菜鸟学习初级教程-----强烈推荐(看完后成黑客拉)
  15. 风尚云网笔记-vue中echarts引入
  16. ALSong-带有高级音效的漂亮音乐播放器(类似千千静听)
  17. android自定义键盘 下划线,TabLayout 自定义下划线
  18. 从零开始之驱动开发、linux驱动(七十一、电容触摸屏驱动)
  19. ESP32 深度睡眠模式功耗测试
  20. 华为手机 从服务器获取安装包信息,华为openGauss 获取并校验安装包

热门文章

  1. 宇宙总统pascal程序
  2. [JOI2012春季合宿]Rotate (链表)
  3. 自主招生计算机专业自我介绍,自主招生自我介绍参考范文
  4. mysql为什么表大了要重建_为什么MySQL分库分表后总存储大小变大了?
  5. python控制流_Python学习--控制流
  6. 2019-11-23 Modern Family Scripts (01 “Pilot”)
  7. 2019-10-20 莉萨如(Lissajous)曲线演示工具
  8. laravel框架图片上传
  9. 3-无重复字符的最长子串(中等)
  10. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程