差分黑白光谱熵和平坦度测量
信息处理
频谱
2022-02-06 11:03:39
1个回答
假设您根据我添加到问题的第一个链接计算功率谱熵:
那么光谱平坦度(使用相同的符号)将是
因为被归一化为单位和,所以第二个与问题相关的是一个。
正如您所看到的,两者在形式上相似,只是 Flatness 出现在 a) 取幂和 b) 假设是均匀的。
至于使用哪一个,我可能会选择 PSE 而不是 Flatness。它似乎更多地利用了光谱信息。
为了测试我的理论,我编写了一个比较,从纯谐波信号开始,到纯白噪声信号,并计算每个混合的两个测量值。
从底部图中红色和蓝色曲线的接近程度可以看出,这两种度量之间的差异很小。
请注意,我已经对两条曲线进行了归一化,因此它们介于 0 和 1 之间,只是为了更容易比较它们。
底线:选择最简单的;对于此示例,两者之间似乎几乎没有区别。
下面的R代码
#30534
T <- 1000
white_noise <- rnorm(T,0,1)
K <- array(seq(1,5),c(5,1)) %*% array(1,c(1,T))
omega <- 2*pi*0.053492384
t <- array(seq(0,T-1), dim=c(1,T))
t <- array(1,c(5,1)) %*% t
harmonic <- colSums(sin(omega*K*t))
spectral_entropy <- function(signal)
{
psd <- abs(fft(signal))^2
psd <- psd/sum(psd)
pse <- 0
for (ix in seq(1,length(psd)))
{
pse <- pse - psd[ix]*log(psd[ix])
}
return(pse)
}
flatness <- function(signal)
{
psd <- abs(fft(signal))^2
psd <- psd/sum(psd)
flatness <- 0
for (ix in seq(1,length(psd)))
{
flatness <- flatness + log(psd[ix])/length(psd)
}
return (exp(flatness))
}
P <- 100
pse <- rep(0,P)
flt <- rep(0,P)
for (alpha in seq(0,P))
{
signal <- white_noise*(alpha/P) + (1-alpha/P)*harmonic
pse[alpha+1] <- spectral_entropy(signal)
flt[alpha+1] <- flatness(signal)
}
normalize <- function(signal)
{
return( (signal - min(signal))/(max(signal) - min(signal)))
}
layout(matrix(c(1,2,3,3), 2, 2, byrow = TRUE))
plot(abs(fft(harmonic)), type="l", col="blue")
title("Harmonic Spectrum")
plot(abs(fft(white_noise)), type="l", col="blue")
title("White Noise Spectrum")
plot(seq(0,P)/P, normalize(pse), type="l", col="blue")
lines(seq(0,P)/P, normalize(flt), type="l", col="red")
title('Comparison of PSE vs Flatness')
其它你可能感兴趣的问题