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

📄 mytext1.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
📖 第 1 页 / 共 3 页
字号:
 case doi+13
    load yhzfd
    % yhzfd: HK N Ws Ws1
    j=1;
    while ~get(slideData.BtnHandles(doi+10,j),'value')
       j=j+1;
    end   
    text(0.01,0.5,strcat('FILTER TYPE',' ',num2str(j),':'),'fontsize',10);
    Hk=HK;
    if j==1|j==4 
       HkStr={'H   =H        ';...
              '  k      N-k  '};
    else 
       HkStr={'H   = -H       ';...
              '  k        N-k '};
       for i=1:round(length(HK)/2)
          Hk(N+2-i)=-HK(i);
       end   
    end;
  
    %    HkStrC=cellstr(HkStr);
    phasek=-pi*(1-1/N)*[0:N];
    if j==1|j==2
       phsStr={'                        2\pi     N-1     ';...
               'PHASE:     -k x------ x -------  ';...
               '                         N        2      '};
    else      
       phsStr={'                       2\pi      N-1      \pi       ';...
                 'PHASE:     -k x------ x ------- - -----     ';...
                 '                        N        2        2         '};
       phasek=phasek-pi/2;    
    end
 %   phsStrC=cellstr(phsStr);       
    text([0.3,0.3],[0.5,0.47], HkStr,'fontsize',10);
   
    text([0.3,0.3,0.3],[0.2,0.15,0.1],phsStr,'fontsize',10);
    axes('position',[0.1,0.17,0.3,0.28]);
    yhzstem(Hk);
    set(gca,'XLim',[1,N+1],'XTick',[1,N+1],'XTickLabel',{'0',strcat('N=',num2str(N))});
    XLabel('Hk');
    axes('position',[0.45,0.17,0.27,0.28]);
    yhzstem(phasek);
    set(gca,'XLim',[1,N+1],'XTick',[1,N+1],'XTickLabel',{'0',strcat('N=',num2str(N))});
    XLabel('PHASE');
    
    clear j i HkStr phsStr doi slideData ind
    save yhzfd    %HK Hk phasek N Ws Ws1
    % yhzfd: HK Hk phasek N Ws Ws1
 case doi+14
    load yhzfd
    %yhzfd: HK Hk phasek N Ws Ws1
    j=sqrt(-1);
    H=Hk(1:N).*exp(j*phasek(1:N));
    h=real(ifft(H));  % k.*exp(j*phasek));
    Xlim1=[1,N];
    XTick1=[1,N];
    XTickLabel1={'0',strcat('N-1=',num2str(N-1))};
    [w,f]=freqz(h,1,512);
    Wsnor=Ws/pi;
    LocalResult(h,Xlim1,XTick1,XTickLabel1,w,f,Wsnor,N,1);  
    % prepare the data in yhzfd which will retrieved by yhzfdview
    label=get(gcf,'name');
    bz=h;
    az=1;
    j=1;
    while ~get(slideData.BtnHandles(doi+10,j),'value')
       j=j+1;
    end   
    if j==1|j==2
       firTypeS='h(n)=h(N-1-n)';
    else 
       firTypeS='h(n)=-h(N-1-n)';
    end   
    WsstrT=strcat(num2str(Wsnor'),'pi');
    [MM,NN]=size(WsstrT);
    if MM~=1 
       WsstrT=[WsstrT(1,:),'  ',WsstrT(2,:)]; 
    end;
    paraLabel={['采样点数:',num2str(N)];firTypeS;['截止频率:',WsstrT]};
    clear j H Xlim1 XTick1 XTickLabel1 w f Wsnor doi slideData ind MM NN WsstrT firTypeS
    save yhzfd 
    % yhzfd: HK Hk phasek N Ws Ws1 h label bz az paraLabel
    
 %============IIR=============   
case {doi+15,doi+16,doi+17}
   fp=str2num(get(slideData.BtnHandles(ind,1),'string'));
   Rp=str2num(get(slideData.BtnHandles(ind,2),'string'));
   fs=str2num(get(slideData.BtnHandles(ind,3),'string'));
   Rs=str2num(get(slideData.BtnHandles(ind,4),'string'));
   fsa=str2num(get(slideData.BtnHandles(ind,5),'string'));
   clear doi slideData ind
   save yhzfd
   % yhzfd: fp,Rp,fs,Rs,fsa
   
case doi+19
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa
   Wp=2*pi*fp;
   Ws=2*pi*fs;
   Wsa=2*pi*fsa;
   j=1;
   while ~get(slideData.BtnHandles(34,j),'value')
       j=j+1;
   end
   switch j
     case 1
        afProto='butter';
        [N, Wn]=BUTTORD(Wp, Ws, Rp, Rs, 's');
     case 2
        afProto='cheby1';
        [N, Wn] =CHEB1ORD(Wp, Ws, Rp, Rs, 's');
     case 3
        afProto='cheby2';
        [N, Wn] =CHEB2ORD(Wp, Ws, Rp, Rs, 's');
   end;
   text(0.01,0.5,['LPAF Prototype:',afProto],'fontsize',11);
   text(0.01,0.3,['ORDER N=',num2str(N)],'fontsize',11);
   text(0.01,0.1,['3dB Wn=',num2str(Wn),' rad/s'],'fontsize',11);
   clear j doi slideData ind
   save yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto
case doi+20
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto
   text(0.01,0.7,[num2str(N),' order ',afProto,' AF']);
   switch afProto
     case 'butter'
          [z,p,k] = buttap(N);
     case 'cheby1'
          [z,p,k] = cheb1ap(N,Rp);
     case 'cheby2'
          [z,p,k] = cheb2ap(N,Rs);
   end     
   [num,den] = zp2tf(z,p,k); 
   numStr=LocalPolyStr(N,num,'p',0);
   denStr=LocalPolyStr(N,den,'p',0);
   sepStr(1:(N+1)*15)='-';
   sepStr=char(sepStr);
   text(0.01,0.4,'Ha(p)=','fontsize',11);
   text([0.15,0.12,0.15],[0.5,0.4,0.3],{numStr,sepStr,denStr},'fontsize',10);
   text(0.05,0.1,'p: after normalized','fontsize',9);
   clear doi slideData ind numStr denStr sepStr
   save yhzfd
   %yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den
   %text(0.01,0.4,sepStr,'fontsize',12);
   % Str=' ';
  % for i=N:-1:0
  %    if 
%   poleStr=' ';
%   for i=1:length(p)
%     if abs(imag(p(i)))<=1e-6
%%         p(i)=real(p(i));
%      end;   
%      poleStr=strcat(poleStr,'(s-(',num2str(p(i)),'))');
%   end   
%   text(0.01,0.5,poleStr,'fontsize',9);
case doi+21
   set(slideData.BtnHandles(ind,[1:2]),'enable','on');
   if get(slideData.BtnHandles(2,2),'value')
      set(slideData.BtnHandles(ind,2),'enable','off')
   end %Impulse Response Invariance Method is not suited to HP and BP
case doi+22
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws Wsa N Wn afProto num den
   numUnnStr=LocalPolyStr(N,num,'(s/Wn)',0);
   denUnnStr=LocalPolyStr(N,den,'(s/Wn)',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,['Wn=' num2str(Wn) 'rad/s'],'fontsize',9);
   clear numUnnStr denUnnStr sepStr doi ind slideData
   save yhzfd
   %yhzfd: fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den
case doi+23
   load yhzfd
   % yhzfd: fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den
   %[numZ,denZ]=impinvar(num,den,fsa);
   a=den;
   b=num;
   %[M,N] = size(a);
   %if M>1 & N>1
   % error(' A must be vector.')
%end
%[M,N] = size(b);
%if M>1 & N>1
%    error(' B must be vector.')
%end

   b = b(:);
   a = a(:);
   a1 = a(1);
   if a1 ~= 0
   % Ensure monotonicity of a
      a = a/a1;
   end    
   kimp=[];
    %if length(b) > length(a)
    %error('Numerator B(s) degree must be no more than denominator A(s) degree.')
%elseif  (length(b)==length(a))  
% remove direct feed-through term, restore later
    kimp = b(1)/a(1);
    b = b - kimp*a;  b(1)=[];
%end

%--- Achilles Heel is repeated roots, so I adapted code from residue
%---  and resi2 here.  Now I can group roots, and there is no division.
    pt = roots(a).';
    Npoles = length(pt);
    tol=1e-3;
    [mm,ip] = mpoles(pt,tol);
    pt = pt(ip);
    starts = find(mm==1);
    ends = [starts(2:length(starts))-1;Npoles];
    for k = 1:length(starts)
       jkl = starts(k):ends(k);
       polemult(jkl) = mm(ends(k))*ones(size(jkl));
       poleavg(jkl) = mean(pt(jkl))*ones(size(jkl));
    end
    rez = zeros(Npoles,1);
    kp = Npoles;
    while kp>0 
       pole = poleavg(kp);
       mulp = polemult(kp);
       numT = b;
       denT = poly( poleavg([1:kp-mm(kp),kp+1:Npoles]) );
       rez(kp) = polyval(numT,pole) ./ polyval(denT,pole);
       kp = kp-1;
     for k=1:mulp-1
         [numT,denT] = polyder(numT/k,denT);
         rez(kp) = polyval(numT,pole) ./ polyval(denT,pole);
         kp = kp-1;
     end
  end
  %rez=rez';
  %pt0=find(abs(imag(pt))<1e-6);
  %pt(pt0)=real(pt(pt0));
  %rez0=find(abs(imag(rez))<1e-6);
  %rez(rez0)=real(rez(rez0));
  %rezStr=['(',num2str(rez(,:)),')Wn'];
  pt=pt';
  rezStr=cell(size(rez));
  ptStr=cell(size(pt));
  for i=1:length(rez)
     %rezT1=num2str(rez(i));
     if abs(imag(rez(i)))>1e-6 
        rezStr(i)=cellstr(['(',num2str(rez(i)),')Wn']);
     else
        rezStr(i)=cellstr([num2str(rez(i)),'Wn']);
     end;
     %rezStr(i)=rezT2;
     if abs(imag(pt(i)))<1e-6 & real(pt(i))>1e-6
        ptStr(i)=cellstr(['s-',num2str(pt(i)),'Wn']);
     else
        ptStr(i)=cellStr(['s-(',num2str(pt(i)),')Wn']);
     end
     xPos=0.15+mod(i-1,2)*0.4;
     yPos=0.7-floor((i-1)/2)*0.28;
     text(0.01,0.65,'Ha(s)=','fontsize',11);
     if i==1
        sepStr='-------------------------------------';
     else
        sepStr='+ -------------------------------------';
     end
     text([xPos,xPos-0.02,xPos],[yPos,yPos-0.05,yPos-.12],{char(rezStr(i)),sepStr,char(ptStr(i))},'fontsize',10);
  end    
  %text(0.01,0.7,rezStr','fontsize',10);
  %text(0.01,0.5,ptStr','fontsize',10);
  clear doi ind slideData
  clear a b a1 kimp Npoles tol ip starts ends k jkl 
  clear poleavg polemult kp pole mulp
  clear numT denT ptStr sepStr xPos yPos i  
  save yhzfd
  %yhzfd: pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm
  
case doi+24
   load yhzfd
   % yhzfd: pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm
   for i=1:length(rez)
       ptS=num2str(pt(i));
       for j=1:length(ptS)
          ptSS(2*j-1)='^';
          ptSS(2*j)=ptS(j);
       end   
       if  abs(imag(pt(i)))<1e-6 & real(pt(i))>1e-6
          ptZStr(i)=cellstr(['1-e^(^W^n^/^2^\pi^f^s^a^)',ptSS,'z^-^1']);
       else 
          ptZStr(i)=cellstr(['1-e^(^W^n^/^2^\pi^f^s^a^)^(',ptSS,'^)z^-^1']);
       end
     xPos=0.13+mod(i-1,2)*0.45;
     yPos=0.7-floor((i-1)/2)*0.28;
     text(0.01,0.65,'H(z)=','fontsize',11);
     if i==1
        sepStr='------------------------------------------';
     else
        sepStr='+ ------------------------------------------';
     end
     text([xPos,xPos-0.02,xPos],[yPos,yPos-0.05,yPos-.12],{[char(rezStr(i)),'/2\pifsa'],sepStr,char(ptZStr(i))},'fontsize',9);
     clear ptSS
  end
  yPos=yPos-0.25;
  text(0.05,yPos,['Wn=',num2str(Wn),' rad/s;   fsa=',num2str(fsa),' Hz'],'fontsize',9);  
  clear i doi ind slideData
  clear ptS j ptZStr sepStr xPos yPos
  save yhzfd
  %yhzfd:  pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm
  
case doi+25
   load yhzfd
   %yhzfd:  pt rez fp Rp fs Rs fsa Wp Ws N Wsa Wn afProto num den rezStr mm
   r = rez;
   p = pt;
   p=p';
   Fsa=fsa/Wn;%*2*pi/Wn;
   az = poly(exp(p/Fsa)).';
   tn = (0:length(rez)-1)'/Fsa;
   mm1 = mm(:).' - 1;
   tt = tn(:,ones(1,length(rez))) .^ mm1(ones(size(tn)),:);
   ee = exp(tn*p);
   hh = ( tt.*ee ) * r;
   bz = filter(az,1,hh);
   %if ~isempty(kimp)
% restore direct feed-through term
   bz = [bz(:);0];
%end
   bz = bz/Fsa;
   bz = bz(:).';   % make them row vectors
   az = az(:).';
   %cmplx_flag = any(imag(b)) | any(imag(a));
   %f ~cmplx_flag
   %if  norm(imag([bz az]))/norm([bz az]) > 1000*eps
   %  warnStr = sprintf( ...
   %  ['  The output is not correct/robust.\n' ...
   %   '  Coeffs of B(s)/A(s) are real, but B(z)/A(z) has complex coeffs.\n' ...
   %   '  Probable cause is rooting of high-order repeated poles in A(s).']);
   %  warning(warnStr)

⌨️ 快捷键说明

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