📄 mytext1.m
字号:
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 + -