?? fsrplt.m
字號:
function fsrplt
% FSRPLT Plot control for FSRGUI.
f = gcf;
ui = get(f,'userdata');
type_pop = ui(4);
num_edt = ui(18);
den_edt = ui(26);
n_edt = ui(6);
duty_edt = ui(9);
delay_edt = ui(34);
exp_edt = ui(38);
width_edt = ui(36);
cycles_edt = ui(40);
per_edt = ui(51);
autoplot = ui(21);
plot_btn = ui(22);
axs = ui(23);
axs2 = ui(45);
line1 = ui(24);
line2 = ui(25);
line3 = ui(46);
%%%%%%%%%
if get(ui(15),'userdata')==1
set(f,'currentaxes',ui(23));
zoom out,zoom reset
set(f,'currentaxes',ui(45));
zoom out,zoom reset
end
%%%%%%%%
% Verify Transfer Function
hn_st = get(num_edt,'string');
if isempty(hn_st)
errordlg('Nothing entered.','Input Error');
return
end
problem=0;if hn_st(1)=='W',
hn_st(1)=[];evalin('base',[hn_st ';'],'problem=1;')
if problem==0, B=evalin('base',hn_st);
if isstr(B), B=eval(['[',B,']'],'[]');end
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
else
B = eval(['[',hn_st,']'],'[]');
end
if isempty(B)
errordlg('MATLAB Syntax error.','Input Error');
return
end
hd_st = get(den_edt,'string');
if isempty(hd_st)
errordlg('Nothing entered.','Input Error');
return
end
problem=0;if hd_st(1)=='W',
hd_st(1)=[];evalin('base',[hd_st ';'],'problem=1;')
if problem==0, A=evalin('base',hd_st);
if isstr(A), A=eval(['[',A,']'],'[]');end
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
else
A = eval(['[',hd_st,']'],'[]');
end
if isempty(A)
errordlg('MATLAB Syntax error.','Input Error');
return
end
if ~any(A) | ~any(B) % String of zeros
errordlg('Num and Den must have nonzero elements.','Input Error');
return;
end
while A(1) == 0
A(1) = [];
end
while B(1) == 0
B(1) = [];
end
signal_type = get(type_pop,'value');
if isempty(get(n_edt,'string')),
errordlg('No value entered for # of harmonics.','Input Error');
return
end
if isempty(get(per_edt,'string')),
errordlg('No value entered for time period.','Input Error');
return
end
if isempty(get(duty_edt,'string')),
errordlg('No value entered for duty ratio.','Input Error');
return
end
if signal_type == 4 & isempty(get(width_edt,'string')),
errordlg('No value entered for flat width.','Input Error');
return
end
if signal_type == 5 & isempty(get(cycles_edt,'string'))
errordlg('No value entered for # of cycles.','Input Error');
return
end
if signal_type == 6 & isempty(get(exp_edt,'string')),
errordlg('No value entered for exponent.','Input Error');
return
end
if isempty(get(delay_edt,'string')),
TD = 0;
else
TD = str2num(get(delay_edt,'string'));
end
T = str2num(get(per_edt,'string'));
n = str2num(get(n_edt,'string'));
D = str2num(get(duty_edt,'string'));
TD = str2num(get(delay_edt,'string'));
E = str2num(get(exp_edt,'string'));
W = str2num(get(width_edt,'string'));
C = str2num(get(cycles_edt,'string'));
%%%% NORMALIZE %%%%%%%%%%%
D=D/T;
E=E*T;
W=W/T;
td=TD/T;
td=rem(td,1);
td=rem(1+td,1); % makes sure it is positive
%%%%%%%%%%%%%%%%%%%%%%%%%%
% verify lengths
if T<=0
errordlg('Time period must be positive.','Input Error');
return;
end
if signal_type == 1 & (D >=1 | D <=0),
errordlg('Pulse width must be between 0 and T.','Input Error');
return;
end
if D >1 | D <= 0,
errordlg('Pulse width must be between 0 and T.','Input Error');
return;
end
if n ~= round(n) | n<0,
errordlg('Must enter a positive integer for N.','Input Error');
return;
end
if signal_type == 4
if W < 0
errordlg('Flat Width cannot be negative.','Input Error');
return;
elseif W >= D,
errordlg('Flat Width must be less than pulse width.','Input Error');
return;
end
end
if signal_type == 5
if C <= 0
errordlg('Number of cycles must be positive.','Input Error');
return;
end
end
%Set up XK
Ds=num2str(D);tds=num2str(td);
Ws=num2str(W);Cs=num2str(C);Es=num2str(E);
if signal_type==1,
conv=1;
set(ui(42),'string','1/k');
X0=D;XK='D*sinc(k*D)';
x='urect(t/D)';
XKs=[Ds '*sinc(k*' Ds ')'];
elseif signal_type==2,
conv=1;
set(ui(42),'string','1/k');
X0=0.5*D;XK='(sinc(k*D).*exp(-j*pi*k*D)-exp(-j*2*pi*k*D))./(j*2*pi*k)';
XKs=['(sinc(k*' Ds ').*exp(-j*pi*k*' Ds ')-exp(-j*2*pi*k*' Ds];
XKs=[XKs '))./(j*2*pi*k)'];
if D<1,
x='0.5*(t==D)+t.*(t>=0 & t<D)/D';
else,x='t';
end
elseif signal_type==3,
conv=2;
set(ui(42),'string','1/(k^2)');
X0=0.5*D;XK='0.5*D*sinc(0.5*k*D).*sinc(0.5*k*D)';
XKs=['0.5*' Ds '*sinc(0.5*k*' Ds ').*sinc(0.5*k*' Ds ')'];
x='tri(2*t/D)';
elseif signal_type==4,
conv=2;
set(ui(42),'string','1/(k^2)');
X0=0.5*(D+W);A=D/(D-W);As=num2str(A);
XK='0.5*A*D*sinc(k*D/2).*sinc(k*D/2)-0.5*(A-1)*W*sinc(k*W/2).*sinc(k*W/2)';
XKs=['0.5*' As '*' Ds '*sinc(k*' Ds '/2).*sinc(k*' Ds '/2)-0.5*(' As];
XKs=[XKs '-1)*' Ws '*sinc(k*' Ws '/2).*sinc(k*' Ws '/2)'];
t1=0.5*(D-W);
t2=t1+W;
x='A*tri(2*t/D)-(A-1)*tri(2*t/W)';
elseif signal_type==5, %%% DO as half-cycle cosine pulse
if rem((C+0.5),1)==0,
conv=2;set(ui(42),'string','1/(k^2)');
else
conv=1;set(ui(42),'string','1/k');
end
X0=D*sinc(C);
XK='0.5*D*sinc(k*D-C)+0.5*D*sinc(k*D+C)';
XKs=['0.5*' Ds '*sinc(' Ds '*k-' Cs ')+0.5*' Ds '*sinc(' Ds '*k+' Cs ')'];
if D<1,
x='cos(2*pi*t*C/D).*(t>=-D/2 & t<=D/2)';
else,
x='cos(2*pi*t*C/D)';
end
elseif signal_type==6,
conv=1;set(ui(42),'string','1/k');
X0=(exp(E*D)-1)/E;XK='(exp(E*D-j*2*pi*k*D)-1)./(E-j*2*pi*k)';
EDs=num2str(E*D);XKs=['(exp(' EDs '-j*2*pi*k*' Ds ')-1)./(' Es '-j*2*pi*k)'];
if D<1,
x='0.5*exp(D*E)*(t==D)+exp(E*t).*(t>=0 & t<D)';
else,
x='exp(E*t)';
end
end
if td~=0, XKs=['(' XKs ').*exp(-j*2*pi*k*' tds ')'];end
conv = conv+length(A)-length(B);
if conv == 1
set(ui(44),'string','1/k');
else
set(ui(44),'string',['1/(k^' int2str(conv) ')']);
end
% Compute FS Coeffs
del=500;
t=0:1/del:1;
if any(signal_type==[1,3:5]),t=t-0.5;end
y=eval(x);
y(1)=0.5*(y(1)+y(length(y)));
ny=length(y)-1;
j=sqrt(-1);c0=X0;
k=1:n;xk=eval(XK).*exp(-j*2*pi*k*td);
ck=2*abs(xk);tk=angle(xk)*180/pi;
i=find(180-abs(tk)<10000*eps);tk(i)=-180*ones(size(i));
axs_han=get(ui(7),'userdata');
m_title = get(axs_han,'title');
nbr = int2str(n);
la=length(A);
lb=length(B);
tr=0:1/500:1;
if any(signal_type==[1,3:5]),tr=tr-0.5;end
yr=c0+0*tr;
yw=c0*B(lb)/A(la)+0*tr; %dc output
%if td == 0
%t_data = t; y_data = y;
%else
%t_data = [t+td-1 t+td]; y_data = [y y];
%end
t_data=[t t];
y_data=[y y];
if any(signal_type==[1,3:5])
i=find(t_data>=0.5-td-100*eps);ki=i(1);
else
i=find(t_data>=1-td-100*eps);ki=i(1);
end
t=t_data(1:501);
y=y_data(ki:500+ki);
t_data=t;
y_data=y;
XL=[0 T];if any(signal_type==[1,3:5]),XL=XL-0.5*T;end
for k=1:n,
sm=ck(k)*cos(2*k*pi*tr+tk(k)*pi/180);
h=polyval(B,j*k*2*pi/T)/polyval(A,j*k*2*pi/T);
sm1=abs(h)*ck(k)*cos(2*k*pi*tr+angle(h)+tk(k)*pi/180);
yr=yr+sm;
yw=yw+sm1;
end
set(ui(11),'userdata',[y(:) yr(:) yw(:) tr(:)*T]);
%Set Limits
cutoff=0;
if cutoff==0
yrmax=max([y_data yr]);yrmin=min([y_data yr]);
if yrmin~=0
yrmin=yrmin-0.05*yrmax;
end
yrmax=1.05*yrmax;
set(axs,'xlim',XL,'ylim',[yrmin,yrmax]);
else
set(axs,'xlim',XL);
end
set(line1,'xdata',t_data*T,'ydata',y_data);
set(line2,'xdata',tr*T,'ydata',yr);
op_tit = ['Input(y) and Reconstructed Input(g) to k = ' nbr];
set(m_title,'string',op_tit);
if cutoff==0
ywmax=max(yw);ywmin=min(yw);
if ywmin~=0,
ywmin=ywmin-0.05*ywmax;
end
ywmax=1.05*ywmax;
set(axs2,'xlim',XL,'ylim',[ywmin,ywmax]);
else
set(axs2,'xlim',XL);
end
set(line3,'xdata',tr*T,'ydata',yw);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -