Autor: Fernando Rafael Filipuzzi
E-mail: fernando_6867@yahoo.com.ar
Mi preferencia es siempre trabajar con software de código abierto, aprovechando que hay una versión de Matlab para Linux que funciona bastante bien y que tenía que hacer algo para la facultad dejo una solución que he creado para representar las deltas generadas en una expresión con el toolbox de matemática simbólica.
He construido una función que dibuja el espectro de magnitud y de fase de una señal aproximando cada delta con una función triangular.
Con el tiempo iré mejorando esta sección y veré como llevar esto a SCILAB.
%% % autor: filipuzzi, fernando rafael % revision: 20151108 % sitio web: hdcm.com.ar %% %% ej1: % lft( @(t) t+1, -1,1, 2, -3*2*pi/1, 3*2*pi/1, 0.01, 2) %% ej2: onda cuadrada % lft(1,-0.5,0.5,2,-8*pi,8*pi, 0.05, 4) % ---------------- ------- % | | | % ------------------ ------------------------------ % -T0/2 -T1 0 T2 T0/2 T0 % %% function [Xkw] = lft(f,T1,T2,T0,w1,w2,ancho, grosor) % T: periodo fundamental % N: cantidad de coeficientes syms t k w T; T = sym(T0); Ta = sym(T1); Tb = sym(T2); ak = simple( 1/T*int( f.*exp(i*k*2*pi/T*t), t, Ta, Tb) ); pretty(ak) % asignando valores N = sym(10); % vectores para guardar el orden y el valor del coeficiente aki = zeros(eval(N) +1,1); ki = zeros(eval(N) +1,1); ni=0; %cantidad distinto de cero orden=0; %orden de la armonica while ni<=eval(N) && orden<40, %asignando k un valor y evaluando ak con ese valor k=sym(orden); aki_eval=eval(ak); %salvando si da infinito if isnan(aki_eval) ff=eval(f.*exp(-i*k*2*pi/T*t)); aki_eval=simple( 1/T*int(ff, t, Ta, Tb) ); end; if abs(aki_eval)>0; %abs( double(real(aki_eval))+ i*double(imag(aki_eval)) )>0; %guarda el orden ki(ni + 1 ) = orden; % %guarda el valor del coeficiente en ese orden aki(ni + 1 )= aki_eval; % %imprime el valor sprintf('a%1$d=%2$s', orden, char( aki_eval )) sprintf('a%1$d=%2$s', -1*orden, char( conj(aki_eval))) % ni=ni+1; end; orden=orden+1; end %% creando una delta aproximada kkdelta=eval(2*pi/T * ancho); delta = @(w) (( (w)+kkdelta)/(kkdelta)).*(((0<=(-w)) & ( (-w)<kkdelta))) + (((-w)+kkdelta)/kkdelta).*(((0<=(w)) & ((w)<kkdelta))); clear ni; %% esamblando una expresión con las deltas aproximadas Xkw1=@(w) 0; w0=eval(2*pi/T); for ni=1:length(aki) if aki(1)==0 Xkw1=@(w) aki(1)*2*pi*delta(w); else Xkw1=@(w) Xkw1(w) + 2*pi*conj(aki( ni ))*delta(w + ki(ni)*w0 ) + 2*pi*aki( ni )*delta(w - ki(ni)*w0 ); end; end Xkw_mod=@(w) abs( Xkw1( w )); max_eval=2*pi*max( abs(aki) ); Xkw_arg=@(w) angle(Xkw1(w)); %% %% Visualizando los espectros de magnitud subplot(2,1,1); gXkw_mod=ezplot(Xkw_mod,[w1, w2, 0, max_eval]); set(gXkw_mod,'Color','blue','LineWidth', grosor); grid on; title( 'Espectro de módulo - |X(w)|'); xlabel( 'w' ); %% %% Visualizando los espectros de fase subplot(2,1,2); gXkw_arg=ezplot(Xkw_arg,[w1, w2]); set(gXkw_arg,'Color','blue','LineWidth', grosor); grid on; title( 'Espectro de fase - /__ X(w)'); xlabel( 'w' ); %% end
%% % autor: filipuzzi, fernando rafael % revision: 20151108 % sitio web: hdcm.com.ar %% %% señal onda cuadrada periodica T=2 clear all; close all; clc; % representando y dibujando para -3<t<3 syms t; x=@(t) (t>-0.5 & t<0.5); x=@(t) x(t+2) + x(t) + x(t-2); gx=ezplot(x,[-3,3]); set(gx,'Color','blue','LineWidth',1.5); grid on; title( 'x(t)'); xlabel( 't' ); set(gcf, 'name', 'CLICK SOBRE LA IMAGEN PARA CONTINUAR'); waitforbuttonpress; lft(1,-0.5,0.5,2,-8*pi,8*pi, 0.05, 4) input('Presionar Enter para continuar...'); %% señal onda rampa periodica T=2 clear all; close all; clc; % representando y dibujando para -3<t<3 syms k t; x=@(t) (t+1)*(t>-1 & t<1); x=@(t) x(t+2) + x(t) + x(t-2); gx=ezplot(x,[-3,3]) set(gx,'Color','blue','LineWidth',1.5); grid on; title( 'x(t)'); xlabel( 't' ); set(gcf, 'name', 'CLICK SOBRE LA IMAGEN PARA CONTINUAR'); waitforbuttonpress; lft( @(t) t+1, -1,1, 2, -3*2*pi/1, 3*2*pi/1, 0.1, 2) %input('Presionar Enter para continuar...');
Se puede correr este script entrando el siguiente comando:
run transformadas.m
Este script irá arrojando las siguientes gráficas, el avance hacia la siguiente se controla con un click sobre la imagen.