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