Está en la página 1de 32

PRACTICA N1.

INTRODUCCION GENERAL A MATLAB- GENERACION DE SCRIPTS- SEALES BASICAS - CONVOLUCION- INTERFAZ GRAFICA

JUAN DAVID ORTIZ ALAPE

COD. 2007268619

Presentado A: VLADIMIR MOSQUERA CERQUERA, Ms. C.

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERA INGENIERA ELECTRNICA NEIVA 2011

IV. PROCEDIMIENTO.
1. VISUALIZACIN DE SEALES DISCRETAS. La respuesta obtenida efectivamente corresponde a una seal senoidal en tiempo discreto de 30 muestras, pero los valores del eje x (instantes n) no son los que deberan ser, ya que, debera comenzar desde -10 hasta 19, todo esto fue debido a que al momento de utilizar la funcin stem solo colocamos una variable para graficar, por eso la variable correspondiente para el eje x es n, por lo tanto en la lnea de cdigo numero 4 debemos corregirlo as: stem(n,seno); 1.4. El programa modificado es:
clear all; n=-10:19; seno=sin(n/2 + 10); stem(n,seno); xlabel('instantes_n'); ylabel('seno(n)');

1.1. Cdigo provisto por las guas que nos permite generar y graficar una onda senoidal en tiempo discreto.
clear all; n=-10:19; seno=sin(n/2 + 10); stem(seno); xlabel('instantes_n'); ylabel('seno(n)');

1.2. Sin (var): Esta funcin nos permite determinar la funcin trigonomtrica Seno de un argumento determinado por el programador. Stem (var): Esta funcin nos grafica una seal determinada en forma de barras segn el argumento que se le haya proporcionado por el usuario, adems si el usuario no determina un tiempo de muestreo el programa lo hace por defecto. Xlabel Ylabel(cadena): Se utiliza para dar nombre a cada uno de los ejes de los grficos, debajo de ellos se coloca si es de dos dimensiones y al lado si es de tres. 1.3. Nuestra Seal obtenida ha sido la siguiente:

Y la respuesta corregida es:

2. EJECUTANDO UN SCRIPT. 2.1. Cdigo generado desde un script que determina el rango de un cuadrado mgico:
%Ejemplo de script:Nombre archivo: rang_mag --- Determina el rango de un cuadrado magico clear all; r=zeros(1,32); for n = 3:32; r(n)=rank(magic(n)); end r bar (r)

2.2.

A continuacin se describe el funcionamiento de nuestro programa por cada lnea: 1- Un comentario acerca de la funcin de nuestro cdigo y su nombre. 2- Limpiamos nuestro espacio de trabajo para no dar pie a cometer errores o variables indeseadas. 3Generamos una matriz denominada r de una fila y 32 columnas donde en cada espacio va a haber un cero. 4- Generamos un ciclo for que empieza desde un valor de n igual a 3 y que finaliza en 32. 5- Luego en nuestra matriz r anteriormente descrita ocupamos la posicin de cada columna segn corresponda al valor de n con el valor del rango de un cuadro mgico generado por el valor de n en dicho instante. 6- Finalizacin de nuestro ciclo despus de que el valor de n haya llegado a 32. 7- Regresa el valor de la matriz r con los nuevos valores que pertenecen al rango de cada cuadro mgico generado en el bucle. 8- Regresa un grfico de barras con los datos de la matriz r. Al analizar cada una de las funciones que tenemos en nuestro programa podemos decir que:

Rank: Es la cantidad de columnas o filas linealmente independientes de una matriz. Magic: Es una matriz cuadrada generada por un valor escalar que nos da las dimensiones, lo especial de esta matriz es que la suma de sus valores ya sea por fila, columna o diagonal siempre es la misma. Rank Magic: Existen tres casos en el algoritmo al sacar el rango de un cuadro mgico que depende del valor (n) que se le da a las dimensiones del cuadro mgico: 1- Que n sea impar entonces el rango de ese cuadro es n. 2- Que n sea divisible por 4 entonces el rango del cuadro es 3. 3- Que n sea par pero no divisible por 4 entonces el rango ser igual a (n/2)+2. Bar: Grfico de barras del argumento que se le establece. 2.3. Al ejecutar nuestro script en el command window obtenemos el siguiente resultado: >> rang_mag r= Columns 1 through 10 0 0 3 3 5 5 7 3 9 7 Columns 11 through 20 11 3 13 9 15 3 17 11 19 3 Columns 21 through 30 21 13 23 3 25 15 27 3 29 17 Columns 31 through 32 31 3

Las Barras presentan esa forma regular porque representan una funcin lineal independiente. 2.4. Si, coincide la respuesta ya que lo definido en el punto 2.2 es exactamente la respuesta esperada que se da en el punto 2.3. Con respecto a los valores que toma r(n) podemos decir que son los rangos o cantidades linealmente independientes de las filas o columnas de los cuadros mgicos determinados por las dimensiones que nos brinda el valor de n. Se verifico que las variables r y n estaban en nuestro espacio de trabajo asi:

3.2.

2.5.

La funcin plot no nos permite visualizar adecuadamente una seal seno discreta ya que si colocamos un nivel de k muy grande la repeticin de un semiciclo tomara mas tiempo y la toma de muestras se har para un tiempo mucho mas largo. Los resultados del plot para un Tsample=0.2/frec:

3. GENERACIN DISCRETAS. 3.1.

DE

SEALES

Programa para Visualizar una Seal Senoidal Discreta.


clear all; m=50; frec=40; Tsample=3/frec; n=-(m-1)/2:(m-1)/2; nT=n*Tsample; y=sin(2*pi*frec*nT); plot(nT,y) title('Seal Discreta') xlabel('nT') ylabel('Magnitud')

Aqu seguido obtenemos resultados en el plot:

los

3.3.

Procedemos a repetir los anteriores pasos pero invocando la funcin stem: Para Tsample=3/frec

Para Tsample=0.2/frec

%para n=-m:m (es decir, centrado alrededor del origen) %fc: Frecuencia de corte [Hz] asociado a un filtro pasa bajo % : normalizada entre 0 y 1 respecto a la frec. de muestreo, por lo tanto la % : frecuencia mxima permitida es fc=0.5 %x: salida, muestras de la funcin sinc. clear all; m=50; fc=0.25; wc=fc*2*pi; n=(-m:m); %2m+1 instantes de muestreo centrado alrededor de cero xn=sin(wc*n); xd=pi*n; x(1:m)=xn(1:m)./xd(1:m); x(m+1)=2*fc; x(m+2:2*m+1)=xn(m+2:2*m+1)./xd(m +2:2*m+1); % graficar senal figure; stem(n,x); title(strcat('Generacion de la Seal Sinc--fc=',num2str(fc))); xlabel('Instantes n'); ylabel('Seal Sinc'); Lo que obtenemos para m=50 en la Figura es:

3.4.

Visualizacin de una Seal Sinc. Parmetros funcionales de la Seal:

Programa en Matlab para visualizacin de una Seal Sinc: %Calcula funcin 2m+1 muestras de

la Para comprobar la relevancia de la variable m vamos a cambiar su valor por 5 y por 150, entonces

la

procedemos a realizarlo con nuestro programa en Matlab: Para m=5

3.5.

Ahora vamos a repetir 3.4. para m=50 pero variando nuestra fc para valores de 0.1 y 0.5, para poder comprobar su relevancia con nuestro programa en Matlab: Para fc=0.1

Para m=150: Para fc=0.5

Despus de haber hecho todas estas pruebas para la variable de m podemos concluir que se observan algunos cambios ya que si aumentamos el numero de muestras tomadas aumentamos la probabilidad de tener una mejor visualizacin de nuestra seal deseada, por lo tanto podemos decir que es relevante dependiendo de lo que se desee observar en el resultado, porque si deseamos un resultado muy detallado podemos ubicar el rango de muestras en un valor muy pequeo y viceversa si se desea lo contrario.

Para fc>0.5 en nuestro caso fc=0.8 y fc=1 respectivamente tenemos:

tamano=size(n); ceros=zeros(1,(tamano(1,2)-((DC)+1))); Salida=A*[ceros unos]; figure stem(n,Salida) xlabel('Instantes n') ylabel('Amplitud(Eng)') title('Seal Escalon')

3.7.

Ejemplos desarrollados por nuestro programa para visualizar la Seal Escaln. >> Escalon(5,4,10)

Podemos observar que la variacin en la frecuencia de corte afecta en gran medida a nuestros resultados ya que de por si estaramos afectando nuestro periodo fundamental en la seal determinada, por lo tanto podemos concluir que si presenta gran relevancia. Para cuando superamos el umbral de fc=0.5 podemos darnos cuenta que nuestros resultados son realmente afectados en la Seal Sinc, por lo que se puede deducir en un error al muestrear la seal debido al teorema de Nyquist que planteaba que una seal analgica puede ser reconstruida, sin error, de muestras tomadas en iguales intervalos de tiempo, cuando la razn de muestreo fuese igual, o mayor, al doble de su ancho de banda [Hz] de la seal analgica, fs=>2B; determinado por nuestra frecuencia de corte (fc). 3.6. Programa de nuestra Seal Escaln desarrollado en Matlab:
function Escalon(A,C,D) %Argumentos de Entrada: %A: Es la amplitud de la seal en unidades de ingeniera %C: Es el corrimiento de la seal escaln en muestras respecto a la muestra 0 (n=0) %D: Es la cantidad de muestras tanto positivas como negativas que estamos generando. n=-D:D; unos=ones(1,((D-C)+1));

>> Escalon(1,0,20)

>> Escalon(10,50,100) >> Rampa (2,3,10)

3.8.

Programa de nuestra Seal Rampa desarrollado en Matlab:


function Rampa(m,C,D) %Argumentos de Entrada %m=La pendeiente de la rampa. %C=Nivel de corrimiento de inicio de la rampa en muestras %a partir de (n=0) %D=Cantidad de muestras en la Seal. n=C:(D+C)-1; r=0:length(n)-1; rampa=m*r; figure stem(n,rampa) xlabel('Instantes n') ylabel('Amplitud') title('Seal Rampa')

>>Rampa (-10,20,50)

3.9.

Ejemplos desarrollados por nuestro programa para visualizar la Seal Rampa. >> Rampa (5,12,20)

3.10. Programa con el cual generamos nuestra seal exponencial de tipo a^n (a Real):
function ExpoBaseReal(a,C,D) %Argumentos de Entrada %a=Base Real del Programa %C=Desplazamiento de la Seal en el eje x. %D=Duracion de la Seal r=C:(D+C)-1; x=a.^r; figure stem(r,x) xlabel('r') ylabel('a^r') title('Seal Exponencial de Base Real')

3.11. Ejemplos de nuestro programa para generar seales de tipo exponecial con base Real: >> ExpoBaseReal(2,5,7)

3.12. A continuacin encontraremos el programa con el cual visualizaremos una seal de tipo exponencial con base compleja:
function ExpoBaseComp(C,X,D) %Argumentos de Entrada %C=Base Compleja del Programa %X=Instante de Inicio de la Seal en el eje x. %D=Duracion de la Seal r=X:(D+X)-1; M=abs(C) P=angle(C); P_Deg=180*P/pi z=C.^r; figure stem(r,z) xlabel('r') ylabel('(a+b*i)^r') title('Seal Exponencial de Base Compleja')

>>ExpoBaseReal(5,8,15)

3.13. Ejemplos de Seales Exponenciales Complejas con su respectiva magnitud y fase: >> ExpoBaseComp(2+3*i,-4,20) M= 3.6056 P_Deg = 56.3099

>> ExpoBaseReal(-3,3,5)

>>ExpoBaseComp(10+50*i,0,10) M= 50.9902 P_Deg = 78.6901

'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @senales_OpeningFcn, ... 'gui_OutputFcn', @senales_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end %Damos el Tamao de nuestro GUI function senales_OpeningFcn(hObject, eventdata, handles, varargin) scrsz=get(0,'ScreenSize'); pos_act=get(gcf,'Position'); xr=scrsz(3)-pos_act(3); xp=round(xr/2); yr=scrsz(4)-pos_act(4); yp=round(yr/2); set(gcf,'Position',[xp yp pos_act(3) pos_act(4)]); %Variables Globales de Nuestro GUI global a d a=1; d=0; handles.output = hObject; guidata(hObject, handles); %imagen que cargamos para nuestro GUI logo=imread('Usco.jpg'); Img=image(logo,'Parent',handles .axes1); set(handles.axes1,'Visible','of f'); % --- Outputs from this function are returned to the command line. function varargout = senales_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

>> ExpoBaseComp(1+1*i,5,25) M= 1.4142 P_Deg = 45

4.

Nuestro cdigo en GUIDE quedo de la siguiente forma:


function varargout = senales(varargin) %%Guide elaborado por Juan David Ortiz Alape%% gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ...

function BR_Callback(hObject, eventdata, handles) function BR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'),get(0,'defaultUicontrol BackgroundColor')) set(hObject,'BackgroundColor',' white'); end function DR_Callback(hObject, eventdata, handles) function DR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function CR_Callback(hObject, eventdata, handles) function CR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end %Boton por el cual graficamos nuestra expo con base real function pushbutton18_Callback(hObject, eventdata, handles) global q w u i a b= str2num(get(handles.BR,'string' )); D= str2num(get(handles.DR,'string' )); C= str2num(get(handles.CR,'String' )); switch a case 1 r=C:(D+C)-1; x=b.^r;

q=r; w=x; subplot(2,1,a,'Parent',handles. grafica) stem(q,w) xlabel('r') ylabel('a^r') title('Seal Exponencial de Base Real') a=2; case 2 r=C:(D+C)-1; x=b.^r; u=r; i=x; subplot(2,1,a,'Parent',handles. grafica) stem(u,i) xlabel('r') ylabel('a^r') title('Seal Exponencial de Base Real') set(handles.g,'Visible','off'); a=1; end function MR_Callback(hObject, eventdata, handles) function MR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function CoR_Callback(hObject, eventdata, handles) function CoR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function CoC_Callback(hObject, eventdata, handles)

function CoC_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function ComC_Callback(hObject, eventdata, handles) function ComC_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end %Boton con el cual graficamos nuestra seal de base compleja function pushbutton17_Callback(hObject, eventdata, handles) global q w a u i d r= str2num(get(handles.CoR,'string ')); inicio= str2num(get(handles.CC,'string' )); b = str2num(get(handles.CoC,'string ')); m= str2num(get(handles.ComC,'strin g')); inicio=inicio+d; switch a case 1 q=-m/2+inicio:m/2+inicio; w=(r+b*j).^q; subplot(2,2,a,'Parent',handles. grafica) stem(q,real(w)); title('Seal Exponencial base compleja Discreta (R)'); xlabel('n'); ylabel('Real'); subplot(2,2,a+1,'Parent',handle s.grafica) stem(q,imag(w));

title('Seal Exponencial compleja Discreta (R)'); xlabel('n'); ylabel('Imaginaria'); a=2; case 2 u=-m/2+inicio:m/2+inicio; i=(a+b*j).^u;

base

subplot(2,2,a+1,'Parent',handle s.grafica) stem(u,real(i)); title('Seal Exponencial base compleja Discreta (R)'); xlabel('n'); ylabel('Real'); subplot(2,2,a+2,'Parent',handle s.grafica) stem(u,imag(i)); title('Seal Exponencial base compleja Discreta (I)'); xlabel('n'); ylabel('Imaginaria'); set(handles.g,'Visible','off'); a=1; end function CC_Callback(hObject, eventdata, handles) function CC_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function edit42_Callback(hObject, eventdata, handles) function edit42_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end

function pushbutton16_Callback(hObject, eventdata, handles) global q w u i a m=str2num(get(handles.PR,'strin g')) D=str2num(get(handles.mR,'strin g')) C=str2num(get(handles.IR,'strin g')) switch a case 1 n=C:(D+C)-1; r=0:length(n)-1; rampa=m*r; q=n; w=rampa; subplot(2,1,a,'Parent',handles. grafica) stem(q,w) xlabel('Instantes n') ylabel('Amplitud') title('Seal Rampa') a=2; case 2 n=C:(D+C)-1; r=0:length(n)-1; rampa=m*r; u=n; i=rampa; subplot(2,1,a,'Parent',handles. grafica) stem(u,i) xlabel('Instantes n') ylabel('Amplitud') title('Seal Rampa') set(handles.g,'Visible','off'); a=1; end function PR_Callback(hObject, eventdata, handles) function PR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function mR_Callback(hObject, eventdata, handles) function mR_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function IR_Callback(hObject, eventdata, handles) function IR_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function pushbutton15_Callback(hObject, eventdata, handles) global q w u i a A=str2num(get(handles.AE,'strin g')); D=str2num(get(handles.mE,'strin g')); C=str2num(get(handles.IE,'strin g')); switch a case 1 n=-D:D; unos=ones(1,((D-C)+1)); tamano=size(n); ceros=zeros(1,(tamano(1,2)-((DC)+1))); Salida=A*[ceros unos]; w=Salida; q=n; subplot(2,1,a,'Parent',handles. grafica) stem(q,w) xlabel('Instantes n') ylabel('Amplitud(Eng)') title('Seal Escalon') a=2; case 2 n=-D:D; unos=ones(1,((D-C)+1)); tamano=size(n); ceros=zeros(1,(tamano(1,2)-((DC)+1))); Salida=A*[ceros unos]; i=Salida; u=n;

subplot(2,1,a,'Parent',handles. grafica) stem(u,i) xlabel('Instantes n') ylabel('Amplitud(Eng)') title('Seal Escalon') a=1; set(handles.g,'Visible','off'); end function AE_Callback(hObject, eventdata, handles) function AE_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function mE_Callback(hObject, eventdata, handles) function mE_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function IE_Callback(hObject, eventdata, handles) function IE_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function DI_Callback(hObject, eventdata, handles) function DI_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function pushbutton14_Callback(hObject, eventdata, handles) global q w d u i a d=0; A=str2num(get(handles.AI,'strin g')) D=str2num(get(handles.DI,'strin g')) C=str2num(get(handles.II,'strin g')) switch a case 1 C = C+d; delta=[zeros(1,D/2),A,zeros(1,D /2)]; q=-D/2+C:D/2+C; w=delta; subplot(2,1,a,'Parent',handles. grafica) stem(q,w); title('Seal Impulso Discreta'); xlabel('n'); ylabel('Seal 1'); a=2; case 2 C = C+d; delta=[zeros(1,D/2),A,zeros(1,D /2)]; u=-D/2+C:D/2+C; i=delta; subplot(2,1,a,'Parent',handles. grafica) stem(u,i); title('Seal Impulso Discreta'); xlabel('n'); ylabel('Seal 1'); set(handles.g,'Visible','off'); a=1; end function AI_Callback(hObject, eventdata, handles) function AI_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'),

get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function II_Callback(hObject, eventdata, handles) function II_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function fc_Callback(hObject, eventdata, handles) function fc_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function edit27_Callback(hObject, eventdata, handles) function edit27_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function pushbutton13_Callback(hObject, eventdata, handles) global q w u i a m1 = str2num(get(handles.mm,'string' ));

fc= str2num(get(handles.fc,'string' )); switch a case 1 wc=fc*2*pi; n1=(-m1:m1); xn=sin(wc*n1); xd=pi*n1; x(1:m1)=xn(1:m1)./xd(1:m1); x(m1+1)=2*fc; x(m1+2:2*m1+1)=xn(m1+2:2*m1+1). /xd(m1+2:2*m1+1); % graficar senal q=n1; w=x; subplot(2,1,a,'Parent',handles. grafica) stem(q,w); title(strcat('Generacion de la Seal Sinc--fc=',num2str(fc))); xlabel('Instantes n'); ylabel('Seal Sinc') a=2; case 2 wc=fc*2*pi; n1=(-m1:m1); %2m+1 instantes de muestreo centrado alrededor de cero xn=sin(wc*n1); xd=pi*n1; x(1:m1)=xn(1:m1)./xd(1:m1); x(m1+1)=2*fc; x(m1+2:2*m1+1)=xn(m1+2:2*m1+1). /xd(m1+2:2*m1+1); % graficar senal u=n1; i=x; subplot(2,1,a,'Parent',handles. grafica) stem(u,i); title(strcat('Generacion de la Seal Sinc--fc=',num2str(fc))); xlabel('Instantes n'); ylabel('Seal Sinc') set(handles.g,'Visible','off'); a=1; end function edit28_Callback(hObject, eventdata, handles) function edit28_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'),

get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function f_Callback(hObject, eventdata, handles) function f_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function mm_Callback(hObject, eventdata, handles) function mm_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function edit6_Callback(hObject, eventdata, handles) function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function pushbutton7_Callback(hObject, eventdata, handles) global q w u i a A = str2num(get(handles.A,'string') );

frec = str2num(get(handles.f,'string') ); m = str2num(get(handles.m,'string') ); switch a case 1 Tsample=3/frec; n=-(m-1)/2:(m-1)/2; nT=n*Tsample; y=A*sin(2*pi*frec*nT); q=nT; w=y; subplot(2,1,a,'Parent',handles. grafica) stem(q,w); title('Seal Seno Discreta'); xlabel('nT'); ylabel('Seal Seno'); a=2; case 2 Tsample=3/frec; n=-(m-1)/2:(m-1)/2; nT=n*Tsample; y=A*sin(2*pi*frec*nT); u=nT; i=y; subplot(2,1,a,'Parent',handles. grafica) stem(u,i); title('Seal Seno Discreta'); xlabel('nT'); ylabel('Seal Seno'); set(handles.g,'Visible','off'); a=1; end function edit7_Callback(hObject, eventdata, handles) function edit7_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function edit8_Callback(hObject, eventdata, handles)

function edit8_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function A_Callback(hObject, eventdata, handles) function A_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function pushbutton1_Callback(hObject, eventdata, handles) global q i; z=q*i; f=size(z); n=-f/2:f/2; subplot(2,1,1,'Parent',handles. grafica) stem(n,z); function pushbutton2_Callback(hObject, eventdata, handles) global q w u i aper; cw=aper*w; ci=aper*i; subplot(2,1,1,'Parent',handles. grafica) stem(q,cw); subplot(2,1,2,'Parent',handles. grafica) stem(u,ci); set(handles.g,'Visible','off'); function pushbutton3_Callback(hObject, eventdata, handles) global ind q w u i; q1=ind.*q; u1=ind.*u; subplot(2,1,1,'Parent',handles. grafica)

stem(q1,w); subplot(2,1,2,'Parent',handles. grafica) stem(u1,i); set(handles.g,'Visible','off'); function pushbutton4_Callback(hObject, eventdata, handles) function pushbutton5_Callback(hObject, eventdata, handles) global q w set(handles.g,'Visible','off'); subplot(2,1,2,'Parent',handles. grafica) stem(-q,w); title('Seal Reflexionada') function pushbutton6_Callback(hObject, eventdata, handles) global q w u i; wpar1=0.5*(w+fliplr(w)); wimpar1=0.5*(w-fliplr(w)); ipar2=0.5*(i+fliplr(i)); iimpar2=0.5*(i-fliplr(i)); subplot(2,2,1,'Parent',handles. grafica) stem(q,wpar1); title('Componente Par Seal1'); subplot(2,2,2,'Parent',handles. grafica) stem(q,wimpar1); title('Componente Impar Seal1'); subplot(2,2,3,'Parent',handles. grafica) stem(u,ipar2); title('Componente Par Seal2'); subplot(2,2,4,'Parent',handles. grafica) stem(u,iimpar2); title('Componente Impar Seal2'); function edit1_Callback(hObject, eventdata, handles) d=str2num(get(handles.edit1,'st ring')); function edit1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor'))

set(hObject,'BackgroundColor',' white'); end function edit2_Callback(hObject, eventdata, handles) global aper; aper=str2num(get(handles.edit2, 'string')); function edit2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function edit3_Callback(hObject, eventdata, handles) global ind; ind=str2num(get(handles.edit3,' string')); function edit3_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end function sen_Callback(hObject, eventdata, handles) function ocultar(handles) set(handles.sen,'Visible','off' ); set(handles.sinc,'Visible','off '); set(handles.impulso,'Visible',' off'); set(handles.escalon,'Visible',' off'); set(handles.rampa,'Visible','of f'); set(handles.exporeal,'Visible', 'off'); set(handles.expocom,'Visible',' off');

function popupmenu1_Callback(hObject, eventdata, handles) fun=get(handles.popupmenu1,'Val ue'); pos=get(handles.sen,'Position') ; switch fun case 1 case 2 ocultar(handles) set(handles.sen,'Visible','on', 'Position',pos); case 3 ocultar(handles) set(handles.sinc,'Visible','on' ,'Position',pos); case 4 ocultar(handles) set(handles.impulso,'Visible',' on','Position',pos); case 5 ocultar(handles) set(handles.escalon,'Visible',' on','Position',pos); case 6 ocultar(handles) set(handles.rampa,'Visible','on ','Position',pos); case 7 ocultar(handles) set(handles.exporeal,'Visible', 'on','Position',pos); case 8 ocultar(handles) set(handles.expocom,'Visible',' on','Position',pos); end guidata(hObject,handles) function popupmenu1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'Background Color'), get(0,'defaultUicontrolBackgrou ndColor')) set(hObject,'BackgroundColor',' white'); end

5. 5.1.

Convolucin: Programa desarrollado para dar solucin a la operacin entre Seales denominada Convolucin:
%Argumentos de Entrada: %x=Seal de Entrada al Sistema. %h=Seal por la cual haremos nuestro proceso de Convolucin. %xn0,hn0=Instantes 0 de nuestras 2 secuencias. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Tamao de nuestras Seales de Entrada. p=length(x); q=length(h); %Igualamos el tamao de las Seales para que no haya inconvenientes con Matlab. x1=[x zeros(1,q)]; h1=[h zeros(1,p)]; %Ciclo for por el cual realizamos nuestro proceso de Convolucin for i=1:p+q-1 y(i)=0; for j=1:p if (i-j+1>0) y(i)=y(i)+x1(j)*h1(i-j+1); end end end %Nuestra Seal de Salida o Convolucin y %Instante 0 de nuestra Seal de Salida a=xn0+hn0; %Indica la posicin de nuestro instante 0 en el vector resultante. yn0=[a] %Duracin de Nuestras Seales de Entrada y Salida n=-a:p+q-2-a; nx=-xn0:1:p-1-xn0; nh=-hn0:1:q-1-hn0; %Visualizacin de nuestras Seales de Entrada y Salida subplot(2,2,1) stem(nx,x,'b') title('Seal de Entrada'), xlabel('nx'), ylabel('x(nx)') grid on subplot(2,2,2) stem(nh,h,'r')

title('Seal de Proceso'), xlabel('nh'), ylabel('h(nh)') grid on subplot(2,2,[3 4]) stem(n,y,'g'); grid on xlabel('n'); ylabel('y(n)') title('Convolucin');

La Longitud de nuestro vector resultante ser igual a la suma de las longitudes de nuestros vectores de entrada menos uno, porque al tomar la operacin de Convolucin esta se har desde el instante final e inicial de las dos seales respectivamente y al ir desplazando una seal sobre la otra va a tomar el tamao sumado de las dos menos uno. 5.2. Para calcular y visualizar las diferentes secuencias de Salida para nuestros literales hemos utilizado nuestro script asi: >> conv_dis ([1 2 -1 -2],[1 2 3 2 1],0,0) y= 1 yn0 = 0

a.

-2

-6

-5

-2

b.

>> conv_dis ([1 2 -1 -2],[1 2 3 2 1],1,0) y= 1 yn0 = 1 4 6 4 -2 -6 -5 -2

yn0 = 1

e.

>> conv_dis ([1.5 2 -2 -1],[1 2 3 2 1],1,0) y= 1.5 5 6.5 4 -2.5 -5 -4 -1

c.

>> conv_dis ([1 2 3 2 1],[1 2 -1 -2],0,1) y= 1 yn0 = 1 4 6 4 -2 -6 -5 -2

yn0 = 1

5.3.

d.

conv_dis ([1 2 -2 -2],[1 2 3 2 1],1,0) y= 1 4 5 2 -5 -8 -6 -2

Se puede observar que los literales a, b y c son las mismas seales muestreadas solo cambiando la posicin del 0 y en algunas cambiando algn parmetro de entrada de la seal como en los literales d y e; el valor mximo de y(n) se produce en y (1) en casi todos los literales excepto el a. Procedemos a realizar la comprobacin terica solo del literal a

ya que nos sirve como ejemplo para los dems por lo que utiliza los mismos pasos para su resolucin en cualquier caso: Reflexin de h(k) que es la respuesta al impulso de h(n): h(-k)=[1 2 3 2 1] Desplazamiento: h(-k)=[1 2 3 2 1] h(1-k)=[1 2 3 2 1] h(2-k)= [1 2 3 2 1] h(3-k)= [1 2 3 2 1] h(4-k)= [1 2 3 2 1] h(5-k)=[0 1 2 3 2 1] h(6-k)=[0 0 1 2 3 2 1] h(7-k)=[0 0 0 1 2 3 2 1] Donde n es un entero que determina el nivel de desplazamiento y que tiene un tamao igual a la longitud de seal de entrada ms la del sistema menos uno. Multiplicacin: Este paso lo realizamos multiplicando la entrada del sistema como respuesta al impulso x(k) al sistema desplazado y h(-k), variando k a medida que la longitud del vector desplazado varia al superponerse sobre el vector que permanece sin cambios: a. x(k)=[1 2 -1 -2] y h(-k)=[1 2 3 2 1] Para k=- hasta m(lon. h(-k) desp.) - 1 x(k)*h(-k)=(1) x(k)*h(1-k)=(2,2) x(k)*h(2-k)=(-1,4,3) x(k)*h(3-k)=(-2,-2,6,2) x(k)*h(4-k)= (-4,-3,4,1) x(k)*h(5-k)=(-6,-2,2) -

x(k)*h(6-k)=(-4,-1) x(k)*h(7-k)=(-2) Como podemos observar el nmero de respuestas a cada desplazamiento de k es equivalente a m-1. Suma: Procedemos a sumar las respuestas de cada desplazamiento, generndonos una nueva seal en trminos de n: y[0]=1 y[1]=2+2=4 y[2]=-1+4+3=6 y[3]=-2-2+6+2=4 y[4]=-4-3+4+1=-2 y[5]=-6-2+2=-6 y[6]=-4-1=-5 y[7]=-1 Por lo tanto: y[n]=[1 4 6 4 -2 -6 -5 -2], y como podemos ver es la misma respuesta que la de nuestro script(conv_dis) y por lo tanto si se hace como es debido con los dems ejercicios de los otros literales tiene que dar exactamente lo mismo. Y todo queda expresin: [ ] resumido a la

a. a.

[ ]

5.4.

En este punto realizaremos la Convolucin entre la seal Seno calculada en 3.1. y h(n) de los literales a y c de 5.2.; para ello modificamos un poco el programa as:

function conv_dis_sen(h,xn0,hn0) %Seal de Entrada que representa el Seno Discreto m=600; frec=1000; Tsample=1/300000; n=-(m-1)/2:(m-1)/2; nT=n*Tsample; x=sin(2*pi*frec*nT); %Cdigo para hacer la Convolucin entre la seal de entrada y el sistema LTI p=length(x); q=length(h); x1=[x zeros(1,q)]; h1=[h zeros(1,p)]; for i=1:p+q-1 y(i)=0; for j=1:p if (i-j+1>0) y(i)=y(i)+x1(j)*h1(i-j+1); end end end a=xn0+hn0; k=-a:p+q-2-a; nx=-xn0:1:p-1-xn0; nh=-hn0:1:q-1-hn0; %Visualizacin de nuestras Seales de Entrada y Salida subplot(2,2,1) stem(nx,x,'b') title('Seal de Entrada'), xlabel('nx'), ylabel('x(nx)') grid on subplot(2,2,2) stem(nh,h,'r') title('Seal de Proceso'), xlabel('nh'), ylabel('h(nh)') grid on subplot(2,2,[3 4]) stem(k,y,'g'); grid on xlabel('k'); ylabel('y(n)') title('Convolucin')

frec=10Khz y m=57

frec=50Khz y m=9

a.

En este literal utilizaremos un h(n)= [1 2 3 2 1] y una seal de entrada con * frec=1Khz y m=600:

frec=100Khz y m=9

frec=50Khz y m=48

c. En este literal utilizaremos un h = [1 2 -1 -2] y una seal de entrada as: frec=1Khz y m=300

frec=100Khz y m=18

frec=10Khz y m=58 5.5.

La funcin que cumple h(n) es que nos permite predecir la salida de cualquier sistema linear e invariante en el tiempo conociendo nuestra seal de entrada con respecto al impulso (h(n)). A continuacin repetiremos los ptos del 5.2. al 5.4. con la funcin conv() de Matlab, todo esta consignado en el siguiente script:
function func_conv(x,h,xn0,hn0) %Argumentos de Entrada %x=Seal de Entrada al Sistema %h=Seal del Sistema LTI %xn0,hn0= Posicin de los instantes 0 de las Seales de Entrada y de Sistema %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Funcin de Conv Matlab y=conv(x,h);

a=length(x); b=length(h); d=xn0+hn0+1; k=-d+2:a+b-d; nx=-xn0+1:a-xn0; nh=-hn0+1:b-hn0; %Visualizacin de las Seales de Entrada y Salida subplot(2,2,1) stem(nx,x,'b') title('Seal de Entrada'), xlabel('nx'), ylabel('x(nx)') grid on subplot(2,2,2) stem(nh,h,'r') title('Seal de Proceso'), xlabel('nh'), ylabel('h(nh)') grid on subplot(2,2,[3 4]) stem(k,y,'g'); grid on xlabel('k'); ylabel('y(n)') title('Convolucin');

c.

>> func_conv([1 2 3 2 1],[1 2 -1 -2]) y= 1 4 6 4 -2 -6 -5 -2

Repitiendo el pto 5.2. con la funcin conv() tenemos: a. >>func_conv([1 2 -1 -2],[1 2 3 2 1]) y= 1 4 6 4 -2 -6 -5 -2

d.

>> func_conv([1 2 -2 -2],[1 2 3 2 1]) y= 1 4 5 2 -5 -8 -6 -2

b.

>>func_conv([1 2 -1 -2],[1 2 3 2 1]) y= 1 4 6 4 -2 -6 -5 -2

e.

>>func_conv([1.5 2 -2 -1],[1 2 3 2 1]) y= 1.5 5 6.5 4 -2.5 -5 -4 -1

Para frec=10Khz

Ahora procedemos a repetir el pto 5.4. para los literales a y c de 5.2., con el siguiente script utilizando la funcin conv():
function func_conv2(h) %Argumentos de Entrada %h=Seal del Sistema LTI %%%%%%%%%%%%%%%%%%%%%%%%%% %Seal de Entrada de Seno Discreto m=600; frec=1000; Tsample=1/300000; z=-(m-1)/2:(m-1)/2; nT=z*Tsample; x=sin(2*pi*frec*nT); %Funcin de Conv Matlab y=conv(x,h); a=length(x); b=length(h); n=0:a+b-2; %Visualizacin de la Convolucin stem(n,y,'r'); grid on xlabel('n'); ylabel('y(n)') title('Convolucion');

Para frec=50Khz

a.

Para frec= 1Khz

Para frec=100Khz

c. Para frec=1Khz

Para frec=100Khz

Para frec=10Khz

Al utilizar el cdigo conv() en matlab observamos que la respuesta es la adecuada pero no nos especifica el instante en que la seal se hace 0, que esta determinado por los instantes de 0 de las seales a convolucionar por lo que es un problema si se desea un resultado completo. Ahora para observar cual de nuestros programas (func_conv y conv_dis) es ms rpido para realizar la operacin de Convolucin: >> func_conv_tic ([1 2 -1 -2],[1 2 3 2 1]) y= 1 4 6 4 -2 -6 -5 -2 Elapsed time is 0.000538 seconds. >> conv_dis_tic

Para frec=50Khz

([1 2 -1 -2],[1 2 3 2 1],1,1) y= 1 4 6 4 -2 -6 -5 -2 Elapsed time is 0.000853 seconds. Lo que podemos destacar de esta prueba es que que la funcin conv() demora mucho menos tiempo que cuando utilizamos el sript conv_dis() esto lo relacionamos con que el script se demora mas ubicando los ceros, sea que al ser ms exacto y completo en su respuesta abarca ms tiempo de ejecucin. 6. 5.6. Ahora probaremos la funcin deconv de matlab para las seales del pto 5.2., aqu tenemos nuestro programa:
function decon(y,h) [x r]=deconv(y,h)

1.5 r= 0 0

-2 -1 0 0 0 0 0 0

Para hallar el instante 0 de la salida de la funcin deconv deberemos generar un script donde podamos anexar los instantes 0 de los argumentos utilizados, para despus mediante la formula despejada x0=y0-h0 encontrar el 0 de la seal de entrada.

Consulta: Se selecciono un paper aplicado a las comunicaciones por medio de una imagen con mensaje escondido en otras palabras aplicando la esteganografia:

6.1.

a.

b.

>> decon ([1 4 6 4 -2 -6 -5 -2],[1 2 3 2 1]) x= 1 r= 0 c. 0 0 0 0 0 0 0 2 -1 -2

Esteganografia en una imagen digital en el dominio DCT.


La historia a travs de los aos ha proporcionado innumerables situaciones en las cuales la informacin ha tenido que atravesar un territorio hostil para alcanzar su destino, por lo cual se han usado muchos mtodos ingeniosos para ocultar la informacin entre los que destaca la esteganografia; que es un arte antiguo que consiste en ocultar informacin. Las tecnologas digitales nos dan nuevas maneras para aplicar las tcnicas esteganogrficas, incluyendo uno de los ms intrigantes que es el ocultamiento de informacin en imgenes digitales. En la actualidad la comunicacin por Internet se ha convertido en parte integral de la infraestructura del mundo contemporneo. La informacin llega en numerosas formas y es usada en muchas aplicaciones. En la mayora de las aplicaciones es deseable que la comunicacin se realice en secreto, tal es el caso de las comunicaciones

>> decon ([1 4 6 4 -2 -6 -5 -2],[1 2 -1 -2]) x= 1 r= 0 0 0 0 0 0 0 0 2 3 2 1

d.

>> decon ([1 4 5 2 -5 -8 -6 -2],[1 2 3 2 1]) x= 1 r= 0 0 0 0 0 0 0 0 2 -2 -2

e.

>> decon ([1.5 5 6.5 4 -2.5 -5 -4 -1],[1 2 3 2 1]) x=

corporativas y cargos a tarjetas de crdito. Durante los ltimos aos los medios electrnicos han alcanzado un desarrollo importante lo que ha ocasionado un uso intensivo de los mismos, hecho que ha provocado una mayor vulnerabilidad de la seguridad de la informacin; ya que la mayor parte de estos medios son del uso pblico. Por tal motivo los mecanismos de seguridad de la informacin han cobrado mucha importancia encontrndose entre los ms comunes la criptografa y la esteganografia. [1-3]. La esteganografia es el arte de ocultar informacin de tal manera que se prevenga la deteccin del mensaje oculto. La palabra esteganografia se deriva del griego "steganos" (encubierto) y "grafos" (escrito) lo que traducido significa "escritura encubierta" y se refiere al arte o tcnica que permite ocultar mensajes secretos en imgenes, audio o video para encubrir la informacin y prevenir la deteccin del mensaje oculto por usuarios no autorizados [45]. La criptografa, por su parte, es la tecnologa que permite cifrar un mensaje secreto de tal forma que sea ilegible a terceras personas; mientras que la esteganografia trata de ocultar el mensaje, de tal manera que se desconozca la propia existencia de este, para evitar sospecha alguna de que datos secretos hayan sido ocultados [1]. As la esteganografia no intenta reemplazar a la criptografa pero si complementarla ya que ocultando un mensaje utilizando la esteganografia reduce la probabilidad de que el mensaje sea detectado, sin embargo, si este mensaje tambin es cifrado le provee otra capa de proteccin. Existen diferentes mtodos que permiten ocultar informacin en imgenes digitales. El mtodo LSB (Least Significant Bit) es quiz el ms simple y sencillo de utilizar. Este, en la mayora de los casos, proporciona

una alta capacidad de insercin y una baja perceptibilidad, sin embargo, es vulnerable a ligeras modificaciones de la imagen como la compresin y a la extraccin de la informacin por personas no autorizadas. [4,6]. Otros mtodos ms robustos para ocultar informacin en imgenes hacen uso del dominio de la transformada ya sea la DFT (Discrete Fourier Transform), la transformada DCT (Discrete Cosine Transform) o la transformada DWT (Discrete Wavelet Transform) para transformar una imagen en el dominio espacial al dominio espectral y as ocultar el mensaje secreto en reas significativas de la imagen. En general, los mtodos en el dominio espacial tienden a proporcionar mayor capacidad de insercin que los mtodos en el dominio de la frecuencia, sin embargo los mtodos en el dominio de la frecuencia son ms robustos contra ataques, tales como compresin, recorte o algn otro procesamiento de imagen [4, 6, 7]. Este artculo presenta dos algoritmos esteganogrficos basados en el mtodo QIM (Quantization Index Modulation) propuesto por [8], los cuales usan una imagen digital como encubridora de datos y realizan la cuantizacin de coeficientes a travs de la DCT para poder insertar el archivo secreto en los bits menos significativos de la cuantizacin de los coeficientes DCT. Los dos algoritmos recuperan el mensaje oculto con un mnimo de bits errneos, aun cuando la imagen encubridora sufra la compresin JPEG con factor de calidad 50. En este artculo se presentan dos algoritmos de ocultamiento de datos, el primer mtodo, llamado Entropy Thresholding (ET) es el mtodo basado en un umbral de entropa que selecciona bloques de coeficientes de DCT que pueda ocultar el mensaje secreto, dependiendo de su entropa o energa comparando con un valor

de umbral determinado anteriormente. El segundo esquema, llamado Selectively Embedding in Coefficients (SEC) selecciona los coeficientes individualmente dependiendo de su energa para poder insertar el mensaje en una manera imperceptible. Ambos algoritmos usan un criterio local para seleccionar conjuntos de coeficientes dentro de las bandas de baja y mediana frecuencia. Los dos algoritmos se comparan desde el punto de vista de imperceptibilidad y robustez del mensaje oculto y la capacidad mxima de bits que permiten ocultar. En ambos mtodos el mensaje secreto se inserta en el dominio de DCT, pudiendo el mensaje oculto ser extrado perfectamente desde la stegoimagen an despus de realizar una compresin JPEG. Adems de la robustez a la compresin, la distorsin causada por el ocultamiento de datos es mnima, ya que el PSNR de la stegoimagen respecto a la imagen encubridora es mayor que 45 dB.

chnique s for St eganogr aphy and Digital Watermarking", Artech Housea, 2001. [6] R. Chandramouli and Nasier Memon, "Analysis of LSB Based Image Steganography Techniques", Proceedings of the International Conference on Image Processing, pp. 1019-1022, 2001. [7] Neil F. Johnson and Sushil Jajodia, "Steganalysis: The Investigation of Hidden Information", IEEE Conf. on Information Technology, pp. 113-116, 1998. [8] K. Solanki, N. Jacobsen, U. Madhow, B. Manjunath and S. Chandrasekaran, "Robust ImageAdaptive Data Hiding Using Erasure and Error Correction", IEEE Transactions on Image Processing, vol. 13, no. 12, pp. 1627-1639, 2004. [9] S. Torres, M. Nakano and H. Prez, "An Image Steganography Systems Based on BPCS and IWT", Wseas Trans. on Communications, vol. 5, no. 6, pp. 814-820, 2006. 6.2. a. Se escogi la base de datos ECG. b. A continuacin encontramos la documentacin: Apnea ECG Database (apnea-ecg) Descripcin de Datos:
Record apnea-ecg/a01 Starting time: not specified Length: 8:12:50.000 (2957000 sample intervals) Sampling frequency: 100 Hz 1 signal Group 0, Signal 0: File: a01.dat Description: ECG Gain: 200 adu/mV Initial value: -12 Storage format: 16 I/O: can be unbuffered ADC resolution: 12 bits ADC zero: 0 Baseline: 0 Checksum: 5827 N 11

Referencias Bibliogrficas.
[1] R. J. Anderson and A. P. Petitcolas, "On the limits of steganography", IEEE Journal on Selected Areas in Communications, vol. 16, no. 4, pp. 474481, May 1998. [2] F. Petitcolas, R. Anderson, and M. Kuhn, "InformationHiding:A Survey", Proc. of the IEEE, vol. 87, no. 7, pp. 10621078, Jul. 1999. [3] D. Artz, "Digital Steganography:hiding data within dataV, IEEE Internet Computing, vol. 5, no. 3, pp. 75-80, 2001. [4] F. Johnson and S. Jajodia, "Exploring steganography: Seeing the unseen", IEEE Computer Mag., vol. 31, no.2, pp. 2634, 1998. [5] Katzenbeisser S., Fabien, A.P. Petitcolas, "Information Hiding Te

Both signals clean episode 0:10

Both signals clean episode 0:10

Plot de la Seal:

Plot de la Seal:

Plot en Matlab:

Plot en Matlab:

Taquicardia Arrtmica Ventricular (CU Ventricular Tachyarrhythmia Database) Descripcin de Datos


Record cudb/cu01 Starting time: not specified Length: 8:28.928 (127232 sample intervals) Sampling frequency: 250 Hz 1 signal Group 0, Signal 0: File: cu01.dat Description: ECG Gain: 400 adu/mV Initial value: -109 Storage format: 212 I/O: can be unbuffered ADC resolution: 12 bits ADC zero: 0 Baseline: 0 Checksum: -28468 N 10

7. 7.2. Creacin de Helps para los Usuarios: Para crear help hay diferentes formas una seria darle en el icono del interrogante donde sale un cuadro con toda la informacin de matlab ah se escribe la funcin a consultar. Por ejemplo:

La segunda otra forma es en la ventana de comando de Windows escribir help y la funcin a consultar. Por ejemplo:

Y por ultimo la ayuda ms importante, esto se consigue de la siguiente forma: las primeras lneas de comentarios de cada fichero de funcin son muy importantes, pues permiten construir un help sobre esa funcin. En otras palabras, cuando se teclea en la ventana de comandos de MATLAB: >> help mi_func El programa responde escribiendo las primeras lneas del fichero mi_func.m que comienzan por el carcter (%), es decir, que son comentarios. De estas lneas, tiene una importancia particular la primera lnea de comentarios (llamada en ocasiones lnea H1). En ella hay que intentar poner la informacin ms relevante sobre esa funcin. La razn es que existe una funcin, llamada lookfor que busca una determinada palabra en cada primera lnea de comentario de todas las funciones *.m. 7.3. Esta es la forma como Matlab identifica los directorios donde se encuentran las funciones de los usuarios. MATLAB permite que los usuarios creen una ayuda general para todas las funciones que estn en un

determinado directorio. Para ello se debe crear en dicho directorio un fichero llamado contents.m. A continuacin se muestra un fichero tpico contents.m correspondiente al directorio toolbox\local de MATLAB: % Preferences. % Saved preferences files. % startup - User startup M-file. % finish - User finish M-file. % matlabrc - Master startup M-file. % pathdef - Search path defaults. % docopt - Web browser defaults. % printopt - Printer defaults. % % Preference commands. % cedit - Set command line editor keys. % terminal - Set graphics terminal type. % % Configuration information. % hostid - MATLAB server host identification number. % license - License number. % version - MATLAB version number. % Utilities. %userpath - User environment path. % Copyright 1984-2002 The MathWorks, Inc. % $Revision: 1.14 $ $Date: 2002/06/07 21:45:05 $ Comprubese que la informacin anterior es exactamente la que se imprime con el comando >> help local Si el fichero contents.m no existe, se listan las primeras lneas de comentarios (lneas H1) de todas las funciones que haya en ese directorio. Para que el Help de directorios funcione correctamente hace falta que ese directorio est en el search path de MATLAB o que sea el directorio actual.

V. CONCLUSIONES. Observamos notablemente las diferencias de diferentes funciones en matlab; Por ejemplo la diferencias entre plot() y stem() que una se utiliza ms que todo para tiempo continuo y la otra para graficar muestras. Consideramos que aprendimos suficientemente bien el generar, visualizar y analizar diferentes seales en tiempo discreto utilizadas con frecuencia en el Procesamiento Digital de Seales. Comprendimos que al realizar un cdigo de una funcin de matlab nosotros podemos modificarle cosas para volver ms precisa la respuesta y/o modificar cualquier parte a nuestro parecer, pero ello conlleva a que este cdigo de la funcin se demore ms tiempo ejecutndose que la funcin que existe en matlab Aprendimos la utilizacin del GUIDE con programacin dirigida a objetos y pues es de ms esttica para los programas, lo cual lo hace una herramienta muy importante para la programacin en matlab. Mediante la Convolucin es posible calcular la seal de un sistema, pero es utilizado mas generalmente para la identificacin de sistemas LTI donde solo se conoce la entrada y la salida; Y se logro aprender a implementarlo en matlab con un script realizado por nosotros mismos y con la funcin establecida en matlab conv().

También podría gustarte