2012-11-13 11 views
8

Ha la funzione di spettrogramma MATLAB bloccare la figura creata in ogni caso? Voglio disegnare linee verticali sulla figura, ma la funzione di linea non sembra fare nulla. Come posso tracciare una linea su uno spettrogramma matlab?Disegnare linee verticali su MATLAB spettrogramma trama

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

Avete un codice che crea spettogrammi con cui possiamo testare? –

+0

Sto solo usando la funzione spectrogram(), tuttavia ho aggiunto il mio codice alla domanda. Si prega di commentare e decommentare le funzioni di disegno a tratteggio come necessario; non sembrano fare nulla qui – user13267

+0

Posso far funzionare questo codice eliminando le opzioni extra passate a 'spectrogram' (strano) e sostituendo anche i dati reali con rumore casuale (davvero strano). – Isaac

risposta

4

Il spectogram genera un surf e imposta la view a (0,90). I surf imposta il zlim per alcuni valori (in base ai dati spectrogram), ea quanto pare, l'aggiunta di una linea per la trama corrente non cambia il zlim (probabilmente perché spectrogram bloccati gli assi in qualche modo, dovrebbe essere trovabili in edit spectrogram). Pertanto, in view(0,90), la linea scompare completamente (ruotare il grafico, vedrai la linea apparire da qualche parte sopra la superficie).

Per risolvere: il modo in cui aggiungere una riga di default alla linea avendo z -coordinates di [0 0], che, per molti spectrogram s, sarà sopra la gamma degli assi fissati dal spectrogram.

emissione

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

dopo la line dovrebbe quindi far apparire la linea.

Inoltre: nel mio caso, la superficie su cui la linea era sospesa era prevalentemente blu, così come lo era la linea. Questo non aiuta a rendere evidente che c'è una linea :) L'ho resa bianca, che contrasta meglio con il blu/giallo/rosso surf qui sotto.

+0

Grazie mille !!!!! Non capisco tutti i dettagli su surf e zlim ma il tuo codice fa apparire la linea – user13267

+0

Molto strano. Prima di venire qui, ho provato a usare plot3() creando una riga con un valore z estremamente elevato e non ha funzionato, ma questo ha funzionato. Kudos e +1. – neuronet

Problemi correlati