我正在研究处理时域中的信号和数据。目前,我想使用主要用于频率估计的多信号分类算法(MUSIC)(我发现了很多关于 DOA MUSIC 的资源,这不是我的兴趣)。该等式的公式如下:-
在哪里:-
S(f) 是一个复正弦向量,表示如下
T 是复向量的转置
书中提出的Vi,它表示噪声子空间中的特征向量
f 是频率
这是维基百科和维基百科链接下面的书相同的方程式
我的主要问题是我不知道方程式中应该使用什么频率值(实际上我对输出的频率范围感兴趣,但我不知道应该如何在方程式中评估它)。
我的第二个问题是如何在数学上做到这一点,特别是当我在频率向量 s(f) 和特征向量 Vi 之间进行点积时,因为我所做的是我创建了一个大小为 n 的频率向量(与特征向量相同size) 并且我在它们之间做了点积,我不确定我是否只需要对单个频率向量或所有可能的 k 值做点积。
总结一下,我有一个代表信号的值列表,即在给定时间(即 30 秒)内的 300 个元素。这就是我所做的
我使用Toeplitz 矩阵算法创建了一个自相关矩阵。
我已经计算了自相关矩阵的特征值和特征向量。
我已经按降序对特征值进行了排序,然后根据特征值对特征向量进行了排序。
我已经决定了 P 的值,正如书中描述的那样,特征值应该有明显的差异(巨大)。
我将特征向量分为主特征向量和噪声特征向量(我们只对噪声特征向量感兴趣)。
我已经根据给定频率的所有可能 K 值的方程创建了一个频率向量。
我在频率向量和具有相同长度的噪声特征向量之间做了一个点积。
这是我实现的伪代码,但我认为它不正确,因为我在数学上不太了解方程式:-
N <- the number of samples in the signal
P <- the inedx of the value which splits the singal into principal sinal and noise signal
SRate <- the number of samples per second in our case fps
Vi <- eigen vectors in the noise subspace
s(f) <- the complex sinusoidal vectors (frequency vector)
s(f)^T <- the transposed matrix
sig --> signal
acm <- autocorrelation matrix of sig
eval ,evec <- compute the eigen values and eigen vecotrs of acm
evec <- sort_decsending_based_on_evals(eval, evec)
v <- evec[p:N]
slices <- SRate * N
for f_i <- 0 to slices:
f = f_i / slices
ω = 2 * π * f
// constructing the frequency vector
for i <- 0 to N:
// e^(j*omega) was computed using euler's formula
s[i] <- cos (i*ω) + j sin(i*ω)
sum <- 0
for k <- p + 1 to N:
sum += | s^T . v[k] | ^ 2
res{f} <- 1/sum
这是该算法所在的书的参考资料,第 91 页: book