⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsrplt.m

📁 trabajos en matlab para verificar son muy buenos
💻 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 + -