# 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。将低于阈值 的特征值分配给噪声子空间。在这种情况下,p(1) 指定信号子空间的最大维数。p 中第二个条目中的额外阈值参数为您分配噪声和信号子空间提供了更多的灵活性和控制。

提示

如果 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 是输入信号的相关矩阵的特征向量的维数, 是第 k 个特征向量。整数 p 是信号子空间的维数,因此和中使用的特征向量 对应于相关矩阵的最小特征值 。使用的特征向量跨越噪声子空间。向量 由复指数组成,因此内积 相当于傅里叶变换。这用于计算伪谱。计算每个 的 FFT,然后求和和缩放平方幅度。

# 参考文献

[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.

# 另请参阅

rooteig | pmusic | rootmusic