Lấy mẫu ngẫu nhiên so với lấy mẫu thống nhất


7

Trong bài báo này của Lustig, ông nói về một điều có vẻ không trực quan: lấy mẫu ngẫu nhiên có thể thể hiện hiệu suất tốt hơn so với lấy mẫu thống nhất. Tôi đã cố gắng để hiểu điều này bắt đầu từ trang 15 của các slide này , nhưng tôi thực sự không thể hiểu bất cứ điều gì.

Tại sao, nếu chúng ta có sự hoán vị ngẫu nhiên của các hệ số tần số, chúng ta có được tái cấu trúc tốt hơn về mặt tương tự tín hiệu không? Tại sao điều này cho phép tái thiết tốt hơn, và trực giác đằng sau hiện tượng này là gì?


2
Không phải là một chuyên gia trong lĩnh vực này, nhưng, nếu kỹ thuật dựa trên CS, thì việc tái cấu trúc có thể đạt được với ít mẫu hơn so với lấy mẫu thống nhất, miễn là ma trận dữ liệu thưa thớt. Nếu bạn so sánh cả hai hệ thống ở một tỷ lệ lấy mẫu nhất định, vì bạn cần ít mẫu hơn với CS, thì có thể sử dụng các mẫu bổ sung để tăng hiệu suất hơn nữa.
vaz

@vaz bởi CS Tôi đoán bạn có nghĩa là cảm biến nén ( en.wikipedia.org/wiki/Compression_sensing )
Olli Niemitalo

@OlliNiemitalo Vâng, xin lỗi. Bài báo được trích dẫn trong câu hỏi là về cảm biến nén.
vaz

Câu trả lời:


3

Ý tưởng chính là phương pháp lấy mẫu ngẫu nhiên thực thi nhiều ràng buộc hơn đối với tín hiệu kết quả so với phương pháp lấy mẫu thống nhất.

Thuật toán POCS (chiếu lên các bộ lồi) được sử dụng để tái tạo tín hiệu được lấy mẫu ngẫu nhiên là phần chính: nó thực thi:

  • Đó là tín hiệu phải từ phổ này.
  • Đó là tín hiệu có giá trị thực.
  • Những gì chúng ta biết về phổ của tín hiệu (các hệ số Fourier được lấy mẫu ngẫu nhiên).
  • Những gì chúng ta biết về hình thức miền thời gian của tín hiệu.

Phương pháp lấy mẫu thống nhất làm cho không có nỗ lực để thực thi các ràng buộc táo bạo .

Đây là một ví dụ cho thấy:

  • Trên cùng bên trái: Lấy mẫu và tái cấu trúc thống nhất chỉ sử dụng FFT.
  • Trên cùng bên phải: Lấy mẫu ngẫu nhiên và tái cấu trúc chỉ sử dụng FFT.
  • Dưới cùng bên trái: Tái thiết bằng POCS

Như bạn có thể thấy, ràng buộc cuối cùng đó thực sự cải thiện việc tái thiết một cách mạnh mẽ.

nhập mô tả hình ảnh ở đây


Mã R bên dưới

#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')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.