zoukankan      html  css  js  c++  java
  • 振幅谱分析

    import numpy as np
    from scipy.fftpack import fft,ifft #fft快速傅里叶变换、ifft其逆变换
    import matplotlib.pyplot as plt
    from matplotlib.pylab import  mpl
    
    #振幅谱推演代码
    """mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文   rcParams通过rc参数可以修改默认的属性,包括窗体大小、 每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。
    mpl.rcParams['axes.unicode_minus']=False #显示负号
    X=np.linspace(0,1,1400)#采样点应选择最大频率2.5倍,这里最大是600赫兹,所以选择1400
    y=7*np.sin(2*np.pi*200*X)+5*np.sin(2*np.pi*400*X)+3*np.sin(2*np.pi*600*X)#200Hz、400Hz、600Hz三个正玄波
    
    '''#1.原始波形
    plt.figure()
    plt.plot(X,y)
    plt.title("原始波型")
    
    #2.原始波形,前50组
    plt.figure()
    plt.plot(X[0:50],y[0:50])
    plt.title("原始波型(前50组)")
    plt.show()'''
    
    #3.快速傅里叶变换
    fft_y=fft(y)
    print(len(fft_y))
    print(fft_y[0:5])
    N=1400
    X=np.arange(N)#频率个数
    abs_y=np.abs(fft_y)#取复数的绝对值,即复数的模(双边频谱)
    angle_y=np.angle(fft_y)#取复数的角度
    
    '''plt.figure()
    plt.plot(X,abs_y)
    plt.title("双边振幅谱(未归一化)")
    
    plt.figure()
    plt.plot(X,angle_y)
    plt.title("双边相位谱(未归一化)")
    plt.show()'''
    
    #4.将振幅进行归一化与取半处理
    #4.1归一化处理
    normalization_y=abs_y/N
    plt.figure()
    plt.plot(X,normalization_y,'g')
    plt.title("双边频谱(归一化)",)
    #plt.show()
    #4.2取半处理
    half_X=X[range(int(N/2))]#取一半区间
    normalization_half_y=normalization_y[range(int(N/2))]#由于对称性,也取一半区间
    plt.figure()
    plt.plot(half_X,normalization_half_y,'b')
    plt.title("单边频谱(归一化)")#单边频谱即最终的振幅谱
    plt.show()"""
    
    #振幅谱完整代码
    
    mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文
    mpl.rcParams['axes.unicode_minus']=False #显示负号
    X=np.linspace(0,1,1400)#采样点应选择最大频率2.5倍,这里最大是600赫兹,所以选择1400
    y=7*np.sin(2*np.pi*200*X)+5*np.sin(2*np.pi*400*X)+3*np.sin(2*np.pi*600*X)#200Hz、400Hz、600Hz三个正玄波
    fft_y=fft(y)#快速傅里叶
    N=1400
    X=np.arange(N)#频率个数
    half_X=X[range(int(N/2))]#取一半区间
    abs_y=np.abs(fft_y)#取复数的绝对值,即复数的模(双边频谱)
    angle_y=np.angle(fft_y)#取复数的角度
    normalization_y=abs_y/N #归一化处理
    normalization_half_y=normalization_y[range(int(N/2))]#由于对称性,也取一半区间
    plt.subplot(2,3,1)
    plt.plot(X,y)
    plt.title("原始波型")
    plt.subplot(2,3,2)
    plt.plot(X,fft_y)
    plt.title("双边振幅谱(未求绝对值)")
    plt.subplot(2,3,3)
    plt.plot(X,abs_y)
    plt.title("双边振幅谱(未归一化)")
    
    plt.subplot(2,3,4)
    plt.plot(X,angle_y)
    plt.title("双边相位谱(未归一化)")
    plt.subplot(2,3,5)
    plt.plot(X,normalization_y)
    plt.title("双边振幅谱(归一化)")
    plt.subplot(2,3,6)
    plt.plot(half_X,normalization_half_y)
    plt.title("单边振幅谱(归一化)")
    plt.show()
    

      

  • 相关阅读:
    docker构建镜像
    SpringBoot 配置的加载
    Gradle实战(02)--Gradle Build的创建
    Gradle实战(01)--介绍与安装
    统计最常用10个命令的脚本
    jackson序列化与反序列化的应用实践
    go http请求流程分析
    java线程的3种实现方式及线程池
    git多账号使用
    java多版本管理
  • 原文地址:https://www.cnblogs.com/gao109214/p/13494512.html
Copyright © 2011-2022 走看看