2016-03-21 22 views
2

Matlab'da bir sinyalin 2B spektrogramını çizmeye ihtiyacım var. Basılı bir ödev için buna ihtiyacım var, dolayısıyla 3D görüntü hiçbir anlam ifade etmiyor. Bununla birlikte, sinyal Spectrogram kullanılarak çizildiğinde, otomatik olarak sinyalin 3B grafiğini üretir.Matlab'da 2B Spektrogram Oluşturun

Benim Kod:

2D Plot

Ama üstten görülür ve grafik gerçekten bu gösteriyor:

şöyle bir grafik elde

Dataset  = 1;   % Dataset to be analysed 
N   = 1024;   % Window size 
Beta  = 12;   % Kaiser window beta value (small = narrow main lope) 
Overlap  = 800;   % Window overlap 
Threshold = -150;   % Minimum magnitude before threshold 

spectrogram(Enclosure{Dataset}(1:end),kaiser(N,Beta),Overlap,2048,fs,'MinThreshold',Threshold,'yaxis'); 

3D plot

T Özellikle neden 2D olması gerektiğine (ve neden ekran görüntüsüne yer vermediğime) inanıyorum çünkü Matlab rakamlarını LaTex'teki Tikz rakamlarına dönüştürmek için Matlab2tikz kullanıyorum. 3D görüntüleri ile +100 Mb rakamları elde ediyorum ve 2D boyutu < 1Mb'ye indirecek.

+1

neden fonksiyonu, ör çıkışları ile doğrudan 2B arsa yapmaz S = spektrogram(). Sonra arsa yapmak için S kullanın. – willpower2727

+0

Bu mümkün olabilir. Çıktının "spektrogram" fonksiyonundan nasıl halledileceğini anlayamıyorum. Eksen, doğru yerlerin yakınında değildir ve çizildiğinde, bazı garip arsalar gösterir. –

cevap

1

yendi düşünüyorum Ben de çıktılarından kendi 2D arsa hale nasıl bir örnek var

view(0,90); 

: Eğer 2D görünüm açısını 3D arsa ile rakama ele almak ve değiştirmek mümkün olmalıdır benzer bir yöntem kullanılarak spektrogram():

x = [0:0.01:100]; 
y = sin(5*x); 
y = awgn(y,0.1); 

[S,F,T,P] = spectrogram(y,200,0,length(y)*5,100); 

[m,n] = size(P); 

figure(2) 
surf(F,T,zeros(n,m),P','EdgeColor','none') 
view(0,90) 
xlabel('Frequency') 
ylabel('Time (s)') 

çıktı şuna benzer: yok irtifa bilgi yoktur

Umarım

enter image description here

beri figür boyutu daha küçük olabilir ama ben Matlab2tikz olmadığı için bunu test edemez.

0

Bir seçenek, çizilen her şeyi yakalamak ve ardından görüntü olarak çizim yapmaktır. Sen

F=getframe(gca); 
cla; 
imshow(F.cdata); 

Daha önce görmeye olacak tam olarak ne alırsınız yaparsak getframe

kullanarak bunu, ancak bir görüntü olarak yapabilirsiniz.

Ancak ben kullanmakta fakat 2015a içinde olan Matlab hangi sürümünü bilmiyorum sen TikZ kodunu verilerinizi açıklayan sahip Fikir os olarak biraz Matlab2Tikz amacı, ...

+0

Evet ve bu sorunun bütün amacı, kullanılabilir bir Tikz çıkışı elde edebileceğim bir çözüm bulmaktı. –

+1

@MikkelKroghSimonsen Benim amacım: Eğer arsa 2d yaparsanız (görüntüyü yapmakla aynı), verileri kaybedersiniz.Yani ya TIKz'da 3D sürümünüz var, ya da bilgi olmadan bir 2D versiyonu hazırlıyorsunuz. Bu cevap, iradenin cevabından aynı şeyi yapar, sadece veriler farklı değerlerle kaydedilir. TIKZ çıkış kodunda manuel olarak sayılarla uğraşmayacaksanız, bu işe yarayacaktır. –

0

Aşağıdaki deneyebilirsiniz:

[~,F,T,ps]=spectrogram(Enclosure{Dataset}(1:end),kaiser(N,Beta),Overlap,2048,fs,'MinThreshold',Threshold,'yaxis'). 
% Output the spectrum in ps 

imagesc(T,F,10*log10(ps)) 
% Generate a 2d image 

view(270,90) 
xlabel('Time [s]') 
ylabel('Frequency [Hz]') 
c=colorbar; 
c.Label.String='Power [dB]'; 
% Extra setting to make the plot look like the spectrogram 

İyi şanslar