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

📄 mytext1.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
📖 第 1 页 / 共 3 页
字号:
   %end
   %bz = real(bz);  
   %az = real(az);
  %end
  %if a1~=0
  %  az = az*a1;
  %end
  %text(0.01,0.7,num2str(bz'),'fontsize',10);
  %text(0.31,0.7,num2str(az'),'fontsize',10);
  bz(find(abs(bz)<1e-6))=0;
  bz=real(bz);
  az(find(abs(az)<1e-6))=0;
  numZStr=LocalPolyStr(length(bz)-1,bz,'z',length(bz)-1);
  denZStr=LocalPolyStr(length(az)-1,az,'z',length(az)-1);
  %text(0.01,0.7,numZStr,'fontsize',10);
  %text(0.01,0.5,denZStr,'fontsize',10);
  sepStr(1:(N+1)*16)='-';
  sepStr=char(sepStr);
  text(0.01,0.7,'H(z)=','fontsize',11);
  text([0.01,0.01,0.01],[0.5,0.4,0.3],{numZStr,sepStr,denZStr},'fontsize',10);
  clear ind doi slideData
  clear r p Fsa tn mm1 tt ee hh numZStr denZStr sepStr
  save yhzfd
  %yhzfd: pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm az bz
case doi+26
  load yhzfd
  %yhzfd: pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm az bz
  % or   fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP) bz az (if from BLT)
  n=50;
  [h,t]=impz(bz,az,n);
  %yhzstem(t,h);
  [w,f]=freqz(bz,az,512);
  Xlim1=[1,n];
  XTick1=[1,11,21,31,41];
  XTickLabel1={'0','10','20','30','40'};
  Wsnor=(Wn/fsa)/pi;
  LocalResult(h,Xlim1,XTick1,XTickLabel1,w,f,Wsnor,n);
  % prepare the data for yhzfdview which are saved in yhzfd.mat
  label=get(gcf,'name');
  %jj=1;
  % while ~get(slideData.BtnHandles(doi+21,jj),'value')
  %     jj=jj+1;
  %end
  %if jj==1
  %   transTypeS='双线性变换法';
  %else 
  %   transTypeS='脉冲响应不变法';
  %end
  if length(fp)>1
     paraS=['fpass=',num2str(fp),'(Hz)'];%,',Fsa=',num2str(fsa),'(Hz)'];
  else
     paraS=['fpass=',num2str(fp),',fstop=',num2str(fs),'(Hz)']; %,',Fsa=',num2str(fsa),'(Hz)'];
  end   
  paraLabel={['模拟低通原型:',num2str(N),'阶 ',afProto];paraS;['Fsa=',num2str(fsa),'(Hz)']};
  clear doi ind slideData paraS
  clear Xlim1 XTick1 XTickLabel1 Wsnor
  save yhzfd
  % yhzfd: pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm az bz h t w f n
  % or fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP) bz az h t w f n
  % and both have: label az bz paraLabel
%----------------IIR BLT--------------------------  
case doi+27 
  load yhzfd
  % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den
  j=1;
  while ~get(slideData.BtnHandles(2,j),'value')
      j=j+1;
  end
  % j=1: LP; 2:HP; 3:BP 
  switch j
    case 1 %LP
       Wpre=tan(Wn/(2*fsa));
       text(0.01,0.5,['Low Pass: Wpre=tg(Wn/(2fsa))=',num2str(Wpre)],'fontsize',11);
    case 2 %HP
       Wpre=1/tan(Wn/(2*fsa));
       text(0.01,0.5,['High Pass: Wpre=ctg(Wn/(2fsa))=',num2str(Wpre)],'fontsize',11);
    case 3 %BP
       Wnz=Wn/fsa;
       cosW0=sin(sum(Wnz))/sum(sin(Wnz));
       Wpre=(cosW0-cos(Wnz(2)))/sin(Wnz(2));
       text(0.01,0.55,'Band Pass:','fontsize',11);
       text(0.01,0.45,['1. Wnz=Wn/fsa=[',num2str(Wnz),']'],'fontsize',11);
       text(0.01,0.35,'                   sin(Wnz1+Wnz2) ','fontsize',10);
       text(0.01,0.30,['2. cosW0=----------------------------=',num2str(cosW0)],'fontsize',11);
       text(0.01,0.25,'                   sin(Wnz1)+sin(Wnz2)  ','fontsize',10);
       text(0.01,0.15,['3. Wpre=(cosW0-cosWnz2)/sin(Wnz2)=',num2str(Wpre)],'fontsize',11);
       %text([0.01,0.01,0.01,0.01,0.01],[0.55,0.45,0.4,0.35,0.25],{'Band Pass:',...
       %                   ['1. Wnz=Wn/fsa=[',num2str(Wnz),']'],...
       %                    '             sin(Wnz1+Wnz2) ',...
       %                   ['2. cosW0=------------------------=',num2str(cosW0)],...
       %                    '             sin(Wnz1)+sin(Wnz2) ',...
       %%                   ['3. Wpre=(cos(W0)-cos(Wnz1))/sin(Wnz1)=',num2str(Wpre)]},...
       %                'fontsize',11); 
       clear Wnz %cosW0
   end     
   clear doi ind slideData
   save yhzfd 
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP)
case doi+28 
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP)
   numUnnStr=LocalPolyStr(N,num,'(s/Wp)',0);
   denUnnStr=LocalPolyStr(N,den,'(s/Wp)',0);
   sepStr(1:(N+1)*20)='-';
   sepStr=char(sepStr);
  % text(0.01,0.4,'Ha(s)=','fontsize',11);
   text([0.01,0.01,0.01],[0.5,0.4,0.3],{numUnnStr,sepStr,denUnnStr},'fontsize',9);
   text(0.05,0.1,['Wp=' num2str(Wpre) ' (Prewarping 3dB Frequency)'],'fontsize',9);
   clear numUnnStr denUnnStr sepStr doi ind slideData
   save yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP)
case doi+29
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP)
   [z p k]=tf2zp(num,den);
   z=z.*Wpre;
   p=p.*Wpre;
   switch j
      case 1
      pd = (1+p)./(1-p); % Do bilinear transformation
	   zd = (1+z)./(1-z);
      % real(kd) or just kd?
	   kd = (k*prod(1-z)./prod(1-p));
	   zd = [zd;-ones(length(pd)-length(zd),1)];  % Add extra zeros at -1
      kd=kd*(Wpre^(length(pd)-length(zd)));
      text(0.01,0.7,'Low Pass: s=f(z^-^1)=--------------------','fontsize',10);
      text([0.35,0.35],[0.62,0.75],{'1-z^-^1',...
            '1+z^-^1'},'fontsize',9);
      case 2
      pd = -(1+p)./(1-p); % Do bilinear transformation
	   zd = -(1+z)./(1-z);
      % real(kd) or just kd?
	   kd = (k*prod(1-z)./prod(1-p));
	   zd = [zd;ones(length(pd)-length(zd),1)];  % Add extra zeros at -1
      kd=kd*(Wpre^(length(pd)-length(zd)));
      text(0.01,0.7,'High Pass: s=f(z^-^1)=--------------------','fontsize',10);
      text([0.35,0.35],[0.62,0.75],{'1+z^-^1',...
            '1-z^-^1'},'fontsize',9);
      case 3
         for i=1:length(p)
           % nd=[1,2*cosW0/(1-z(i)),(1+z(i))/(1-z(i))];
            dd=[1,2*cosW0/(1-p(i)),(1+p(i))/(1-p(i))];
            %[zdd,pdd,kk]=tf2zp(nd,dd);
            pdd=roots(dd');
            pd(2*i-1:2*i)=pdd;
            %zd(2*i-1:2*i)=nd;
         end
         zd=[];
         for i=1:length(z)
           % nd=[1,2*cosW0/(1-z(i)),(1+z(i))/(1-z(i))];
            nd=[1,2*cosW0/(1-z(i)),(1+z(i))/(1-z(i))];
            %[zdd,pdd,kk]=tf2zp(nd,dd);
            ndd=roots(nd');
            zd(2*i-1:2*i)=ndd;
            %zd(2*i-1:2*i)=nd;
         end
         pd=pd';
         zd=zd';
         kd = (k*prod(1-z)./prod(1-p));
         zd = [zd;-ones(length(p)-length(z),1);ones(length(p)-length(z),1)];
         %zd=  [zd;ones(length(pd)-length(zd),1)];
         % Add extra zeros at -1
         kd=kd*(Wpre^(length(p)-length(z)));
         text(0.01,0.7,'Band Pass: s=f(z^-^1)=-----------------------------------','fontsize',10);
         text([0.35,0.35],[0.75,0.62],{'1-2cosW0z^-^1+z^-^2',...
                                       '1-z^-^2'},'fontsize',9);

         clear dd pdd i nd ndd 
      end   
      [bz,az]=zp2tf(zd,pd,kd);
      bz(find(abs(bz)<1e-6))=0;
      bz=real(bz);
      az(find(abs(az)<1e-6))=0;
      numZStr=LocalPolyStr(length(bz)-1,bz,'z',length(bz)-1);
      denZStr=LocalPolyStr(length(az)-1,az,'z',length(az)-1);
      %text(0.01,0.7,numZStr,'fontsize',10);
      %text(0.01,0.5,denZStr,'fontsize',10);
      sepStr(1:(length(bz/2)*16))='-';
      sepStr=char(sepStr);
      text(0.01,0.5,'H(z)=','fontsize',11);
      text([0.01,0.01,0.01],[0.3,0.2,0.1],{numZStr,sepStr,denZStr},'fontsize',10);
      clear doi ind slideData
      clear z p k pd zd kd numZStr denZStr sepStr
      save yhzfd
      % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den Wpre j cosW0(if BP) bz az
end; %switch
 
 function polyStr=LocalPolyStr(N,nd,var,inv)
   polyStr=' ';
   for i=N:-1:0
      if abs(nd(N+1-i))<=1e-6
         if strcmp(polyStr(length(polyStr)),' ') 
            polyStr=[polyStr,'    '];   
         end   
      else
         if ~strcmp(polyStr(length(polyStr)),' ') & nd(N+1-i)>0
            polyStr=[polyStr,'+'];
         end   
         if nd(N+1-i)~=1 | i==inv
            polyStr=[polyStr,num2str(nd(N+1-i))];
         end
         if i~=inv
            varStr=num2str(i-inv);
            for j=1:length(varStr);
               varSS(2*j-1)='^';
               varSS(2*j)=varStr(j);
            end               
            polyStr=[polyStr,var,varSS];
         end   
      end
   end; 
   %sepStr(1:(N+1)*15)='-';
   %epStr=char(sepStr);
   %text(0.01,0.4,['Ha(' var ')='],'fontsize',11);
   %text([0.15,0.12,0.15],[0.5,0.4,0.3],{numStr,sepStr,denStr},'fontsize',10);

 
 
 
 function hi=LocalPlotHi(N,Wsnor,filType)
    switch filType
      case 1
        hi=firls(N,[0,Wsnor,Wsnor,1],[1,1,0,0]);
      case 2
        hi=firls(N,[0,Wsnor,Wsnor,1],[0,0,1,1]);
      case 3
        hi=firls(N,[0,Wsnor(1),Wsnor(1),Wsnor(2),Wsnor(2),1],...
           [0,0,1,1,0,0]);
   end %switch filType   
             
function Ws=LocalStrTrans(Wsstr)
     %Wsstr=get(slideData.BtnHandles(BtnHndlInd),'string');
     % transfer the string to caculable digits
     for i=1:length(Wsstr)-1
        if (Wsstr(i:i+1)=='pi')& (Wsstr(i-1)~='*')
           Wsstr=strcat(Wsstr(1:i-1),'*',Wsstr(i:length(Wsstr)));
        end
     end
     Ws=str2num(Wsstr);
     



%==========
%==========
function LocalResult(h,Xlim1,XTick1,XTickLabel1,w,f,Wsnor,n,showFlag);

if nargin < 9, showFlag = 0; end;

h_tmp(1) = axes('position',[0.1,0.57,0.6,0.28]);
yhzstem(h);
hold on; 
plot(zeros(size(h)));
% nExt=3;
set( h_tmp(1), ... %'color',[0.8,0.8,0.8],...
   'Xlim',Xlim1, ...
   'XTick',XTick1, ...
   'XTickLabel',XTickLabel1);  % +1=',num2str(winLenM+1)),strcat('N=',num2str(winLenN))});

% plot the frequency domain response
%[w,f]=freqz(h/sum(h),1,1024);
h_tmp(2)=axes('position',[0.1,0.17,0.3,0.28]);
h_plot(1) = semilogy(f,(abs(w)));
WsstrT=strcat(num2str(Wsnor'),'pi');
[M,N]=size(WsstrT);
if M==1,
   Wsstr={WsstrT};
else,
   Wsstr={WsstrT(1,:),WsstrT(2,:)};
end;   
myeps=0.001*pi;
set( h_tmp(2), ...  %'color',[0.8,0.8,0.8],...
   'Xlim',[myeps,pi-myeps], ...
   'XTick',[Wsnor*pi], ...
   'XTickLabel',Wsstr);
XLabel('幅频响应');

%plot the phase response
h_tmp(3) = axes('position',[0.45,0.17,0.27,0.28]);
h_plot(2) = plot(f,angle(w)); %unwrap(angle(w)));
set( h_tmp(3), ... %'color',[0.8,0.8,0.8],...
   'Xlim',[0,4*pi/(n-1)], ...
   'XTick',[0,4*pi/(n-1)], ... %Wsnor*pi,pi],...
   'XTickLabel',{'0',['4pi/(' num2str(n) '-1)']}, ...
   'Ylim',[-pi,pi], ...
   'YTick',[-pi,-pi/2,0,pi/2,pi], ...
   'YTickLabel',{'-pi','-pi/2','0','pi/2','pi'});
XLabel('相频响应');  


%===============
% axz 1999-12-18

if showFlag,
   
   Hpr=h(XTick1(1):(XTick1(1)+n-1));
   Hpr=Hpr(:);
   ls_tmp = char(XTickLabel1(1));
   li = str2num(ls_tmp);
   for j = 1 : n,
      if li < 10,
         ls_tmp = '0';
      else,
         ls_tmp = '';
      end;
      lstr_head(j,:) = [' h(' ls_tmp int2str(li) ') = '];
      li = li + 1;
   end;
   
%list the time domain response
h_tmp(4) = uicontrol(gcf,'Style','listbox', ...
   'Units','normalized', ...
   'Position',[0.18,0.15,0.46,0.33], ...
   'Tag','tmp_ShowHn', ...
   'String',[lstr_head num2str(Hpr)], ...
   'Visible','off');

% the button
h_tmp(5) = uicontrol(gcf,'Style','pushbutton', ...
   'Units','normalized', ...
   'position',[0.31,0.04,0.2,0.06], ...
   'Fontsize',9, ...
   'String','显示脉冲响应', ...
   'Tag','tmp_ShowHn', ...
   'Callback','show_hn', ...
   'Visible','on');
set(h_tmp(5),'UserData',[h_tmp(:); h_plot(:)]);

end;

% axz 1999-12-18
%===============

   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -