ランダムサンプリングと均一サンプリング


7

、この論文一様サンプリングよりも優れた性能を示すことができるランダムにサンプリング:ラスティグの、彼は直感的表示されます何かについて話します。これらのスライドの 15ページ目からこれを理解しようとしましたが、本当に何も理解できません。

周波数係数のランダム置換を行うと、信号の類似性の点でより良い再構成が得られるのはなぜですか?なぜこれはより良い再構成をもたらすのですか、そしてこの現象の背後にある直感は何ですか?


2
この分野のエキスパートではありませんが、CSに基づく手法であれば、データマトリックスがスパースである限り、均一なサンプリングよりも少ないサンプルで再構成を実現できます。CSで必要なサンプルが少ないため、特定のサンプリングレートで両方のシステムを比較する場合、追加のサンプルを使用してパフォーマンスをさらに向上させることができます。
vaz

CSによる@vaz圧縮センシング(en.wikipedia.org/wiki/Compressed_sensing)を意味すると思います
Olli Niemitalo

@OlliNiemitaloはい、ごめんなさい。質問で引用された論文は、圧縮センシングに関するものです。
vaz

回答:


3

重要なアイデアは、ランダムサンプリングアプローチは、均一サンプリングアプローチよりも、結果の信号に多くの制約を課すことです。

ランダムにサンプリングされた信号の再構成に使用される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')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.