首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配追踪原子的MATLAB Wigner图

匹配追踪原子的MATLAB Wigner图
EN

Stack Overflow用户
提问于 2017-03-04 16:46:23
回答 2查看 754关注 0票数 6

利用MATLAB对信号进行匹配寻踪逼近。我的问题是,我难以想象所选原子的时频表示。我正在尝试生成一个类似于下面的图像(来源)的Wigner图。

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

示例

使用这些数据,我的目标是从上面再现这个情节。

代码语言:javascript
复制
% 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原子来获得形状类似于拉长的高斯的气泡。不幸的是,信号处理工具箱的预定义的dicts中没有Gabor函数。然而,这个问题帮助我实现了所需的字典,因此我得到了看起来与示例非常相似的原子:

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

  • 我们在第一个例子中看到的所有小块都能单独用Gabor原子建模吗?还是我需要另一个函数字典?
  • 我如何将独立的图像合并成一个可视化的图形?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-09 17:21:48

要回答你的第二个问题,‘我如何将独立的图像合并成一个可视化的图形?’

如果你有多个2d矩阵,你想要叠加和显示使用imagesc,我建议采取元素的最大值。

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

代码语言:javascript
复制
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]);

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

代码语言:javascript
复制
figure; 
subplot(1,2,1);
title('Atom 1');
imagesc(F1);

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

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

代码语言:javascript
复制
figure;
title('Both Atoms');
imagesc(max(F1, F2));

你也可以尝试元素的方法,和,等等,但是根据你给出的例子,我认为最大值会给你最干净的结果。

不同职能的可能利弊:

  1. 如果你的原子总是有零值的背景而没有负值的话,最大值将是最好的。如果背景值为零,但原子也包含负值,则负值可能被其他原子的背景所掩盖。如果你的原子重叠,更高的值当然会占主导地位。
  2. 平均会使你的峰值不那么高,但在原子之间有重叠的情况下,可能会更直观。
  3. 和将使重叠区域更大的价值。
  4. 如果你有非零背景,你也可以尝试使用逻辑索引.你必须在重叠的区域做一些决定,但这会让你很容易过滤掉背景。
票数 3
EN

Stack Overflow用户

发布于 2017-03-08 09:58:44

问:我怎样才能把独立的图像组合成一个单一的可视化?

使用子图绘制多幅图,在图中以2×2的方式找到下面的样本。用代码修改你的方程

代码语言:javascript
复制
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')
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42598558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档