Plot graph in GUI. Why i can plot a script, but i can't plot a function?

1 回表示 (過去 30 日間)
Jessie Bessel
Jessie Bessel 2018 年 3 月 24 日
I want to plot a graph in GUI. when i simply put all code in the button function it works, the code is next one:
% --- Executes on button press in spectrograma.
function spectrograma_Callback(hObject, eventdata, handles)
% hObject handle to spectrograma (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=get(handles.semnal_ideal,'Value');
if a==1
v=340; %m/s
D=2*sqrt(3);
T=D/v;
fe=100e3;
t=0:1/fe:T;
N=length(t);
a=5; b=10; %cm
x=50; y=0; z=0;
x1= a; y1=0; z1=0; %mic1
x2=0; y2=-b; z2=0; %mic2
x3= 0; y3=b; z3=0; %mic3
x4= 0; y4=0; z4=0; %mic4
S=[x y z];
mic1=[x1 y1 z1];
mic2=[x2 y2 z2];
mic3=[x3 y3 z3];
mic4=[x4 y4 z4];
R1=sqrt( (x-x1)*(x-x1) + (y-y1)*(y-y1) + (z-z1)*(z-z1) );
R2=sqrt( (x-x2)*(x-x2) + (y-y2)*(y-y2) + (z-z2)*(z-z2) );
R3=sqrt( (x-x3)*(x-x3) + (y-y3)*(y-y3) + (z-z3)*(z-z3) );
R4=sqrt( (x-x4)*(x-x4) + (y-y4)*(y-y4) + (z-z4)*(z-z4) );
T1=R1/v; T2=R2/v; T3=R3/v; T4=R4/v;
N1=round(T1*1e-2*fe);
N2=round(T2*1e-2*fe);
N3=round(T3*1e-2*fe);
N4=round(T4*1e-2*fe);
X=[x,x1,x2,x3,x4];
Y=[y,y1,y2,y3,y4];
Z=[z,z1,z2,z3,z4];
at=1000;
f0=5e3;
s =exp(-at*t).*sin(2*pi*f0*t);
s1=[zeros(1,N1),s(1:N-N1)];
s2=[zeros(1,N2),s(1:N-N2)];
s3=[zeros(1,N3),s(1:N-N3)];
s4=[zeros(1,N4),s(1:N-N4)];
windows_size=32;
overlap=30;
nfft=256;
prag=0.9;
%spectrograma primul semnal cu zgomot
S10=spectrogram(s1,windows_size,overlap,nfft,100e3,'yaxis');
suma_coloane_S10=sum(abs(S10));
poz1=find(suma_coloane_S10>=prag*max(suma_coloane_S10),1,'first');
Nsos1=round(length(s1)*poz1/size(S10,2));
Tsos1=Nsos1/fe*1000;
%spectrograma al doilea semnal cu zgomot
S20=spectrogram(s2,windows_size,overlap,nfft,100e3,'yaxis');
suma_coloane_S20=sum(abs(S20));
poz2=find(suma_coloane_S20>=prag*max(suma_coloane_S20),1,'first');
Nsos2=round(length(s2)*poz2/size(S20,2));
Tsos2=Nsos2/fe*1000;
%spectrograma al treilea semnal cu zgomot
S30=spectrogram(s3,windows_size,overlap,nfft,100e3,'yaxis');
suma_coloane_S30=sum(abs(S30));
poz3=find(suma_coloane_S30>=prag*max(suma_coloane_S30),1,'first');
Nsos3=round(length(s3)*poz3/size(S30,2));
Tsos3=Nsos3/fe*1000;
%spectrograma al patrulea semnal cu zgomot
S40=spectrogram(s4,windows_size,overlap,nfft,100e3,'yaxis');
suma_coloane_S40=sum(abs(S40));
poz4=find(suma_coloane_S40>=prag*max(suma_coloane_S40),1,'first');
Nsos4=round(length(s4)*poz4/size(S40,2));
Tsos4=Nsos4/fe*1000;
Rez1=v*(Tsos1-Tsos2)/10;
Rez2=v*(Tsos2-Tsos3)/10;
Rez3=v*(Tsos3-Tsos4)/10;
F=@(q)[sqrt((q(1)-5)^2 + q(2)^2 + q(3)^2 )-sqrt( q(1)^2 + (q(2)+10)^2 + q(3)^2)-Rez1;
sqrt(q(1)^2 + (q(2)+10)^2 + q(3)^2 )-sqrt( q(1)^2 + (q(2)-10)^2 + q(3)^2)-Rez2;
sqrt( q(1)^2 + (q(2)-10)^2 + q(3)^2 )-sqrt( q(1)^2 + q(2)^2 + q(3)^2)-Rez3];
q00=100*Nsos1/fe*v;
q0=[q00,0,0];
options = optimset('maxfunevals',2000,'tolfun',1e-1);
[q,~,output]=fsolve(F,q0,options)
axes(handles.axes5)
plot3(q(1),q(2),q(3),'r*');
grid on
end
But when i replace the code with a function because i dont't want all the code there, the button doesn't work and i have a error
% --- Executes on button press in spectrograma.
function spectrograma_Callback(hObject, eventdata, handles)
% hObject handle to spectrograma (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=get(handles.semnal_ideal,'Value');
if a==1
q=spectrograma_semnal_ideal(0.9)
axes(handles.axes5)
plot3(q(1),q(2),q(3),'r*');
grid on
end
And the error is:
Error using axes
Invalid object handle
Error in
interfata_grafica>spectrograma_Callback
(line 250)
axes(handles.axes5)
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in interfata_grafica (line 42)
gui_mainfcn(gui_State,
varargin{:});
Error in
@(hObject,eventdata)interfata_grafica('spectrograma_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
So they tell me error is in " axes(handles.axes5). Why when i put the a script works, but when i put a function it doesn't work?

回答 (0 件)

カテゴリ

Help Center および File ExchangeLine Plots についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by