Professional Documents
Culture Documents
1 Introduccin General a Matlab - Generacin de Scripts - Seales Bsicas Convolucin Stephany Florez Meneses cd.: 2420052005 Miguel Alonso Castro cd.: 2420061014
1.1 La representacin grfica de seales discretas se realiza generalmente con la funcin stem() de Matlab. El siguiente conjunto de instrucciones permite generar y graficar una onda senoidal en tiempo discreto de 30 muestras.
clear all; n=-10:19; %generacin del vector de instantes seno = sin(n/2 + 10); %generacin de la seal seno discreta stem (seno); % generacion seal en tiempo discreto xlabel ( 'instantes n' ); ylabel ( ' seno (n) ' );
1.2 Analice las instrucciones y determine la funcin de los principales comandos. Utilice el help para obtener mayor informacin.
1.3 Ejecute desde la lnea de comandos de Matlab las instrucciones dadas en *1.1. Analice la respuesta obtenida. Verifique si la numeracin del eje horizontal corresponde con los valores de la seal seno.
El programa ejecutado se observa que el eje horizontal no muestra el rango de -10 a 19, empieza desde 0. Ejecucin programa n= Columns 1 through 9 -10 -9 -8 -7 -6 -5 -4 -3 -2 Columns 10 through 18 -1 0 1 2 3 4 5 6 7
Columns 19 through 27 8 9 10 11 12 13 14 15 16
Columns 28 through 30 17 18 19
>> seno seno = Columns 1 through 5 -0.9589 -0.7055 -0.2794 0.2151 0.6570 Columns 6 through 10 0.9380 0.9894 0.7985 0.4121 -0.0752 Columns 11 through 15 -0.5440 -0.8797 -1.0000 -0.8755 -0.5366 Columns 16 through 20 -0.0663 0.4202 0.8038 0.9906 0.9349 Columns 21 through 25 0.6503 0.2065 -0.2879 -0.7118 -0.9614 Columns 26 through 30 -0.9756 -0.7510 -0.3425 0.1499 0.6055
1.4 Modifique el programa dado en *1.1. para corregir el problema detectado en el numeral anterior. Consigne los resultados.
>> clear all >> n=-10:19; >> seno=sin(n/2+10); >> stem(n,seno); >> xlabel ('Instantes n'); >> ylabel ('Seno(n)');
1 seno vs. n 0.8 0.6 0.4 0.2 Seno(n) 0 30 -0.2 -0.4 -0.6 10 -0.8 -1 -10 20 40 60
50
-5
5 Instantes n
10
15
20
-1
Columns 19 through 27 8 9 10 11 12 13 14 15 16
Columns 28 through 30 17 18 19 >> seno seno = Columns 1 through 5 -0.9589 -0.7055 -0.2794 0.2151 0.6570 Columns 6 through 10 0.9380 0.9894 0.7985 0.4121 -0.0752 Columns 11 through 15 -0.5440 -0.8797 -1.0000 -0.8755 -0.5366 Columns 16 through 20 -0.0663 0.4202 0.8038 0.9906 0.9349 Columns 21 through 25 0.6503 0.2065 -0.2879 -0.7118 -0.9614 Columns 26 through 30 -0.9756 -0.7510 -0.3425 0.1499 0.6055
2 EJECUTANDO UN SCRIPT.
2.1 % Ejemplo de script: Nombre de archivo:rang_mag--- Determina el rango de un cuadrado mgico
2.2 DESCRIPCION DE LAS FUNCIONES. zeros = crea un vector de ceros Rank= la funcin rango proporciona una estimacin del numero de filas linealmente independientes o columnas de una matriz completa Bar= grafico de barras que muestra valores vectores o matrices en forma vertical u horizontal. Magic= M = magic (n) devuelve una matriz n-por-n construido a partir de los enteros del 1 al n ^ 2 con la fila y la igualdad de sumas de las columnas. FUNCIONAMIENTO DEL PROGRAMA El programa pone en r los valores independientes de filas linealmente independientes en un cuadro mgico que tiene orden n (lo que hace es sumar los elementos de la fila columna diagonal) y luego muestra r a travs de un grafico de barras verticales.
Ejecucin programa
r= Columns 1 through 9 0 0 3 3 5 5 7 3 9
Columns 10 through 18 7 11 3 13 9 15 3 17 11
Columns 19 through 27 19 3 21 13 23 3 25 15 27
Columns 28 through 32 3 29 17 31 3
2.3 Bar= grafico de barras que muestra valores vectores o matrices en forma vertical y barh grafica de barras en forma horizontal.
35
30
25
20
15
10
10
15
20
25
30
35
El vector r incrementa 2unidades (desde x=5 con amplitud 5 hasta x=31 amplitud 31) cada dos posiciones des 3 hasta 31, tambin se observa que en x=3 y x=4 su amplitud es 3 pasando lo mismo cada 4 posiciones. Parece que estuviera representando armnicos con sus respectivos productos intermodulados.
2.4 r(n)= incrementa el vector r 2 unidades cada dos posiciones desde 2 hasta 32. 2.5 Comando Whos
>> whos Name Size n r 1x1 1x32
Attributes
Grafica
8 x 10
-14
Seal Discreta
m a gn itu d
-2
-4
-6
-8 -2
-1.5
-1
-0.5
0 nT
0.5
1.5
Workspace
3.2 Plot= esta seal representa la grafica punto a punto (x,y) Esta funcin no representa la seal discreta para representar la seal discreta se toma la funcin stem
Clear all m=50; % Cantidad de muestras frec=40; % frecuencia de la seal en Hz Tsample=0.2/frec; % periodo de muestreo en segundos 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') % instantes demuestreo
Grafica
Seal Discreta 1
0.8
0.6
0.4
0.2 M a g nitu d
-0.2
-0.4
-0.6
-0.8
-1 -0.2
-0.15
-0.1
-0.05 nT
0.05
0.1
0.15
Esta grafica representa una seal senosiodal , en funciones enteras la seal no es peridica, en vez de las seales con fraccionarios o racionales la seal si es peridica.
clear all m=50; % Cantidad de muestras frec=40; % frecuencia de la seal en Hz Tsample=0.2/frec; % periodo de muestreo en segundos n=-(m-1)/2:(m-1)/2; nT=n*Tsample; y=sin(2*pi*frec*nT); stem (nT,y) title('Seal Discreta'); xlabel('nT') ylabel('Magnitud') % instantes demuestreo
Grafica
Seal Discreta 1
0.8
0.6
0.4
0.2 M a gn itu d
-0.2
-0.4
-0.6
-0.8
-1 -0.2
-0.15
-0.1
-0.05 nT
0.05
0.1
0.15
Esta grafica mustrala representacin en tiempo discreto con la funcin stem ya que en ella aparecen solo los valores de n.
Grafica
Grafica
Grafica
RAMPA DISCRETA 25 20 15 10 x(k) 5 0 -5 -10 -15 -20
-15
-10
-5
0 k
10
15
20
% intervalos min y max % amplitud %dezplazamiento % funcin rampa para x % define xmax xmin ymax ymin) %seal discreta
Grafica
Grafica
clear all; A=-0.5; n=[-15:15]; nc=5; F= A.^(n-nc); stem(n,F,'m'); title('Exponencial'); xlabel('instantes n'); ylabel('Magnitud');
Grafica
4 CONVOLUCION.
4.1 Utilizando ejemplo de clase se tomo la siguiente Convolucion: X(n)= [1,2,3,1] H(n)=[1,2,1,-1] 1 2 1 -1 1 2 3 1 1 2 1 -1 2 4 2 3 6 + 1 1 4 8 8 Script
clear all; %utilizando ejemplo de clase nx=4; %numero x nh=4; %numero h x1=1; x2=2; x3=3; x4=1; n1=[0 1 2 3]; x=[x1 x2 x3 x4]; h1=1; h2=2; h3=1; h4=-1; n2=[0 1 2 3]; h=[h1 h2 h3 h4]; % t1=h1*x1; t2=h1*x2; t3=h1*x3; t4=h1*x4; %multiplicacin de x*h t5=h2*x1; t6=h2*x2; t7=h2*x3; t8=h2*x4; t9=h3*x1; t10=h3*x2; t11=h3*x3; t12=h3*x4; t13=h4*x1; t14=h4*x2; t15=h4*x3; t16=h4*x4; % s1=t1; s2=t2+t5; s3=t3+t6+t9; s4=t4+t7+t10+t13; s5=t8+t11+t14; %suma s6=t12+t15; s7=t16; % S=[s1 s2 s3 s4 s5 s6 s7]; %matriz suma y=S longitudy=(nx+nh)-1 n=[0 1 2 3 4 5 6]; % subplot(3,1,1) stem(n,y,'b'); title('y(n)=x(n)*h(n)'); xlabel('muestras'); ylabel('y(n)'); subplot(3,1,2) stem(n1,x,'k'); xlabel('muestras'); ylabel('h(n)'); subplot(3,1,3) stem(n2,h,'m'); xlabel('muestras'); ylabel('x(n)');
-2 3 -3 2 1 -1 3 -2 -1
Grafica
longitudy = 7 >> tic >> toc Elapsed time is 2.158669 seconds. >>
-12 0 0 12 6 24 0 6 24
clear all; %utilizando ejemplo de clase nx=4; %numero x nh=6; %numero h x1=5; x2=-3; x3=0; x4=6; n1=[0 1 2 3]; x=[x1 x2 x3 x4]; h1=-2; h2=4; h3=3; h4=2; h5=1; h6=4; n2=[0 1 2 3 4 5]; h=[h1 h2 h3 h4 h5 h6]; % t1=h1*x1; t2=h1*x2; t3=h1*x3; t4=h1*x4; %multiplicacin de x*h t5=h2*x1; t6=h2*x2; t7=h2*x3; t8=h2*x4; t9=h3*x1; t10=h3*x2; t11=h3*x3; t12=h3*x4; t13=h4*x1; t14=h4*x2; t15=h4*x3; t16=h4*x4; t17=h5*x1; t18=h5*x2; t19=h5*x3; t20=h5*x4; t21=h6*x1; t22=h6*x2; t23=h6*x3; t24=h6*x4; % s1=t1; s2=t2+t5; s3=t3+t6+t9; s4=t4+t10+t13; s5=t8+t11+t14+t17; %suma s6=t12+t15+t18+t21; s7=t16+t19+t22; s8=t20+t23; s9=t24; % S=[s1 s2 s3 s4 s5 s6 s7 s8 s9]; %matriz suma y=S longitudy=(nx+nh)-1 n=[0 1 2 3 4 5 6 7 8]; % subplot(3,1,1) stem(n,y,'m'); title('y(n)=x(n)*h(n)'); xlabel('muestras'); ylabel('y(n)'); subplot(3,1,2) stem(n1,x,'b'); xlabel('muestras'); ylabel('h(n)'); subplot(3,1,3) stem(n2,h,'r'); xlabel('muestras'); ylabel('x(n)');
Grafica
1 -3 0 5 4 12 5 8 12 14 16 5 -15 0 25 20 60 8 -24 0 40 32 96 12 -36 0 60 -48 144 14 -42 0 70 56 168 + 16 -48 0 80 64 192 5 7 12 3 34 104 214 280 232 192
Script
clear all; %convolucion nx=4; %numero x nh=4; %numero h x1=5; x2=8; x3=12; x4=14;x5=16; n1=[0 1 2 3 4]; x=[x1 x2 x3 x4 x5]; h1=1; h2=-3; h3=0; h4=5; h5=4; h6=12; n2=[0 1 2 3 4 5]; h=[h1 h2 h3 h4 h5 h6]; % t1=h1*x1; t2=h1*x2; t3=h1*x3; t4=h1*x4; t5=h1*x5; %multiplicacin de x*h t6=h2*x1; t7=h2*x2; t8=h2*x3; t9=h2*x4; t10=h2*x5; t11=h3*x1; t12=h3*x2; t13=h3*x3; t14=h3*x4; t15=h3*x5; t16=h4*x1; t17=h4*x2; t18=h4*x3; t19=h4*x4; t20=h4*x5; t21=h5*x1; t22=h5*x2; t23=h5*x3; t24=h5*x4; t25=h5*x5; t26=h6*x1; t27=h6*x2; t28=h6*x3; t29=h6*x4; t30=h6*x5; % s1=t1; s2=t2+t6; s3=t3+t7+t11; s4=t4+t8+t12+t16; s5=t5+t9+t13+t17+t21; %suma s6=t10+t14+t18+t22+t26; s7=t15+t19+t23+t27; s8=t20+t24+t28; s9=t25+t29; s10=t30; % S=[s1 s2 s3 s4 s5 s6 s7 s8 s9 s10]; %matriz suma y=S longitudy=(nx+nh)-1 n=[0 1 2 3 4 5 6 7 8 9]; % subplot(3,1,1) stem(n,y,'b'); title('y(n)=x(n)*h(n)'); xlabel('muestras'); ylabel('y(n)'); subplot(3,1,2) stem(n1,x,'k'); xlabel('muestras'); ylabel('x(n)'); subplot(3,1,3) stem(n2,h,'m'); xlabel('muestras'); ylabel('h(n)');
Grafica
20 x (n )
10
0.5
1.5
2 muestras
2.5
3.5
20 10 h (n ) 0
-10
0.5
1.5
2.5 muestras
3.5
4.5
longitudy = 7 >> tic >> toc Elapsed time is 1.760051 seconds. >>
Grafica
Empleando commando tic y toc >> tic >> toc Elapsed time is 1.894789 seconds.
[q,r]=deconv(x,h)donde:
Q es el cociente de la divisin de los dos polinomios R es el residuo divisin de los dos polinomios (residuo) X entrada a deconvolucionar h respuesta impulsional. Esta funcin permite atenuar el registro de las seales, por ello permite restaurar una imagen borrosa. Script()
clear all; nx=4; %numero x nh=4; %numero h x=[1 2 3 1]; n1=[0 1 2 3]; h=[1 2 1 -1]; n2=[0 1 2 3 ]; % [q,r]=deconv(x,h); % longitudy=(nx+nh)-1 % subplot(3,1,1) stem([q,r],'M'); title('[q,r]=x(n)/h(n)'); xlabel('muestras'); ylabel('y(n)'); subplot(3,1,2) stem(n1,x,'B'); xlabel('muestras'); ylabel('x(n)'); subplot(3,1,3) stem(n2,h,'R'); xlabel('muestras'); ylabel('h(n)');
Grafica
El instante n=0 en la secuencia de salida arrojada por la funcin deconv() se podra establecer de la siguiente forma: ( cuando el vector Q tiene elemento nulo, de lo contrario no servira. [q,r]=deconv(x,h); % x= entrada h=respuesta impulsional n=[0 1 2 3 n] % subplot(3,1,1) stem(n,R,'r'); title('[Q,R]=x(n)/h(n)'); de esta manera se podra corregir el instante=0.
Conclusiones
El programa MATLAB es una herramienta til para el diseo de algoritmos, generar seales etc. Puesto que es un lenguaje de alto nivel el cual facilita el diseo de algoritmos debido al gran nmero de comandos que este contiene. Se comprob el concepto de frecuencia en seales discretas, al realizar el ejercicio de la seal senoidal en el cual se toma el valor del periodos de seal entere, el resultado de la seal era no peridica adems que su amplitud no era la unidad tal; al cambiar el periodo a un nmero racional se observo que la seal se vuelve peridica y se obtiene una grfica consistente.
Al emplear los comandos tic y toc se observo que el tiempo de ejecucin es menor en las funciones de matlab que con un algoritmo diseado para realizar el mismo calculo.