用于匹配追踪原子的MATLAB Wigner图

ima*_*ant 6 matlab signal-processing time-frequency

使用MATLAB我应用Matching Pursuit来近似信号.我的问题是我很难想象所选原子的时频表示.我正在尝试生成类似于下图()的Wigner图.

在此输入图像描述

我已经研究过Wavelet工具箱,信号处理工具箱以及开源时频工具箱,但我可能只是使用了错误的参数,因为我的信号处理经验非常有限.

使用这些数据我的目标是重现上面的情节.

% fit the signal using MP
itermax = 50;
signal = load('signal.txt');
dict = wmpdictionary(length(signal));
[signal_fit, r, coeff, iopt, qual, X] = wmpalg('OMP', signal, dict, ...
                                               'itermax', itermax);

% wigner plot of the simulated signal
tfrwv(signal_fit)  % wigner-ville function from time-frequency toolbox

% wigner plot of each atom
atoms = full(dict(:, iopt))  % selected atoms
for i = 1:itermax
    tfrwv(atoms(:, i))
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,所得到的图都没有接近目标可视化.请注意,在我使用tfrwv标准参数的示例中,我使用它打开的GUI进行调整.

我非常感谢你的帮助.

更新

我想我现在已经明白,人们需要使用Gabor原子来获得类似于拉伸高斯的形状的斑点.不幸的是,信号处理工具箱的预定义词中没有Gabor函数.但是,这个问题帮助我实现了所需的字典,这样我得到的原子与示例非常相似:

所选原子的tf表示

由于我的情节接近但不完美,仍有两个问题:

  • 我们在第一个例子中看到的所有blob都可以单独用Gabor原子建模,还是需要另一个函数字典?
  • 如何将单个图像c图组合成一个可视化?

Cec*_*lia 3

回答你的第二个问题“如何将单独的图像图合并到单个可视化中?”

如果您想使用 叠加和显示多个二维矩阵imagesc,我建议采用逐元素最大值。

例如,我生成两个 31x31 网格,其中高斯函数具有不同的均值和方差。

function F = generate2dGauss(mu, Sigma)
    x1 = -3:.2:3; x2 = -3:.2:3;
    [X1,X2] = meshgrid(x1,x2);
    F = mvnpdf([X1(:) X2(:)],mu,Sigma);
    F = reshape(F,length(x2),length(x1));
end

F1 = generate2dGauss([1 1], [.25 .3; .3 1]);
F2 = generate2dGauss([-1 -1], [.1 .1; .1 1]);
Run Code Online (Sandbox Code Playgroud)

我可以用子图绘制它们,如您的示例所示,

figure; 
subplot(1,2,1);
title('Atom 1');
imagesc(F1);

subplot(1,2,2);
title('Atom 2');
imagesc(F2);
Run Code Online (Sandbox Code Playgroud)

两个子图,每个子图均服从高斯分布

或者我可以绘制两个网格的每个元素最大值。

figure;
title('Both Atoms');
imagesc(max(F1, F2));
Run Code Online (Sandbox Code Playgroud)

两个高斯分布的每个元素最大值

您还可以尝试按元素均值、求和等,但根据您给出的示例,我认为最大值将为您提供最清晰的结果。

不同功能可能的优缺点:

  1. 如果您的原子始终具有零值背景且没有负值,则“最大值”效果最佳。如果背景为零值,但原子也包含负值,则负值可能会被其他原子的背景覆盖。如果你的原子重叠,那么较高的值当然会占主导地位。
  2. 平均值会让你的峰不那么高,但在原子之间有重叠的地方可能会更直观。
  3. 总和将使重叠区域的值更大。
  4. 如果您的背景非零,您也可以尝试使用逻辑索引。您必须做出一些关于在重叠区域中做什么的决定,但这将使过滤背景变得容易。