Académique Documents
Professionnel Documents
Culture Documents
% calculo del radio maximo de polos y ceros para ajustar la representacion max_c=max(abs(c)); max_p=max(abs(p)); max_r=max([max_c max_p])*1.5;; resolucion=max_r/20; [X,Y]=meshgrid(-max_r:resolucion:max_r); Z=X+j*Y; Hz_num=polyval(b,Z); Hz_den=polyval(a,Z); warning off MATLAB:divideByZero Hz=Hz_num./Hz_den; modHz=10*log10(abs(Hz)); faseHz=angle(Hz); Hw=freqz(b,a,360,'whole'); Hw=fftshift(Hw); modHw=10*log10(abs(Hw)); faseHw=angle(Hw); % Representacion de la TZ con la circunferencia unidad superpuesta y con % una representacion de la situacion de los polos y los ceros w=-180:179; x=cos(w*pi/180); y=sin(w*pi/180); fig1=figure; set(fig1,'position',[10,30,500,500]); colormap bone [fila,columna]=find(isinf(modHz)); for i=1:length(fila) for j=1:length(columna) modHz(fila(i),columna(j))=modHz(fila(i)-1,columna(j)); end end maximoabs=max(max(abs(modHz))); transparencia=(maximoabs-(abs(modHz)))/maximoabs; % la malla se hace mas transparente cuanto mas se "estira". s1=surf(X,Y,modHz,'FaceColor','interp','Alphadata',transparencia,... 'AlphaDataMapping','none','FaceAlpha','interp',... 'EdgeColor','black',... 'FaceLighting','phong','diffusestrength',1,'specularstrength',0) hold on s2=surf(X,Y,zeros(size(X)),'FaceAlpha',0.2,'EdgeColor','none') view(30,30) camlight left axis('square') plot3(x,y,modHw,'w','LineWidth',2) plot3(real(c),imag(c),zeros(length(c),1),'o','MarkerEdgeColor','w','Ma rkerFaceColor','r','MarkerSize',8) plot3(real(p),imag(p),zeros(length(p),1),'o','MarkerEdgeColor','w','Ma rkerFaceColor','b','MarkerSize',8) plot3(x,y,zeros(length(x),1),'k','LineWidth',2); plot3([-1 1],[0 0],[0 0],'k','LineWidth',2); plot3([0 0],[-1 1],[0 0],'k','LineWidth',2); if rotar==1
display('Pulsa una tecla para realizar una simulacion de giro con elevacion cero') pause % inicio de la representacion 3D con movimiento de la TZ y la TF fig2=figure; set(fig2,'DoubleBuffer','on','position',[520,30,500,500]); subplot(211); s1=surf(X,Y,modHz,'FaceColor','interp','Alphadata',transparencia,... 'AlphaDataMapping','none','FaceAlpha','interp',... 'EdgeColor','black',... 'FaceLighting','phong','diffusestrength',1,'specularstrength',0) hold on s2=surf(X,Y,zeros(size(X)),'FaceAlpha',0.2,'EdgeColor','none') colormap copper view(0,0) camlight left plot3(x,y,modHw,'w','LineWidth',2) plot3(real(c),imag(c),zeros(length(c),1),'o','MarkerEdgeColor','w','Ma rkerFaceColor','r','MarkerSize',8) plot3(real(p),imag(p),zeros(length(p),1),'o','MarkerEdgeColor','w','Ma rkerFaceColor','b','MarkerSize',8) plot3(x,y,zeros(length(x),1),'k','LineWidth',2); plot3([-1 1],[0 0],[0 0],'k','LineWidth',2); plot3([0 0],[-1 1],[0 0],'k','LineWidth',2); %lightangle(-45,30) hold on h=subplot(212) set(h,'XLimMode','manual','YlimMode','manual') plot(w(1:180),modHw(1:180)) grid view(0,0) [az el] = view; deg=length(w); rotvec = 0:deg/40:deg; display('Pulsa una tecla para ver una rotacion de 360 sobre la TZ y su correspondiente visualizacion de la TF en un margen de 180'); pause [fila]=find(isinf(modHw)); for i=1:length(fila) modHw(fila(i))=modHw(fila(i)+1); end maximow=max(max(modHw)); minimow=min(min(modHw)); modHw=[modHw modHw]; for i = 1:length(rotvec) subplot(211) view([az+rotvec(i) el]) drawnow axis vis3d subplot(212) inf=floor(az+rotvec(i))-180; sup=inf+180; plot(inf:sup,modHw(181+inf:181+sup))
axis([inf sup minimow maximow]) end end % fin de la representacion rotante display('pulsa una tecla para ver la representacion completa del 10log(abs(TF))') pause subplot(212) plot(w(1:360),modHw(1:360)); grid