2012-11-13 19 views
8

matlabスペクトログラム関数は作成された図形をとにかくロックしますか?私は図の上に縦線を描きたいが、線の機能は何もしていないようだ。どのように私はMATLABスペクトログラムに線を描くことができますか?matlabスペクトログラムプロットの縦線を描く

clc; clear all; close all; 
[data, fs, nbits] = wavread(<INSERT WAVE FILE HERE>); 
% [data, fs, nbits] = wavread('white_0.05_6sec_aud.wav'); 


N_data=length(data); N_frame=128; N_half=N_frame/2; N_loop=N_data/(N_half); 
output=zeros(N_data,1); 
hz=0:(fs/2)/N_half:(fs/2)-(fs/2)/N_half; 

spectrogram(data, hanning(N_frame), N_half, N_frame, fs); 

x = [6500 6500]; 
y = [0 5.5]; 

H = gca; 

% set(gca, 'NextPlot', 'add'); 
% line(x, y); 

h = line([6500, 6500], [0, 5.5]); 
set(h, 'parent', handles.predicted_ax); 

% view(-90,90) 
% set(gca,'ydir','reverse') 
% 
% [y, x] = ginput(1) 


% view(-90, 180); 
+1

私たちがテストできるスペクトログラムを作成するコードがありますか? –

+0

私はspectrogram()関数を使用していますが、質問に自分のコードを追加しました。コメントや、必要に応じて線画機能のコメントを解除してください。彼らはここで何もしないようです。 – user13267

+0

私はこのコードを 'スペクトログラム'(奇妙なもの)に渡す余分なオプションを取り除き、実際のデータをランダムなノイズ(本当に奇妙なもの)で置き換えることで動作させることができます。 – Isaac

答えて

4

spectogramsurfを生成し、(0,90)からviewを設定します。 surfは(spectrogramデータに依存して)いくつかの値にzlimを設定し、明らかに、現在のプロットに行を追加するとzlimを変更しない(おそらくspectrogramは何とか軸をロックし、edit spectrogramで検索可能でなければなりません)。したがって、view(0,90)では、線は完全に消えます(プロットを回転させると、線がサーフェスの上に表示されます)。

は、解決するには、次の方法は、あなたが多くの spectrogram秒間、 spectrogramによって設定された軸の 上記範囲となり、 [0 0]z -coordinates、 を有するラインにラインのデフォルト値を追加します。

line

zl = zlim; 
axis([xlim ylim zl(1) max(0, zl(2))]) 
view(0,90) 

を発行すると、その行を表示させる必要があります。

また、私の場合、ラインがホバリングしていたサーフェスは、ラインのようにほとんどブルーだった。これは、線があることを明らかにするのには役立ちません:)私はそれを下に青/黄色/赤のコントラストの良い白にしましたsurf

+0

ありがとう!!!!!私はサーフとzlimのすべての詳細を理解していませんが、あなたのコードは、ラインを表示させる – user13267

+0

非常に奇妙な。ここに来る前に、plot3()を使ってz値が非常に高い行を作成しようとしましたが、うまくいきませんでしたが、これはトリックでした。 – neuronet