压缩感知 - 频率稀疏示例

信息处理 压缩传感
2022-02-08 03:56:26

我正在学习压缩感知。我有一个关于可以在线找到的常见 MATLAB“频率稀疏”示例的问题,例如此处此处

在这些示例中让我感到困惑的是,它们不是直接从时间信号中获取时间样本的子集,而是通过对信号的频谱进行逆变换。它是否正确?这是否已经涉及知道信号的频谱?我认为目标是从时间样本的子集重建时间信号,而不知道频谱的确切形状。还是我错过了什么?

2个回答

我想我理解你的困惑。在你的第一个例子中,采取

y = x(q)

例如。

您在此处看到的方法的一种可能解释是,此类示例的作者希望确保他们获得生成示例以与之比较的精确稀疏解决方案。因此,他们直接从中生成测量值。它本身并不是数学意义上的“作弊”,但可以说它并不能反映在时域中进行测量的实际情况。

在时域中进行测量时可能发生的情况是,如果您生成具有任意频率的正弦曲线,当频率与字典的频率不匹配时,信号在频域中的稀疏度会降低。例如,如果您生成一个 1.5 Hz 的正弦曲线,并且您的 DFT 的原子对应于 1 Hz、2 Hz、3 Hz 等频率,那么您的信号在本字典中将不是 1-sparse,但必须在相邻频率以形成 1.5 Hz 的正弦曲线。避免这种情况的一种简单方法是直接在频域中生成规定稀疏度的信号,然后将其转换为时域作为测量的一部分。

从技术上讲,它不涉及已经知道信号的频谱,因为X在重构中不知道,并且在乘法中丢失了经典采样理论意义上的足够频率信息

y = A*X

因为A是一个宽矩阵。

我想我已经解决了这个问题。这些例子实际上写得不是很好。下面我修改了这个版本的例子,以适应Candes 和 Waking论文的符号。我现在正在努力将它扩展到我们也有一个传感基础 phi 的情况(除了身份之外,如下例所示)。

%% Parameters
% Initialize constants and variables
N = 256; % length of signal (must be even in this example)
M = 64;  % size of the subset
S = 2;   % sparsity in the frequency domain


%% Generate signal with S randomly spread sinusoids
% Note that a real-valued sinusoid has two peaks in the frequency domain
freq = randperm(N/2)-1;
freq = freq(1:S).';
n = 0:N-1;
y = sum(sin(2*pi*freq/N*n).', 2);


%% Fourier representation of the signal
fft1 = fft(eye(N));
x = fft1*y;


%% Perform compressed sensing
% M measurements obtained randomly
subset = randperm(N);
subset = subset(1:M);
y_subset = y(subset); % subset of observed sensed values

% Base for representing the signal. This is the inverse of the Fourier
% transform FFT1, which can be computed as the conjugate of FFT normalized
% by N.
psi = conj(fft1)/N;

% Reconstructed Fourier representation
x_hat = l1eq_pd(randn(N,1), psi(subset,:), [], y_subset, 1e-5);

% Reconstructed signal
y_hat = real(psi*x_hat);