zoukankan      html  css  js  c++  java
  • 信号处理之功率谱原理与python实现

    本教程为脑机学习者Rose原创(转载请联系作者授权)发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195

    功率谱简介

    功率谱图又叫功率谱密度图
    功率谱是功率谱密度函数的简称,它定义为单位频带内的信号功率。它表示了信号功率随着频率的变化情况,即信号功率在频域的分布状况。

    功率谱表示了信号功率随着频率的变化关系。常用于功率信号(区别于能量信号)的表述与分析,其曲线(即功率谱曲线)一般横坐标为频率,纵坐标为功率。由于功率没有负值,所以功率谱曲线上的纵坐标也没有负数值,功率谱曲线所覆盖的面积在数值上等于信号的总功率(能量)。

    功率谱、能量谱、幅值谱之间的关系

    知乎用户CrisYang对功率谱、能量谱、幅值谱之间的关系进行了详细的说明:
    在频谱分析中幅度和功率是由紧密联系的两个不同的物理量:能量能表述为幅值的平方和,也能表述为功率在时间上的积分;功率谱密度,是指用密度的概念表示信号功率在各频率点的分布情况,是对随机变量均方值的量度,是单位频率的平均功率量纲;也就是说,对功率谱在频域上积分就可以得到信号的平均功率,而不是能量。能量谱密度是单位频率的幅值平方和量纲,能量谱密度曲线下面的面积才是这个信号的总能量。于是,功率谱、能量谱、幅值谱之间的紧密关系主要表述为:能量谱是功率谱密度函数在相位上的卷积,也是幅值谱密度函数的平方在频率上的积分;功率谱是信号自相关函数的傅里叶变换,能量谱是信号本身傅立叶变换幅度的平方。

    功率谱python实现

    from scipy.fftpack import fft, fftshift, ifft
    from scipy.fftpack import fftfreq
    import numpy as np
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings("ignore")
    
    fs = 1000
    #采样点数
    num_fft = 1024;
    
    """
    生成原始信号序列
    
    在原始信号中加上噪声
    np.random.randn(t.size)
    """
    t = np.arange(0, 1, 1/fs)
    f0 = 100
    f1 = 200
    x = np.cos(2*np.pi*f0*t) + 3*np.cos(2*np.pi*f1*t) + np.random.randn(t.size)
    
    plt.figure(figsize=(15, 12))
    ax=plt.subplot(511)
    ax.set_title('original signal')
    plt.tight_layout()
    plt.plot(x)
    
    """
    FFT(Fast Fourier Transformation)快速傅里叶变换
    """
    Y = fft(x, num_fft)
    Y = np.abs(Y)
    
    ax=plt.subplot(512)
    ax.set_title('fft transform')
    plt.plot(20*np.log10(Y[:num_fft//2]))
    
    """
    功率谱 power spectrum
    直接平方
    """
    ps = Y**2 / num_fft
    ax=plt.subplot(513)
    ax.set_title('direct method')
    plt.plot(20*np.log10(ps[:num_fft//2]))
    
    """
    相关功谱率 power spectrum using correlate
    间接法
    """
    cor_x = np.correlate(x, x, 'same')
    cor_X = fft(cor_x, num_fft)
    ps_cor = np.abs(cor_X)
    ps_cor = ps_cor / np.max(ps_cor)
    ax=plt.subplot(514)
    ax.set_title('indirect method')
    plt.plot(20*np.log10(ps_cor[:num_fft//2]))
    plt.tight_layout()
    plt.show()
    

    脑机学习者Rose笔记分享,QQ交流群:903290195
    更多分享,请关注公众号

  • 相关阅读:
    省选知识点
    寒假练习
    水题欢乐赛-套路
    2019年12月(2)
    洛谷P1347 排序
    Aizu
    2019年12月(1)
    【CSP2019】
    联系博主
    UVA1420 Priest John's Busiest Day【贪心】
  • 原文地址:https://www.cnblogs.com/RoseVorchid/p/11991430.html
Copyright © 2011-2022 走看看