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

📄 ztrn.m

📁 很多matlab的源代码
💻 M
字号:
function [tf,rr,pp,kk] = ztrn(x,tol)
%ZTRN	Support file for ZTR


% 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



if nargin==0,help ztrn,return,end

if nargin<2,tol=.001;end
lx=length(x);while x(lx)==0,x(lx)=[];lx=lx-1;end,m=x(1);a=0;p=0;w=0;r=0;n0=0;
if lx>1,a=x(2);end,if lx>2,p=x(3);end,if lx>3,w=x(4);end,if lx>4,r=x(5);end
if lx>5,n0=x(6);end,del=zeros(1,n0);x=[m a p w r n0];
if p<0,error('powers of n cannot be negative'),return,end
if w<0,w=-w;r=-r;end
if n0 ~=round(n0),error('delay must be an integer'),return,end
if x(1)==0 | x(2)==0,tf=[0;1];return,end
y=x(3:5);if ~any(y)~=0,na=[del m 0];da=[1 -a del];l=length(na);
while na(l)==0 & da(l)==0,na(l)=[];da(l)=[];l=l-1;end,tf=[na;da];
return,end
if w==0,m=m*cos(r);r=0;end
if abs(w)==pi,a=-a;m=m*cos(r);w=0;r=0;end %%removed extra end???

if w==0,na=[1 0];da=[1 -a];rt=a;
else
na=[cos(r) -a*cos(w-r) 0];
da=[1 -2*a*cos(w) a*a];rt=a*exp(j*w);rt=[rt;conj(rt)];end
rt1=rt;if p>0,d=da;ln=length(na);
for n=1:p,if ln==2,n1=-n*na;else,n1=-n*conv(na,[2 -2*a*cos(w)]);end
l=length(na);k=l-1:-1:0;dna=na.*k;dna(l)=[];n2=conv(dna,d);
l1=length(n1);l2=length(n2);ld=l1-l2;
if ld>0,n2=[zeros(1,ld) n2];end,if ld<0,n1=[zeros(1,-ld) n1];end
na=[-(n1+n2) 0];da=conv(da,d);rt=[rt;rt1];end,end
nr=real(rt);ni=imag(rt);ra=abs(nr-round(nr))<=tol;nnr=round(nr).*ra+nr.*(1-ra);
ia=abs(ni-round(ni))<=tol;nni=round(ni).*ia+ni.*(1-ia);rt=nnr+sqrt(-1)*nni;
na=m*real(na).*(abs(na)>75*eps);da=real(da).*(abs(da)>75*eps);
ra=abs(na-round(na))<=tol;na=round(na).*ra+na.*(1-ra);
ra=abs(da-round(da))<=tol;da=round(da).*ra+da.*(1-ra);
da=[da del];rt=[zeros(n0,1);rt];l1=length(na);l2=length(da);ld=l1-l2;
if ld>0,da=[zeros(1,ld) da];end,if ld<0,na=[zeros(1,-ld) na];end
l=length(na);while na(l)==0 & da(l)==0,na(l)=[];da(l)=[];l=l-1;end,tf=[na;da];
if nargout>1,la=length(na);if na(la)==0;na(la)=[];else,rt=[0;rt];end


[rr,pp,kk]=tf2pf(na,rt,1,.1*abs(a));end

%%% The following does not work in v5

%nr=real(rr);ni=imag(rr);ra=abs(nr-round(nr))<=tol;nnr=round(nr).*ra+nr.*(1-ra);
%ia=abs(ni-round(ni))<=tol;nni=round(ni).*ia+ni.*(1-ia);rr=nnr+sqrt(-1)*nni;
%nr=real(pp);ni=imag(pp);ra=abs(nr-round(nr))<=tol;nnr=round(nr).*ra+nr.*(1-ra);
%ia=abs(ni-round(ni))<=tol;nni=round(ni).*ia+ni.*(1-ia);pp=nnr+sqrt(-1)*nni;

⌨️ 快捷键说明

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