1、傅里叶变换

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

2、基于Python的频谱分析

  将时域信号通过FFT转换为频域信号之后,将其各个频率分量的幅值绘制成图,可以很直观地观察信号的频谱。
   具体分析见代码注释。

import numpy as np#导入一个数据处理模块
import pylab as pl#导入一个绘图模块,matplotlib下的模块sampling_rate = 8000#采样频率为8000Hz
fft_size = 512 #FFT处理的取样长度
t = np.arange(0, 1.0, 1.0/sampling_rate)#np.arange(起点,终点,间隔)产生1s长的取样时间
x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t)#两个正弦波叠加,156.25HZ和234.375HZ
# N点FFT进行精确频谱分析的要求是N个取样点包含整数个取样对象的波形。因此N点FFT能够完美计算频谱对取样对象的要求是n*Fs/N(n*采样频率/FFT长度),
# 因此对8KHZ和512点而言,完美采样对象的周期最小要求是8000/512=15.625HZ,所以156.25的n为10,234.375的n为15。
xs = x[:fft_size]# 从波形数据中取样fft_size个点进行运算
xf = np.fft.rfft(xs)/fft_size# 利用np.fft.rfft()进行FFT计算,rfft()是为了更方便对实数信号进行变换,由公式可知/fft_size为了正确显示波形能量
# rfft函数的返回值是N/2+1个复数,分别表示从0(Hz)到sampling_rate/2(Hz)的分。
#于是可以通过下面的np.linspace计算出返回值中每个下标对应的真正的频率:
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
#在指定的间隔内返回均匀间隔的数字
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
#最后我们计算每个频率分量的幅值,并通过 20*np.log10()将其转换为以db单位的值。为了防止0幅值的成分造成log10无法计算,我们调用np.clip对xf的幅值进行上下限处理#绘图显示结果
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"Time(S)")
pl.title(u"156.25Hz and 234.375Hz WaveForm And Freq")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"Freq(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()

3、绘图结果显示


如果你放大其频谱中的两个峰值的部分的话,可以看到其值分别为:

>>>xfp[10]
-6.0205999132796251
>>>xfp[15]
-9.6432746655328714e-16

即156.25Hz的成分为-6dB, 而234.375Hz的成分为0dB,与波形的计算公式中的各个分量的能量(振幅值/2)符合。

基于Python的频谱分析(一)相关推荐

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

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

  2. 基于Python的频谱分析(二)——频谱泄露

    1.频谱泄露   对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱.但是,在利用DFT求它的频谱时,对时域做了截断,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有 ...

  3. python兼职平台信号处理_基于Python的数字信号处理初步

    作者:许欢 来源:EETOP 行者无疆(论坛usrname:ICNO.1) 的博客 Python 是目前的热门语言,一直觉得掌握一门编程语言对作为搞技术的来说还是很有必要的,结合工作中能用到的一些数据 ...

  4. 基于MATLAB和Python的频谱分析

      频谱分析是进行信号分析的基础,这里我们采用三种简单的样本(正弦波.方波.噪声)进行频谱分析.我们用MATLAB和Python同时仿真,验证其正确性.具体操作如下: 1.用MATLAB生成一个样本并 ...

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

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

  6. python音频实时频谱分析_基于python的音频设计及频谱分析

    74 Internet Technology 互联网 + 技术 一.引言 WAV 是 Microsoft 开发的一种声音文件格式,虽然它支持多种压缩格式,但是它通常被用来保存未压缩的声音数据(PCM ...

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

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

  8. 【CV】OpenCV(基于Python)学习笔记

    以下内容中的页码均来自<OpenCV 4详解 : 基于Python> 目录 第2章 载入.显示与保存数据 2.2 图像的读取与显示 2.2.1 图像读取函数 cv.imread() 2.2 ...

  9. 基于Python的人工智能美颜系统

    基于Python的人工智能美颜系统使用PyQt5模块搭建可视化界面,使用Dlib模型(shape_predictor_68_face_landmarks.dat)实现人脸关键点检测和定位,人脸美颜(美 ...

最新文章

  1. linux oracle 关闭防火墙,Linux 下关闭防火墙设置
  2. 剑指offer64 不能使用乘除法、for、while、if、else、switch、case 求 1+2+...+n
  3. AsyncTask实现断点续传
  4. DFS应用——遍历有向图+判断有向图是否有圈
  5. project开发的程序设计与逻辑设计
  6. buildroot自带程序(库)编译并安装
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的仿百度网盘系统
  8. 一个通用的VB磁盘文件搜索引擎类
  9. Golang channel 快速入门
  10. H.248-Transcoding与Interception
  11. 27. 搭建Git服务器
  12. 拒绝瞎忙,高效的学习与工作经验谈
  13. unity开宝箱动画_如何用PPT打造一个「开启宝箱」的动画?
  14. hash素数表(备用)
  15. 电脑软件单击打开切换为双击打开
  16. python修改屏幕分辨率_Python 脚本中不同平台显示器分辨率的坐标转换
  17. 【信息系统项目管理师学习笔记】10大管理|47个过程组:项目整体管理|制定项目章程
  18. Linux系统搭建gitit wiki
  19. 6-4 选队长 (10 分)
  20. 如何在ipone自带邮件上添加网易邮箱

热门文章

  1. FPGA之道(59)时空变换之时域优化
  2. 【 MATLAB 】使用 MATLAB 求某输入的稳态响应
  3. 乔布斯的64周年诞辰,苹果滞销的第N天
  4. 这款AI耳机可以主宰你的情绪,决定让你是哭还是笑
  5. 人工智能机器视觉的未来发展趋势
  6. ubuntu set ntpdate
  7. 获取汉字的首字母(转)
  8. hdu 3732(01背包转多重背包)
  9. 离开页面提示是否保存页面修改内容的简单实现
  10. Asp.Net微型服务器使用次数统计