随机抽样与均匀抽样
信息处理
信号分析
采样
下采样
随机的
重建
2021-12-26 22:21:34
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')
其它你可能感兴趣的问题