Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- Análisis de Señales y Sistemas - TP Laboratorio Nº 3
- Función FTRANSF - Grupo 6
- Argumentos:
- - y: Señal de entrada
- - T0: Periodo elemtal
- - N: Cantidad de coeficientes a calcular (0 si es aperiódica)
- - P: Señal periódica (0) o aperiódica (1)
- Retorna:
- - Xabs: Magnitud de la señal
- - Xarg: Fase de la señal
- Repositorio disponible en: https://github.com/marcoshuck/matlab-tp3-asys
- Realizado por Huck Marcos A. y Castelluci Leandro E.
- %}
- function[Xabs, Xarg] = FTRANSF(x, T0, N, P)
- % Definición de variables
- syms t A w 'real';
- syms k 'integer';
- % Definición de w0
- w0 = sym(2*pi/T0);
- % Definición de alfa
- alfa=2*pi/T0/100;
- % Definición de la delta
- DIRAC(w)=(1/alfa)*(w + alfa)*(heaviside(w + alfa) - heaviside(w));
- DIRAC(w)=DIRAC(w) + (-1/alfa)*(w - alfa)*(heaviside(w)-heaviside(w-alfa));
- if P == 0
- % Integral para obtener la expresión general de los coeficientes de Fourier
- ak(k) = 1/T0 * int(x(t).*exp(-1j*w0*k*t), t, 0, T0);
- % Simplificación de ak(k)
- ak(k) = simplify(ak(k));
- % Descomposición de numerador y denominador
- [n, d] = numden(ak);
- k = 0;
- if isnan( eval(ak) );
- a=1/T0*int( x(t),t,0,T0);
- else
- a=ak(k);
- end
- Xabs(w)=abs(eval(2*pi*a)).*DIRAC(w);
- Xarg(w)=angle(eval(2*pi*a)).*DIRAC(w);
- for k=1:N
- if ((n(k) == 0) && (d(k) == 0))
- a = 1/T0 * int(x(t).*exp(-1j*w0*k*t), t, 0, T0);
- else
- a=ak(k);
- end
- Xabs(w) = Xabs(w) + abs(eval(conj(2*pi*a))).*DIRAC(w + eval(k*w0));
- Xabs(w) = Xabs(w) + abs(eval(2*pi*a)) .*DIRAC(w - eval(k*w0));
- Xarg(w) = Xarg(w) + angle(eval(conj(2*pi*a))).*DIRAC(w + eval(k*w0));
- Xarg(w) = Xarg(w) + angle(eval(2*pi*a)) .*DIRAC(w - eval(k*w0));
- end
- elseif P == 1
- X(w) = int(x(t).*exp(-1j*w*t), t, -T0, T0);
- X(w) = limit(simplify(X(w), 'Step' , 2000), T0, inf);
- Xabs(w) = abs(X(w));
- Xarg(w) = atan(imag(X(w))/real(X(w)));
- else
- disp('FATAL ERROR: FTRANSF(x, T0, N, P) con P invalido');
- end
- end
Advertisement