%{
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
Comments
0 B
|👍
/👎
0 B
|👍
/👎