marcoshuck

Magnitud y fase (TC)

Dec 15th, 2016
8,423
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.28 KB | None | 0 0
  1. %{
  2. Análisis de Señales y Sistemas - TP Laboratorio Nº 3
  3. Función FTRANSF - Grupo 6
  4. Argumentos:
  5.     - y: Señal de entrada
  6.     - T0: Periodo elemtal
  7.     - N: Cantidad de coeficientes a calcular (0 si es aperiódica)
  8.     - P: Señal periódica (0) o aperiódica (1)
  9. Retorna:
  10.     - Xabs: Magnitud de la señal
  11.     - Xarg: Fase de la señal
  12. Repositorio disponible en: https://github.com/marcoshuck/matlab-tp3-asys
  13. Realizado por Huck Marcos A. y Castelluci Leandro E.
  14. %}
  15.  
  16. function[Xabs, Xarg] = FTRANSF(x, T0, N, P)
  17.     % Definición de variables
  18.     syms t A w 'real';
  19.     syms k 'integer';
  20.    
  21.     % Definición de w0
  22.     w0 = sym(2*pi/T0);
  23.    
  24.     % Definición de alfa
  25.     alfa=2*pi/T0/100;
  26.    
  27.     % Definición de la delta
  28.     DIRAC(w)=(1/alfa)*(w + alfa)*(heaviside(w + alfa) - heaviside(w));
  29.     DIRAC(w)=DIRAC(w) + (-1/alfa)*(w - alfa)*(heaviside(w)-heaviside(w-alfa));
  30.    
  31.     if P == 0
  32.          % Integral para obtener la expresión general de los coeficientes de Fourier
  33.         ak(k) = 1/T0 * int(x(t).*exp(-1j*w0*k*t), t, 0, T0);
  34.  
  35.         % Simplificación de ak(k)
  36.         ak(k) = simplify(ak(k));
  37.  
  38.         % Descomposición de numerador y denominador
  39.         [n, d] = numden(ak);
  40.        
  41.         k = 0;
  42.         if isnan( eval(ak) );
  43.             a=1/T0*int( x(t),t,0,T0);
  44.         else
  45.             a=ak(k);
  46.         end
  47.        
  48.         Xabs(w)=abs(eval(2*pi*a)).*DIRAC(w);
  49.         Xarg(w)=angle(eval(2*pi*a)).*DIRAC(w);
  50.        
  51.         for k=1:N
  52.             if ((n(k) == 0) && (d(k) == 0))
  53.                 a = 1/T0 * int(x(t).*exp(-1j*w0*k*t), t, 0, T0);
  54.             else
  55.                 a=ak(k);
  56.             end
  57.             Xabs(w) = Xabs(w) + abs(eval(conj(2*pi*a))).*DIRAC(w + eval(k*w0));
  58.             Xabs(w) = Xabs(w) + abs(eval(2*pi*a)) .*DIRAC(w - eval(k*w0));
  59.            
  60.             Xarg(w) = Xarg(w) + angle(eval(conj(2*pi*a))).*DIRAC(w + eval(k*w0));
  61.             Xarg(w) = Xarg(w) + angle(eval(2*pi*a)) .*DIRAC(w - eval(k*w0));
  62.         end
  63.     elseif P == 1
  64.         X(w) = int(x(t).*exp(-1j*w*t), t, -T0, T0);
  65.         X(w) = limit(simplify(X(w), 'Step' , 2000), T0, inf);
  66.         Xabs(w) = abs(X(w));
  67.         Xarg(w) = atan(imag(X(w))/real(X(w)));
  68.     else
  69.         disp('FATAL ERROR: FTRANSF(x, T0, N, P) con P invalido');
  70.     end
  71. end
Advertisement
Comments
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment