随机抽样与均匀抽样

信息处理 信号分析 采样 下采样 随机的 重建
2021-12-26 22:21:34

在Lustig 的这篇论文中,他谈到了一件看似不直观的事情:随机抽样可能比均匀抽样表现出更好的性能。我试图从这些幻灯片的第 15 页开始理解这一点,但我无法真正理解任何事情。

为什么,如果我们对频率系数进行随机排列,我们会在信号相似性方面得到更好的重建吗?为什么这可以提供更好的重建,这种现象背后的直觉是什么?

1个回答

关键思想是随机抽样方法比均匀抽样方法对结果信号施加更多的约束。

用于重构随机采样信号的 POCS(凸集投影)算法是关键部分:它强制执行:

  • 信号必须来自这个频谱。
  • 信号是实值的。
  • 我们对信号频谱的了解(随机采样的傅立叶系数)。
  • 我们对信号的时域形式的了解。

统一抽样方法不尝试强制实施粗体约束。

这是一个显示的示例:

  • 左上:仅使用 FFT 的均匀欠采样和重建。
  • 右上:仅使用 FFT 的随机欠采样和重建。
  • 左下:使用 POCS 重建

如您所见,最终的约束确实极大地改善了重建。

在此处输入图像描述


下面的R代码

#30219

T <- 128
N <- 5

x <- rep(0, T)
x[sample(T,N)] <- rep(1,N)

X <- fft(x);
Xu <- rep(0, T)
Xu[seq(1,T,4)] <- X[seq(1,T,4)];
xu <- fft(Xu, inverse = TRUE)*4/T;

par(mfrow=c(2,2))
plot(x, type="l", lwd = 5, ylim = c(0,1.2))
lines(abs(xu), col="red")
title('Original (black) & reconstructed\n from uniform undersampling (red)')

Xr <- rep(0,T)
r_ix <- sample(T,T/4)
Xr[r_ix] <- X[r_ix]
xr <- fft(Xr, inverse = TRUE)*4/T

plot(x, type="l", lwd = 5, ylim = c(0,1.2))
lines(abs(xr), col="red")
#lines(Re(xr), col="blue")
#lines(Im(xr), col="green")
title('Original (black) & reconstructed\n from non-uniform undersampling (red)')

#soft thresh function

softThresh <- function(vals_to_threshold, lambda)
{
  ix <- which(abs(vals_to_threshold) < lambda)
  vals_to_threshold[ix] <- rep(0, length(ix))

  ix <- which(vals_to_threshold >= lambda)
  vals_to_threshold[ix] <- vals_to_threshold[ix] - lambda

  ix <- which(vals_to_threshold <= -lambda)
  vals_to_threshold[ix] <- vals_to_threshold[ix] + lambda

  return(vals_to_threshold)
}

# POCS
lambda <- 0.1
Xhat <- Xr
for (iteration in seq(1,100))
{
  # 1. Compute the inverse FT to get estimate
  xhat <- Re(fft(Xhat, inverse = TRUE)/T)
  # 2. Apply Softrhesh in the time domain
  xhat <- softThresh(xhat, lambda)
  # 3. Find the FFT
  Xhat <- fft(xhat)
  # 4. Enforce known values
  Xhat[r_ix] <- X[r_ix]
}

plot(x, type="l", lwd = 5, ylim = c(0,1.2))
lines(xhat, col="red")
title('Reconstructed using POCS')