【问题标题】:MATLAB Wigner plot for Matching Pursuit atoms用于匹配 Pursuit 原子的 MATLAB Wigner 图
【发布时间】:2017-07-24 17:24:14
【问题描述】:

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

我查看了 Wavelet Toolbox、Signal Processing Toolbox 以及开源 Time-Frequency Toolbox,但我可能只是使用了错误的参数,因为我在信号处理方面的经验非常有限。

示例

使用this data 我的目标是从上面重现情节。

% 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

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

非常感谢您的帮助。

更新

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

由于我的情节接近但并不完美,还有两个问题悬而未决:

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

【问题讨论】:

  • 也许您可以使用图像的标题来编写自己的可视化代码,而不是使用tfrwv。 “热图中的每个像素(顶部)代表一个原子(根据水平位置以时间为中心且频率与高度对应的小波)。像素的颜色给出了相应小波原子与信号的内积(底部)。”你有你的原子,所以现在你只需要取内积。
  • 感谢您的评论。我认为绘制原子不是主要问题。请查看我当前状态的更新。

标签: matlab signal-processing time-frequency


【解决方案1】:

回答您的第二个问题'如何将单独的图像c 图组合成一个可视化?'

如果您有多个二维矩阵要叠加并使用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]);

我可以像你的例子那样用子图来绘制它们,

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

subplot(1,2,2);
title('Atom 2');
imagesc(F2);

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

figure;
title('Both Atoms');
imagesc(max(F1, F2));

您还可以尝试元素方式、总和等,但根据您提供的示例,我认为 maximum 会给您最清晰的结果。

不同功能的可能优缺点:

  1. 如果您的原子始终具有零值背景并且没有负值,则最大值将最有效。如果背景是零值,但原子也包含负值,则负值可能会被其他原子的背景所掩盖。如果您的原子重叠,则较高的值当然会占主导地位。
  2. 平均值会使您的峰不那么高,但在原子之间有重叠的地方可能会更直观。
  3. 求和将使重叠区域的值更大。
  4. 如果您有非零背景,您也可以尝试使用逻辑索引。您必须就在重叠区域中的操作做出一些决定,但这样可以很容易地过滤掉背景。

【讨论】:

  • 谢谢,如果我设置了将负值映射为零的颜色限制,则元素最大值会很好地工作。你知道如何防止在我的更新的左上角和右下角面板中看到的绘图边界处的原子“挤压”显示吗?
  • 很抱歉,我对 gabor 原子知之甚少,无法就“挤压”原子提供建议。我想对于 abg 参数的某些值,gabor function 只是显示了这种行为。
  • 由于您在 Matlab 中的可视化方面对我有很大帮助,我接受您的回答,连同我的问题的更新,几乎完全解决了我的问题。再次感谢。
  • 谢谢,抱歉,我无法为问题的实际匹配追求方面提供更多帮助。
【解决方案2】:

问。如何将单独的图像c 图组合成一个可视化?

A.使用 subplot 绘制多个图,在图中找到下面带有 2 x 2 个图的示例。更改代码中的方程式

x = linspace(-5,5);
y1 = sin(x);
subplot(2,2,1)
plot(x,y1)
title('First subplot')

y2 = sin(2*x);
subplot(2,2,2)
plot(x,y2)
title('Second subplot')

y3 = sin(4*x);
subplot(2,2,3)
plot(x,y3)
title('Third subplot')

y4 = sin(6*x);
subplot(2,2,4)
plot(x,y4)
title('Fourth subplot')

【讨论】:

  • 如果你仔细观察你会发现我已经这样做了。相反,我想在一个图中显示所有原子,如第一个示例所示。
  • 你可以使用hold on然后在一个图中绘制所有四个图。 hold on 将保留以前的情节。绘制完所有内容后,使用hold off。双正弦波示例here
  • 不幸的是,我想用 imagesc 绘图并不容易。
  • 对于图像使用可以使用 AND、OR、XOR 操作和绘图组合它们。或者使用原始 [RGB] 数组然后绘图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多