python中实现功率谱的原理是什么
这篇文章给大家介绍python中实现功率谱的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联是一家专注于成都网站设计、网站制作、外贸营销网站建设与策划设计,沙县网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:沙县等地区。沙县做网站价格咨询:18982081108
功率谱图又叫功率谱密度图
功率谱是功率谱密度函数的简称,它定义为单位频带内的信号功率。它表示了信号功率随着频率的变化情况,即信号功率在频域的分布状况。
功率谱表示了信号功率随着频率的变化关系。常用于功率信号(区别于能量信号)的表述与分析,其曲线(即功率谱曲线)一般横坐标为频率,纵坐标为功率。由于功率没有负值,所以功率谱曲线上的纵坐标也没有负数值,功率谱曲线所覆盖的面积在数值上等于信号的总功率(能量)。
知乎用户CrisYang对功率谱、能量谱、幅值谱之间的关系进行了详细的说明:
在频谱分析中幅度和功率是由紧密联系的两个不同的物理量:能量能表述为幅值的平方和,也能表述为功率在时间上的积分;功率谱密度,是指用密度的概念表示信号功率在各频率点的分布情况,是对随机变量均方值的量度,是单位频率的平均功率量纲;也就是说,对功率谱在频域上积分就可以得到信号的平均功率,而不是能量。能量谱密度是单位频率的幅值平方和量纲,能量谱密度曲线下面的面积才是这个信号的总能量。于是,功率谱、能量谱、幅值谱之间的紧密关系主要表述为:能量谱是功率谱密度函数在相位上的卷积,也是幅值谱密度函数的平方在频率上的积分;功率谱是信号自相关函数的傅里叶变换,能量谱是信号本身傅立叶变换幅度的平方。
from scipy.fftpack import fft, fftshift, ifftfrom scipy.fftpack import fftfreqimport numpy as npimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore")fs = 1000#采样点数num_fft = 1024;"""生成原始信号序列在原始信号中加上噪声np.random.randn(t.size)"""t = np.arange(0, 1, 1/fs)f0 = 100f1 = 200x = 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_fftax=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()
代码来源于网络,本文对代码进行注释并整理
功率谱是功率谱密度(Power Spectral Density, PSD)函数的简称,它定义为单位频带内的信号功率。
它表示了信号功率随着频率的变化关系,即信号功率在频域的分布状况。
功率谱密度的单位用每赫兹的瓦特数(W/Hz)表示,
它的另一种单位 dB,当单位为dB时是因为对数据做了对数处理(10logX)
做对数处理的目的是拉高低振幅成分,便于观察噪声中的周期信号
功率谱估计是频域分析的主要分析手段,我们之前看到的是幅度随时间变化的脑电波
功率谱展现的是脑电功率随频率变化的频图。
在睡眠的分期以及智力活动与EEG之间的关系等很多方面,功率谱分析都非常有用。
MNE中专门针对Raw对象(也就是原始脑电信号),有多种绘制PSD图的方式
1.利用plot_psd()绘制功率谱图
2.利用plot_psd_topo()在脑地形图上绘制功率谱图
下面以plot_psd为例介绍一下绘制PSD的案例。
# 引入python库import mnefrom mne.datasets import sampleimport matplotlib.pyplot as plt# sample的存放地址data_path = sample.data_path()# 该fif文件存放地址file_name = data_path + '/MEG/sample/sample_audvis_raw.fif'"""读取数据文件"""raw = mne.io.read_raw_fif(file_name,preload=True)
"""绘制指定通道的功率谱图"""picks = ['eeg']raw.plot_psd(picks=picks)plt.show()
"""设置更窄频率范围设置fmin和fmax来指定频率的跨度。"""picks = ['eeg']#raw.plot_psd(picks=picks,fmin=0,fmax=100)raw.plot_psd(picks=picks,fmin=0,fmax=80)plt.show()
关于python中实现功率谱的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
当前标题:python中实现功率谱的原理是什么
本文链接:http://hbruida.cn/article/iehhho.html