2017-03-04 106 views
6

使用MATLAB我將Matching Pursuit應用於近似信號。我的問題是,我很難想象所選原子的時頻表示。我正在嘗試製作類似於以下圖像的Wigner圖(source)。匹配追蹤原子的MATLAB Wigner圖

enter image description here

我都看着小波工具箱,信號處理工具箱以及開源的時頻工具箱,但我可能只是使用了錯誤的參數,因爲我與信號處理經驗是相當有限。

使用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原子得到斑點與形狀類似拉伸高斯。不幸的是,在Signal Processing Toolbox的預定義字典中沒有Gabor函數。然而,this question幫我實現所需的字典,這樣,我得到原子看起來頗爲相似,例如:

tf-representation of selected of atoms

由於我的情節接近,但還不完善,還存在兩個問題打開:

  • 我們在第一個例子中看到的所有斑點都可以單獨由Gabor原子建模,還是我需要另一個函數字典?
  • 我該如何將獨立的imagesc圖組合成一個可視化圖?
+0

也許你可以使用圖像的標題來編寫自己的可視化代碼,而不是使用'tfrwv'。 「熱圖中的每個像素(頂部)代表一個原子(根據水平位置以時間爲中心並且頻率與高度相對應的小波)。像素的顏色給出對應的小波原子與信號的內積(底部)。」你已經有了你的原子,所以現在你只需要拿出內部產品。 – Cecilia

+0

感謝您的評論。繪製原子不是我認爲的主要問題。請參閱我目前狀態的更新。 – imant

回答

3

要回答你的第二個問題「我怎樣才能結合indidividual於imagesc地塊成一個單一的可視化?

如果您有多個要疊加並使用imagesc進行顯示的2d矩陣,我建議採用元素最大值。

例如,我生成兩個具有不同均值和方差的高斯分佈的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); 

Two subplots with a gaussian distribution in each

或者,我可以將每個元素最多兩個網格的繪製。

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

The per element maximum of the two gaussian distributions

您也可以嘗試用元素方面的手段,資金等,但根據你給的例子,我覺得最大會給你最乾淨的期待結果。不同的功能

可能的利弊:

  1. 最大將工作最好的,如果你的原子總是零值的背景和沒有負值。如果背景爲零值,但原子也包含負值,則負值可能被其他原子的背景掩蓋。如果你的原子的重疊,更高的值當然會占主導地位。
  2. 意味着你的峯值會變得更低,但是在原子之間有重疊的地方可能更直觀。
  3. 總和會使重疊的區域更大。
  4. 如果您有非零背景,您也可以嘗試使用邏輯索引。你必須做出一些關於在重疊區域做什麼的決定,但是它可以很容易地濾除背景。
+0

謝謝你,如果我設置了將負值映射到零的顏色限制,元素明智的最大值工作得很好。你有沒有想法,我可以如何防止在我的更新的左上角和右下角顯示的情節的邊界上「擠壓」顯示原子? – imant

+0

對不起,我對gabor原子不夠了解,不能提供關於「擠壓」原子的建議。我認爲對於某些* a *,* b *,* g *參數值,[gabor函數](https://en.wikipedia.org/wiki/Gabor_atom)只是簡單地顯示了這種行爲。 – Cecilia

+0

既然你幫助我在Matlab中的可視化顯着,我接受你的答案,這與我的問題的更新,幾乎完全解決了我的問題。再次感謝。 – imant

-2

問:如何將獨立圖像c圖組合成單個可視化圖? A.使用子圖繪製多個圖,在圖中查找下面的樣本和2乘以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') 
+0

如果仔細觀察,您會注意到我已經做到了。相反,我想在一個圖中顯示所有原子,如第一個示例中所示。 – imant

+0

你可以使用'hold on',然後在單個圖中繪製所有四個圖。 '堅持'會保持前面的情節。一旦所有被繪製使用'holdoff'。雙正弦波的例子[這裏](https://in.mathworks.com/help/matlab/ref/hold.html?requestedDomain=www.mathworks.com) – SACn

+1

不幸的是,我想這不是那麼容易與imagesc情節。 – imant