美文网首页
[转载]频谱分析:基于python画出时域频域波形

[转载]频谱分析:基于python画出时域频域波形

作者: AeroZ | 来源:发表于2020-08-27 00:14 被阅读0次

https://blog.csdn.net/taw19960426/article/details/101427670

import numpy as np#导入一个数据处理模块

import matplotlib.pyplot as plt#导入一个绘图模块

# 依据快速傅里叶算法得到信号的频域
def test_fft():
    sampling_rate = 8192  # 采样率
    fft_size = 8192  # FFT取样长度
    t = np.arange(0, 8.192, 1.0 / sampling_rate)
    #np.arange(起点,终点,间隔)产生8.192s长的取样时间
    x=0.6*np.sin(2*np.pi*500*t)+0.6*np.sin(2*np.pi*50*t)
    # 两个正弦波叠加,500HZ和50HZ
    # 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  # 返回fft_size/2+1 个频率
    #利用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*10, fft_size/2+1 )  # 表示频率
    #freqs = np.linspace(0, sampling_rate/2 , fft_size/2  + 1)  # 表示频率

    xfp = 20 * np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
    #xfp = np.abs(xf) * 2  # 代表信号的幅值,即振幅
    # 最后我们计算每个频率分量的幅值,并通过 20*np.log10()将其转换为以db单位的值。
    # 为了防止0幅值的成分造成log10无法计算,我们调用np.clip对xf的幅值进行上下限处理

    plt.figure(figsize=(8, 4))
    plt.subplot(211)
    plt.plot(t[:fft_size], xs)
    plt.xlabel(u"时间(秒)", fontproperties='FangSong')
    plt.title(u"500Hz和50Hz的波形和频谱", fontproperties='FangSong')

    plt.subplot(212)
    plt.plot(freqs, xfp)
    plt.xlabel(u"频率(Hz)", fontproperties='FangSong')
    #字体FangSong
    plt.ylabel(u'幅值', fontproperties='FangSong')
    plt.subplots_adjust(hspace=0.4)
    '''subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
    有六个可选参数来控制子图布局。值均为0~1之间。其中left、bottom、right、top围成的区域就是子图的区域。
    wspace、hspace分别表示子图之间左右、上下的间距。实际的默认值由matplotlibrc文件控制的。
    '''
    plt.show()



test_fft()

相关文章

  • [转载]频谱分析:基于python画出时域频域波形

    https://blog.csdn.net/taw19960426/article/details/101427670

  • 2018.12.2 频谱分析

    1基础概念: 时域:用示波器,观察信号的波形信息 (幅度 周期 频率 ) 频域:频谱分析仪,观察信号的频率分布信息...

  • OpenCV-Python学习(十):图像滤波之傅里叶变换

    滤波分析又分为 时域分析、频域分析: 时域分析: 直接对信号本身进行分析。 频域分析: 对信号的变化快慢进行分析。...

  • 2020-04-09 PHASEN: A Phase-and-H

    总览 单通道的语音降噪有两种方式: 直接在一维的时域原始波形上进行操作 把一维的时域波形转换为二维的时频谱再进行操...

  • sinc函数

    从时域到频域 在对信号进行处理的过程中,我们经常使用傅立叶变换。傅立叶变换将信号从时域转到频域,便于分析和处理。 ...

  • Gabor 滤波器

    1. 傅里叶变换 傅里叶变换是线性系统分析的有力工具,提供了一种把时域信号转换到频域进行分析的途径,时域和频域之间...

  • 时域和频域之间转换

    时域卷积 频域相乘 时域相乘,频域卷积,, 时域上相乘等价于频域上做卷积运算,相当于在每个频点上加了一个滤波器

  • 频谱图分析

    李佳 学号19011210599 【嵌牛导读】频谱图的分析方法 【嵌牛鼻子】频谱 时域 FFT2函数 log 变...

  • 时域频域!

  • matlab|离散傅里叶变换一阶、二阶

    把时域转换到频域,能够为图像处理带来很多便捷的操作。在频谱图中直接去掉低频部分或者高频部分都会发生很多有趣的事情。...

网友评论

      本文标题:[转载]频谱分析:基于python画出时域频域波形

      本文链接:https://www.haomeiwen.com/subject/bnyqsktx.html