Vous êtes sur la page 1sur 4

Funcin de Matlab que genera la Transformada Z en 3D de un sistema representado mediante su ecuacin en diferencias e incluye la circunferencia unidad con la situacin

de polos y ceros. Tambin realiza un giro sobre la TZ y va representando la Transformada de Fourier.


function [Hz,Hw]=TZ_demo(b,a,f,rotar) % funcion que representa el 10log del valor absoluto de la TZ del sistema % con funcion de transferencia racional: % jw -jw -jmw % jw B(e) b(1) + b(2)e + .... + b(m+1)e % H(e) = ---- = -----------------------------------% jw -jw -jnw % A(e) a(1) + a(2)e + .... + a(n+1)e % % Entradas: % f: valor 0/1 que indica la naturaleza de los vectores a y b (por % defecto f=0; % a: si f=0 es el vector de coeficientes del polinomio del denominador; % si f=1 (polinomio factorizado) es el vector que contiene los polos del sistema % b: si f=0 es el vector de coeficientes del polinomio del numerador; % si f=1 (polinomio factorizado) es el vector que contiene los ceros del sistema % rotar: valor 0/1 para indicar si se desa hacer la rotacion 3D en H(Z) % (por defecto vale 0; y si se pone a 1 hay que introducir f como 3er argumento) % % Salidas: % Hw: Transformada de Fourier del sistema con 256 puntos entre -pi y pi % Hz: Transformada Z del sistema con 256 puntos para el eje real y lo % mismo para el eje imaginario. La escala de los ejes depende del radio % maximo de los polos y los ceros. % control de entradas error(nargchk(2,4,nargin)) if nargin == 2, f=0; rotar=0; end if nargin == 3, rotar=0; end % calculo de los polinomios del sistema b = b(:); a = a(:); if f == c = p = b = a = else c = p = end 1, b; a; poly(b); poly(a); roots(b); roots(a);

% 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

Vous aimerez peut-être aussi