# peig
使用特征向量法的伪谱
函数库: TySignalProcessing
# 语法
S, wo, = peig(x, p)
S, wo, = peig(___; nfft = Integer)
S, wo, = peig(___; corr = true)
S, fo, = peig(___; nfft = Integer, fs = Number)
S, fo, = peig(___; fi = Vector, fs = Number)
S, fo, = peig(___; nfft = Integer, fs = Number, nw = Integer, noverlap = Integer)
S, wo, = peig(___; freqrange = value)
S, fo, v, e = peig(___)
___ = peig(___; plotfig = Bool)
# 说明
S, wo, = peig(x, p) 实现了特征向量谱估计方法,并返回输入信号 x 的伪谱估计 S,以及评估伪谱的归一化频率(以 rad/sample 为单位)的向量 wo。使用输入数据 x 相关矩阵的特征向量估计来计算伪谱。可以使用输入参数 p 来指定信号子空间维数。
S, wo, = peig(___; nfft = Integer) 指定用于估计伪谱的 FFT 的整数长度 nfft。此语法可以包括其他语法输入参数的任何组合。
S, wo, = peig(___; corr = true) 使输入信号 x 被解释为相关矩阵而不是信号数据矩阵。对于这种语法,x 必须是一个方阵,并且它的所有特征值必须是非负的。
S, fo, = peig(___; nfft = Integer, fs = Number) 以 Hz 为单位提供采样率 fs, 返回指定的频率下计算的伪谱。 示例
S, fo, = peig(___; fi = Vector, fs = Number) 返回指定的频率下计算的伪谱。向量 fi 必须有两个或多个元素,否则函数将其解释为 nfft。
S, fo, = peig(___; nfft = Integer, fs = Number, nw = Integer, noverlap = Integer) 通过使用窗口 nw 和重叠长度 noverlap 分割输入数据 x ,并返回伪谱 S。
S, fo, v, e = peig(___) 返回噪声特征向量的矩阵 v 以及向量 e 中的相关特征值。
___ = peig(___; freqrange= value) 指定要包含在 fo 或 wo 中的频率值范围。 示例
___ = peig(___; plotfig = Bool) 在当前图形窗口中绘制伪谱。
# 示例
正弦和的伪谱
实现特征向量方法以找到噪声中三个正弦曲线之和的伪谱。使用默认的 FFT 长度 256。输入是正弦曲线,将 p 设置为等于输入的数量。使用修正的协方差方法进行相关矩阵估计。
using TySignalProcessing
using TyMath
rng = MT19937ar(1234)
n = 0:99
s = @. exp(1im * pi / 2 * n) + 2 * exp(1im * pi / 4 * n) + exp(1im * pi / 3 * n)
s = s + randn(rng, 100)
X, = corrmtx(s, 12, "modified")
p, f = peig(X, 3; plotfig=true, freqrange="whole")

实数信号的伪谱
生成的信号以 100 Hz 采样 1 s。正弦曲线的频率为 25 Hz 和 35 Hz。低频正弦波的振幅是另一个的两倍。
using TyPlot
using TySignalProcessing
using TyMath
fs = 100
t = 0:(1 / fs):(1 - 1 / fs);
rng = MT19937ar(1234)
s = 2 * sin.(2 * pi * 25 * t) + sin.(2 * pi * 35 * t) + randn(rng, 100)
使用特征向量法计算 0 和奈奎斯特频率之间的信号伪谱。指定信号子空间维数为 2,DFT 长度为 512。
peig(s, 2; nfft=512, fs=fs, freqrange="half", plotfig=true)
因为信号是实的,所以不可能解析这两个正弦曲线。使用维度为 4 的信号子空间重复计算。
figure()
peig(s, 4; nfft=512, fs=fs, freqrange="half", plotfig=true)

# 输入参数
x - 输入信号向量 | 矩阵
输入信号,指定为向量或矩阵。如果 x 是一个向量,那么它被视为信号的一个观测值。如果 x 是矩阵,则 x 的每一行表示信号的单独观察。例如,在数组处理中,每一行是传感器数组的一个输出,因此 x'*x 是相关矩阵的估计值。
提示
您可以使用 corrmtx 的输出生成 x。
数据类型: Float
是否支持复数: 是
p - 子空间维度实正整数 | 二元向量
子空间维度,指定为实正整数或双元素向量。如果 p 是实正整数,则将其视为子空间维数。如果 p 是一个双元素向量,则 p 的第二个元素表示一个阈值,该阈值乘以信号相关矩阵的最小估计特征值 λmin。将低于阈值
提示
如果 peig 的输入是实的正弦曲线,则将 p 的值设置为正弦曲线数的两倍。如果输入是复正弦曲线,则将 p 设置为等于正弦曲线的数量。
数据类型: Float | Int
是否支持复数: 是
nfft - DFT 点数256(默认值)|整数
DFT 点数,指定为正整数。
数据类型: Int
fs - 采样率1(默认值)|正标量
采样率,指定为以 Hz 为单位的正标量。采样率默认为 1 Hz。
数据类型: Float | Int
fi - 输入频率(Hz)向量
输入频率,指定为向量。在向量中指定的频率下计算伪谱。
数据类型: Float | Int
nw - 矩形窗的长度2*p(1) (默认值) | 非负整数
矩形窗口的长度,指定为非负整数。
数据类型: Int
noverlap - 重叠样本数nw-1(默认值) | 非负整数
重叠样本数,指定为小于窗口长度的非负整数。
数据类型: Int
提示
在语法中包含 "corr" 时,将忽略参数 nw 和 noverlap。
freqrange - 伪谱估计的频率范围"half" | "whole" | "centered"
伪谱估计的频率范围,指定为 "half"、"whole" 或 "centered" 之一。
- "half":返回实际输入信号 x 的一半频谱。如果 nfft为 偶数,则 S 的长度为 nfft/2+1,并在区间 [0, π] 上计算。如果 nfft 为奇数,则 S 的长度为 (nfft+1)/2,频率间隔为 [0,π)。当指定fs时,偶数和奇数 nfft 的间隔分别为 [0, fs/2) 和 [0, fs/2];
- "whole":返回实数或复数输入 x 的整个频谱。在这种情况下,S 的长度为 nfft,并在间隔 [0,2π) 上计算。如果指定 fs,则频率间隔为 [0,fs);
- "centered":返回实数或复数输入 x 的居中全谱。在这种情况下,S 的长度为 nfft,对于偶数 nfft,在区间 (–π,π) 上计算,对于奇数 nfft,则在区间 (-π,π] 上计算。指定 fs 时,偶数和奇数 nfft 的频率间隔分别为 (–fs/2,fs/2] 和 (–fs/2,fs/2)。
数据类型: String
提示
您可以将参数 freqrange 或 corr=true 放在输入参数列表中 p 之后的任何位置。
# 输出参数
S - 伪谱估计向量
伪谱估计,作为向量返回。使用与输入数据 x 相关联的相关矩阵的特征向量的估计来计算伪谱。
数据类型: Float
wo - 输出归一化频率向量
输出归一化频率,指定为向量。S 和 wo 具有相同的长度。通常,FFT 的长度和输入 x 的值决定了计算的 S 的长度和相应的归一化频率的范围。该表指示了 S 和 wo 的长度以及第一语法的对应归一化频率的范围。
FFT 长度为 256 的 S 特性 (默认值)
| 输入数据类型 | S 和 wo 的长度 | 相应归一化频率的范围 |
|---|---|---|
| 实数 | 129 | [0, π] |
| 复数 | 256 | [0, 2π) |
如果指定了 nfft,下表显示了 S 和 wo 的长度以及 wo 的频率范围。
S 和频率向量特性
| 输入数据类型 | nfft 偶数或奇数 | w 的范围 | 相应归一化频率的范围 |
|---|---|---|---|
| 实数 | 偶数 | (nfft/2)+1 | [0, π] |
| 实数 | 奇数 | (nfft+1)/2 | [0, π) |
| 复数 | 偶数或奇数 | nfft | [0, 2π) |
fo - 输出频率向量
输出频率,以向量形式返回。fo 的频率范围取决于 nfft、fs 和输入 x 的值。S 和 fo 的长度与上述 S 和频率向量特性相同。如果指定了 nfft 和 fs,下表指示了 fo 的频率范围。
指定 fs 的 S 和频率向量特性
| 输入数据类型 | nfft 偶数或奇数 | f 的范围 |
|---|---|---|
| 实数 | 偶数 | [0, fs/2] |
| 实数 | 奇数 | [0, fs/2) |
| 复数 | 偶数或奇数 | [0, fs) |
此外,如果还指定了 nw 和 noverlap,则在公式化用于估计相关矩阵特征值的矩阵之前,对输入数据 x 进行分段和加窗。数据的分割取决于 nw、noverlap 和 x 的形式。下表描述了对生成的窗口段的注释。
窗口数据取决于 x 和 nw
| x 的形式 | nw 的形式 | 窗口化数据 |
|---|---|---|
| 向量 | 标量 | 长度为 nw |
| 向量 | 系数的向量 | 长度为 length(nw) |
| 矩阵 | 标量 | 数据未窗口化。 |
| 矩阵 | 系数的向量 | length(nw) 必须与 x 的 列长度相同,并且不使用 noverlap。 |
数据类型: Float | Int
v - 噪声特征向量矩阵
噪声特征向量,以矩阵形式返回。v 的列跨越维度大小 (v,2) 的噪声子空间。信号子空间的维数是 size(v,1)-size(v,2)。
数据类型: ComplexF64
e - 估计特征值向量
相关矩阵的估计特征值,作为向量返回。
数据类型: Float
# 算法
本征向量方法使用从施密特特征空间分析方法 [1][2] 导出的 MUSIC 算法的加权版本,从信号或相关矩阵中估计伪谱。该算法对信号的相关矩阵进行特征空间分析,以估计信号的频率含量。如果不提供相关矩阵,则使用 svd 估计信号相关矩阵的特征值和特征向量。该算法特别适用于具有加性高斯白噪声的正弦和信号。 特征向量法产生伪谱估计,由:
其中 N 是输入信号的相关矩阵的特征向量的维数,
# 参考文献
[1] Marple, S. Lawrence. Digital Spectral Analysis. Englewood Cliffs, NJ: Prentice-Hall, 1987, pp. 373–378.
[2] Schmidt, R. O. “Multiple Emitter Location and Signal Parameter Estimation.” IEEE® Transactions on Antennas and Propagation. Vol. AP-34, March, 1986, pp. 276–280.
[3] Stoica, Petre, and Randolph L. Moses. Spectral Analysis of Signals. Upper Saddle River, NJ: Prentice Hall, 2005.