📄 dtsimplt.m
字号:
function dtsimplt
% DTSIMPLT Support file for DTSYSGUI
% ADSP Toolbox: Version 2.0
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998
f = gcf;
ui = get(f,'userdata');
num_edt = ui(43);
den_edt = ui(45);
resp_type = ui(48);
ic_edt = ui(47);
top_axs = ui(29);
bot_axs = ui(32);
cust_edt = ui(63);
stat_bar = ui(61);
%%%%%%%%
if get(ui(15),'userdata')==1
set(f,'currentaxes',ui(29));
zoom out,zoom reset
set(f,'currentaxes',ui(32));
zoom out,zoom reset
end
%%%%%%%%%%
input_data = get(ui(8),'userdata');
line_han = get(bot_axs,'children');
p_range = input_data(1,:);
y_input = input_data(2,:);
tmn=min(p_range);tmx=max(p_range);
ymax=max(y_input);ymin=min(y_input);
set(top_axs,'xlim',[tmn,tmx]);
if ymax>ymin,set(top_axs,'ylim',[ymin,ymax]);end
ele_mat = get(ui(1),'userdata');
[r,c] = size(ele_mat);
symb=0;sum_vec=0;x_str=[];input_vec=[];
for k = 1:r,
ele_vec = ele_mat(k,:);
ele_str1 = num2str(ele_vec(1),2);
ele_str2 = num2str(ele_vec(2),2);
ele_str3 = num2str(ele_vec(3),2);
ele_str4 = num2str(ele_vec(4),2);
ele_str5 = num2str(ele_vec(5),2);
ele_str7 = num2str(ele_vec(7),2);
ele_str9 = num2str(ele_vec(9),2);
sum_vec=sum_vec+ele_vec(6);
if ele_vec(6) == 1, % general form
txt_str = genasig2(ele_vec(1:5),'n'); %%txt_str NOT used later
input_vec=[input_vec;ele_vec(1:5)];
elseif ele_vec(6) == 2, % Matlab array
txt_str = get(ele_vec(1),'userdata');
if txt_str(1)=='W',
txt_str(1)=[];txt_str=evalin('base',txt_str);
end
end
if ~isempty(x_str)
x_str = [x_str,'+(',txt_str,')'];
else
x_str = ['(',txt_str,')'];
end
end
if sum_vec==r,symb=1;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
% Verify Transfer Function
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
if length(B) > length(A), % Causality check
errordlg('Need Causal System (length(Num) <= length(Den).','Input Error');
return;
end
ic = eval(['[',get(ic_edt,'string'),']']);
if isempty(ic)
ic = zeros(1,length(A)-1);
end
if length(ic) ~= length(A)-1,
errordlg(['Initial condition length must be length(Den)-1'],'Input Error');
return;
end
%Need to plot based on value of ui(48)
%nic = flipud(filter(-A(2:length(A)),1,ic(:)))/A(1);
%nic = filter(-A(2:length(A)),1,ic(:))/A(1);
nic=flipud(filter(fliplr(-A),1,ic(:)))/A(1);
ty = get(resp_type,'value');
if ty == 1
y_output = filter(B,A,y_input,nic);
res_tit='Total Response';
elseif ty == 2 % Zero-Input
y_output = filter(B,A,0*y_input,nic);
res_tit='Zero-Input Response';
elseif ty == 3 % Zero-State
y_output = filter(B,A,y_input);
res_tit='Zero-State Response';
end
dtstem(line_han,p_range,y_output);
ymax1=max(y_output);ymin1=min(y_output);
set(bot_axs,'xlim',[tmn,tmx]);
if ymax1>ymin1,set(bot_axs,'ylim',[ymin1,ymax1]);end
tt=get(bot_axs,'title');
set(tt,'string',res_tit);
if symb==0
y_symb=[];set(stat_bar,'string',' ');
else
[ytot,yzs,yzi]=sysresp1('z',B,A,input_vec,ic);
if ty==1
y_symb=ytot;
elseif ty==2
y_symb=yzi;
elseif ty==3
y_symb=yzs;
end
if ~isempty(y_symb)
set(stat_bar,'string',[res_tit ' = ' y_symb]);
else
set(stat_bar,'string',[res_tit ' = 0']);
end
end
set(ui(66),'userdata',y_symb);
%SAVE??
set(ui(65),'userdata',y_output);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -