2012-11-13 16 views
8

Czy funkcja spektrogramu matlab blokuje utworzoną figurę? Chcę narysować pionowe linie na figurze, ale funkcja liniowa najwyraźniej nic nie robi. Jak mogę narysować linię na spektrogramie matlab?Rysowanie linii pionowych na wykresie spektrogramów 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

Masz jakiś kod, który tworzy widma, z którymi możemy przetestować? –

+0

Używam tylko funkcji spectrogram(), jednak dodałem mój kod do pytania. Proszę skomentuj i odkomentuj funkcje rysowania linii w razie potrzeby; chyba nic tu nie robią. – user13267

+0

Mogę sprawić, żeby ten kod działał, pozbywając się dodatkowych opcji przekazywanych do 'spektrogramu '(dziwne), a także zastępując rzeczywiste dane przypadkowym szumem (naprawdę dziwnym). – Isaac

Odpowiedz

4

spectogram generuje surf i ustawia view do (0,90). W surf ustawia zlim do pewnych wartości (w zależności od danych spectrogram), a jak widać, dodanie odpowiedniego wiersza do bieżącego działki nie zmieniazlim (prawdopodobnie dlatego spectrogram zablokowana osie jakoś; powinny być findable w edit spectrogram). Dlatego w view(0,90) linia całkowicie znika (obracaj działkę, zobaczysz, że linia pojawia się gdzieś nad powierzchnią).

Aby rozwiązać: sposób dodasz domyślnych linii do linii mającej z -coordinates z [0 0], , które dla wielu spectrogram s, będzie powyżej zakres osi wyznaczonych przez spectrogram.

Wydawanie

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

po line powinien następnie dokonać pojawi się linia.

Ponadto: w moim przypadku powierzchnia, nad którą wisiała linia, była w większości niebieska, tak jak linia. To nie pomaga, aby było jasne, że jest linia :) Zrobiłem biały, który kontrastował lepiej z niebieskim/żółtym/czerwonym surf poniżej.

+0

Wielkie dzięki !!!!! Nie rozumiem wszystkich szczegółów na temat surfowania i złotówki, ale twój kod sprawia, że ​​linia wygląda na nieznajomą. – user13267

+0

Bardzo dziwne. Zanim tu przyszedłem, próbowałem użyć plot3(), tworząc linię o wartości z bardzo wysokiej i nie działało, ale to się udało. Kudos i +1. – neuronet

Powiązane problemy