marcoshuck icon

Magnitud y fase (TC)

marcoshuck | PRO | 12/15/16 02:12:18 PM UTC | 0 ⭐ | 8015 👁️ | Never ⏰ | []
MatLab |

2.28 KB

|

None

|

0 👍

/

0 👎

%{ 
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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎