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. 深入分析Java Web技术内幕pdf
  2. 信息系统项目管理师-信息系统安全管理核心知识思维脑图
  3. 年度总结 | 2020CSDN的第一桶金
  4. 调用GOOGLE语音
  5. 笨方法学python之import sys与from sys import argv的区别
  6. set python_使用dict和set
  7. java string转number_Java 序列化
  8. linux ftp查看用户目录权限,linux 指定ftp用户 特定目录及权限
  9. centos7开启tcp6_Centos7下配置IPV6
  10. 中国广告营销行业资本报告2020
  11. Setting the Background Image for a List Control
  12. 数字电路基础知识(一) 复位设计-同步复位与异步复位
  13. FusionChartsFree及其教程
  14. 小程序加入人脸识别_微信小程序实现人脸识别登陆的示例代码
  15. 制作符合期刊审图号标准的中国地图(含九段线)
  16. 日期转换成年月日格式java_如何将日,月,年转换为日期格式?
  17. 斯坦福大学终身教授张首晟:区块链最核心的理念,必然是「 In Math We Trust 」
  18. 天翼云主攻“5G+云+AI”,新生态革命的冲锋
  19. Python-jQuery
  20. 元宇宙 - 圈里的百科

热门文章

  1. 如何阅读微控制器数据手册:探索硬件 ?
  2. IC基础知识(2)模拟和数字电子学导论
  3. 硬件手册里经常出现的assert以及deassert
  4. 【 MATLAB 】impz函数介绍(数字滤波器的脉冲响应)
  5. 【 MATLAB 】cat 函数介绍(沿指定维度串联数组)
  6. Spartan-6的I/O时钟缓冲器
  7. 用flex进行网易云音乐界面构建和布局解析(2)
  8. UVa 164 - String Computer
  9. 【D3.js 学习总结】26、D3地理地图
  10. uploadify 上传文件并带有随机数文件名生成