功率估算

信息处理 参数估计
2022-02-12 15:36:05

我有来自两个通道的数据。第一个包含感兴趣的信号,加上一些加性高斯白噪声,第二个包含我感兴趣的信号和具有不同方差(不同噪声功率)的噪声的缩放(真实,非负)副本。ABs[n]

a[n]=s[n]+Na[n]b[n]=ms[n]+Nb[n]

我不知道,但假设它的平均值为零,并且我不知道噪声功率,但它们与信号功率相当或略高。 s[n]

  • 是否有可能得到的无偏估计? m
  • 如果是这样,怎么做?
  • 如果不是,我怎么能证明这一点?

如果我可以估计的方差,则以下方法可行:Na

m^=nb[n]a[n]na[n]a[n]nσNa2

(编辑:由于罗伯特·布里斯托 - 约翰逊的修正 - 我需要总和的比率,而不是比率的总和)

2个回答

将符号更改为更好的符​​号,我认为总和必须同时包含分子和分母:

m^=nb[n]a[n]na[n]a[n]nσNa2


这是一个显示:

  • 从真实值中选择不同的值的变化。真实值用红线表示。 σNa2
    • 结果:总是低估它,或者只是选择它为零。
  • 绿色的真实值与@Peter K. 的答案中的mb/a
  • 两个估计器运行 100 次的估计值。蓝色是这个估计量,绿色是值的中间五分之一。 b/a
    • 对于这个特定的运行,这个估计量的方差是 0.03013508;估计值为 0.04913840 b/a

底线:将此估计器与一起使用。σNa2=0

在此处输入图像描述


下面的R代码

# 30639
N <- 1000

s <- rnorm(N, 0, 1)

sigma_a <- 0.1
sigma_b <- 0.2

na <- rnorm(N,0,sigma_a)
nb <- rnorm(N,0,sigma_b)

m <- 10

a <- s + na
b <- m*s  + nb

ix <- 1

test_values <- seq(0,sigma_b*4,0.001)
mhat <- 0*test_values
for (test_sigma_b in test_values)
{  
  mhat[ix] <- sum(b * a)/(sum(a*a) - N*test_sigma_b*test_sigma_b)
  ix <- ix + 1
}

par(mfrow=c(3,1))
plot(test_values, mhat, ylim=c(-10,20), type="l")
lines(c(sigma_b, sigma_b), c(-10,20), col="red");
title('Effect of varying sigma_b')

plot(b/a,  pch=10, col="grey", ylim=c(-10,20))
lines(c(1,N), c(m, m), type="l", col="green", lwd=10)
#lines(c(1,N), c(mhat, mhat), type="l", col="blue", lwd=5)
title('True m value vs b/a estimate')

Nruns <- 100
mhat_1 <- rep(0,Nruns)
mhat_2 <- rep(0,Nruns)

for (run_number in seq(1,Nruns))
{
  s_run <- rnorm(N, 0, 1)
  a_run <- s_run + rnorm(N,0,sigma_a)
  b_run <- m * s_run + rnorm(N,0,sigma_b)

  mhat_1[run_number] <- sum(b_run * a_run)/sum(a_run*a_run)
  mhat_2[run_number] <- quantile(b_run/a_run)[3]
}

sds <- c(sd(mhat_1), sd(mhat_2))
print(sds)

plot(mhat_1, type="l", col="blue")
lines(mhat_2, col="green")
title('BLUE: rb-j estimate GREEN: middle quintile of b/a estimate')

好吧,显而易见的方法是对任何特定

m^=b[n]/a[n]
n

请注意,因为是高斯分布的,所以除法将是柯西分布的。不幸的是,平均柯西随机变量并不能改善方差,所以做 不会改善估计.ab

1Nn=0N1b[n]/a[n]