赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:单方面记录一下关于功率谱的各种计算方法,包含自相关功率谱密度和互相关功率谱密度
功率谱密度(PSD),单位为:unit^2/Hz代表单位频率上信号的能量,所以是密度谱,幅值代表频段内的有效值平方。
什么是频段有效值的平方:假设我们有一个信号,我们将其划分为不同的频段或频率范围。在每个频段内,我们计算信号的有效值(RMS),然后将其平方。有效值是信号振幅的平方根的均值。对于功率谱密度(PSD)中的某个频段,计算该频段内信号的有效值,然后将其平方,这样就得到了该频段内信号的能量密度。
PSD 是在频域上描述信号能量分布的,因此在每个频率范围内,PSD 的值代表了信号在该频率范围内的能量密度,即在该频段内信号有效值的平方。
提示:功率谱密度的国际单位
功率谱密度的单位取决于物理量的单位和频率单位。以下是一些常见物理量的功率谱密度的国际单位示例:
电压(单位是伏特,V)的功率谱密度单位是:瓦特/赫兹(W/Hz)或者毫瓦/赫兹(mW/Hz)。
电流(单位是安培,A)的功率谱密度单位也是:瓦特/赫兹(W/Hz)或者毫瓦/赫兹(mW/Hz)。
位移(单位是米,m)的功率谱密度单位是:米²/赫兹(m²/Hz)。
力(单位是牛顿,N)的功率谱密度单位是:牛顿²/赫兹(N²/Hz)。
声压级(单位是帕斯卡,Pa)的功率谱密度单位是:帕斯卡²/赫兹(Pa²/Hz)。
这些单位表示在每赫兹频率范围内的功率谱密度,即在单位频率上的能量密度。
自相关功率谱密度(Autopower Spectral Density,APSD)是描述信号自身在频率域上的功率分布情况的一种方法。
自相关功率谱密度是信号在频率域上的功率谱密度,但是它表示的是信号与自身的相关性,即信号在不同频率上的功率分布。它测量了信号在不同频率下的自相关性或自相干性,即信号在不同频率上自身与自身之间的相互关系。
在自相关功率谱密度中,幅值代表了信号在不同频率上的功率强度,描述了信号自身在频域上的能量分布情况。通常,自相关功率谱密度用于分析信号在不同频率上的自相关特性,例如周期性、频率分布以及信号内在的频率成分。
本人只是想落地应用,最简单实用的方式就是使用Python中的Scipy库自带的welch法计算APSD,下面是一个示例代码。
import numpy as np import matplotlib.pyplot as plt from scipy.signal import welch # 生成示例信号,这里使用随机生成的信号 np.random.seed(0) time = np.arange(0, 10, 0.01) # 时间范围为0到10,采样频率为100Hz signal = np.sin(2 * np.pi * 1 * time) + np.random.normal(scale=0.5, size=len(time)) # 计算自相关功率谱密度 frequencies, apsd = welch(signal, fs=100, nperseg=1024) # 绘制自相关功率谱密度图 plt.figure(figsize=(8, 6)) plt.semilogy(frequencies, apsd) plt.xlabel('频率 (Hz)') plt.ylabel('自相关功率谱密度') plt.title('示例信号的自相关功率谱密度图') plt.grid(True) plt.show()
Welch方法的最大优点就是通过添加窗函数防止频谱泄露,频谱泄露的定义就是信号的非周期截断导致频谱在整个频带内发生了严重的拖尾现象。这是非常言中国的误差,称之为泄露
互相关功率谱密度函数(Cross Power Spectral Density, CPSD)是用于描述两个信号之间相互关系的频率分布的函数。
CPSD 衡量了两个信号在频率域上的相关性或相干性,即它测量了这两个信号在不同频率上的相互关系。它通常用于分析两个信号之间的频率相关性,比如信号之间的耦合、共振或相关性等。
CPSD的计算通常涉及傅里叶变换和复数操作,结果是一个表示频率与信号相关性的函数。它提供了关于两个信号在频率域上如何相互影响的信息。
同样,也是使用Python中的Scipy库自带的csd法计算CPSD
代码如下(示例):
import numpy as np import matplotlib.pyplot as plt from scipy.signal import csd # 生成两个示例信号,这里使用随机生成的信号 np.random.seed(0) time = np.arange(0, 10, 0.01) # 时间范围为0到10,采样频率为100Hz signal1 = np.sin(2 * np.pi * 1 * time) + np.random.normal(scale=0.5, size=len(time)) signal2 = np.cos(2 * np.pi * 1 * time) + np.random.normal(scale=0.5, size=len(time)) # 计算互相关功率谱密度 frequencies, cpsd = csd(signal1, signal2, fs=100, nperseg=1024) # 绘制互相关功率谱密度图 plt.figure(figsize=(8, 6)) plt.semilogy(frequencies, np.abs(cpsd)) plt.xlabel('频率 (Hz)') plt.ylabel('互相关功率谱密度') plt.title('示例信号的互相关功率谱密度图') plt.grid(True) plt.show()
留着自己看看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。