我对scipy.signal.periodogram中使用的术语感到困惑,即:
缩放:{'density','spectrum'},可选
在计算功率谱密度('密度')之间进行选择
其中Pxx
的单位为V * 2 / Hz,如果在V和计算中测量x
功率谱('频谱'),Pxx
的单位为V * 2,如果x
是
用V.测量默认为'密度'
(见:http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.periodogram.html)
1)一些测试表明,选项“密度”的结果取决于信号和窗口长度以及采样频率(当信号长度增加时增长)。怎么会?我会说密度应该不依赖于这些东西。如果我采取更长的信号,我应该得到更准确的估计,而不是不同的结果。更不用说对窗口长度的依赖也是非常令人惊讶的。 结果在无限信号的极限上发散,这可能是能量的一个特征,但不是功率的特征。当长度增加时,周期图是否应该收敛到真正的理论PSD?如果,那么,我是否应该在signal.periodogram方法之外执行另一个归一化?
2)相反,我看到替代选项'频谱'给出了我以前称之为功率谱密度,也就是说,它给出了与窗口段和窗口长度无关的结果并且与理论计算一致。例如,对于Asin(2PIft),双侧溶液在-f和f处产生两个峰,每个峰的高度为0.25 * A ^ 2。
有很多关于这个主题的文献,但我得到的印象是,还有很多不兼容的术语,所以我要感谢任何澄清。直截了当的问题是如何解释这些选项及其单位。 (我习惯于看到标有“功率谱密度”的V ^ 2 / Hz。)
答案 0 :(得分:1)
答案 1 :(得分:1)
让我们采用一个名为data的真实数组,该数组的长度为N,采样频率为fs。我们将时间箱dt = 1 / fs称为T = N * dt。在频域中,频率仓df = 1 / T = fs / N。
功率谱PS (在scipy.periodogram中为scaling ='spectrum')计算如下:
import numpy as np
import scipy.fft as fft
dft = fft.fft(data)
PS = np.abs(dft)**2 / N ** 2
它的单位为V ^ 2。可以理解为如下。与连续傅立叶变换类似,信号的能量E为:
E:= np.sum(data ** 2)* dt = 1 / N * np.sum(np.abs(dft)** 2)* dt
(根据Parseval定理)。信号的功率P是总能量E除以信号的持续时间T:
P:= E / T = 1 / N ** 2 * np.sum(np.abs(dft)** 2)
功率P仅取决于离散傅里叶变换(DFT)和样本数N。不直接取决于采样频率fs或信号持续时间T。因此,每个频道的功率即功率谱SP由上式给出:
PS = np.abs(dft)**2 / N ** 2
对于功率谱密度PSD (scipy.periodogram中的scaling ='density'),需要将PS除以DFT的频率段df:
PSD:= PS / df = PS * N * dt = PS * N / fs
因此:
PSD = np.abs(dft)**2 / N * dt
这具有V ^ 2 / Hz = V ^ 2 * s的单位,现在取决于采样频率。这样,在整个频率范围内对PSD进行积分可以得到与将PS的各个值相加相同的结果。
这应该说明您在更改窗口,采样频率,持续时间时看到的关系。
答案 2 :(得分:0)