2016-03-21 53 views
2

Matlabで信号の2Dスペクトログラムをプロットする必要があります。私は印刷された割り当てのためにそれが必要なので、3D画像は理にかなっていません。しかし、信号がSpectrogramを使用してプロットされると、信号の3Dプロットが自動的に生成されます。Matlabで2Dスペクトログラムを作成

マイコード:

2D Plot

しかし、それは上から見ていると、グラフが実際にこれを見せている:

を次のようになり、グラフを生成

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なぜ私は具体的に2Dにする必要があるのですか(そしてなぜスクリーンショットで解決しないのですか)は、Matlab2tikzを使ってMatlabの図をLaTexのTikzの図に変換しているからです。 3D画像では+ 100Mbの数値が得られ、2Dでは<Mbのサイズに縮小されます。

+1

例えば、関数の出力を直接2Dプロットをしない理由S =スペクトログラム()。次に、Sを使ってプロットを作成します。 – willpower2727

+0

可能性があります。私は 'スペクトログラム '関数の出力をどのように扱うかを理解できません。軸は正しい場所の近くではなく、プロットされたときには何らかの奇妙なプロットを示します。 –

答えて

1

私はあなたが使用しているのMatlabのバージョンを知っているが、2015aではありませんあなたは、3Dプロットでフィギュアのハンドルを取得し、2Dに画角を変更することができる必要があります:

view(0,90); 

私はまた、あなたがの出力から、独自の2Dプロットを作ることができる方法の例を持っていますスペクトログラム()も同様の方法で使用します。

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)') 

出力は次のようになります。何の高度情報が存在しないので、フィギュアのサイズは小さいかもしれないが、私はMatlab2tikzを持っていないので、私はそれをテストすることはできませんうまくいけば

enter image description here

0

1つの選択肢は、プロットされたものをキャプチャし、それを画像としてプロットすることです。あなたは

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

を行う場合は、あなたがたが、画像のように、前に見れます正確に何を得るでしょうgetframe

を使用してこれを行うことができます。

私はそれはあなたがあなたのデータを記述するは、TikZコードを持っているアイデアOSとして、ビットにMatlab2Tikzの目的に反しだと思うが...

+0

ええ、この質問の全体のポイントは、私が使用可能なTikz出力を得ることができる解決策を見つけることでした。 –

+1

@MikkelKroghSimonsen私のポイントは:あなたがプロットを2d(それを画像にするのと同じ)にすると、データが失われます。ですから、あなたはTIKzで3D版を持っているか、情報なしで2D版を作成しています。この答えは意志の答えと同じことをします。データは異なる値で保存されます。 TIKzの出力コードで数字を手作業で入力しない限り、これはうまくいくはずです –

0

あなたは次のことを試すことができます。

[~,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 

幸運

関連する問題