Informe Laboratorio No 1 DSP

30
LABORATORIO NÚMERO 1. (Software) Introducción general a Matlab – Generación de Scripts – Señales básicas Convolución – Interfaz Gráfica. María Juliana Ortiz, Manuel Fernando Ovalle, Junior Francisco Quijano. Universidad Surcolombiana Neiva, Colombia [email protected] [email protected] [email protected] IV. PROCEDIMIENTO. 1. Visualización de Señales Discretas 1.1 clear all n=-10:19; %Generación del vector de instantes seno=sin(n/2+10); % Generación de señal seno discreta stem(seno); % Realiza la grafica de la señal seno en tiempo discreto xlabel('Instantes n'); % Nombre al eje x del grafico. ylabel('Seno(n)'); % Nombre al eje y del grafico. 1.2 Funciones del script: Sin(x). Devuelve el seno del argumento “x” dado en radianes. Stem (). Función para graficar en tiempo discreto. 1.3 Ejecución del script y gráfica generada. En esta grafica podemos observar que el eje horizontal no está mostrando los valores del rango que especificamos, se esperaría que en nuestro caso empezara desde el valor de -10 y no desde cero. 1.4 Modificación del script. clear all n=-10:19; % Generación del vector de instantes seno= sin(n/2+10); % Generación de la señal seno discreta

Transcript of Informe Laboratorio No 1 DSP

Page 1: Informe Laboratorio No 1 DSP

LABORATORIO NÚMERO 1. (Software)Introducción general a Matlab – Generación de Scripts – Señales básicas Convolución – Interfaz Gráfica.

María Juliana Ortiz, Manuel Fernando Ovalle, Junior Francisco Quijano.

Universidad SurcolombianaNeiva, Colombia

[email protected]@[email protected]

IV. PROCEDIMIENTO.1. Visualización de Señales Discretas

1.1

clear all n=-10:19; %Generación del vector de instantes seno=sin(n/2+10); % Generación de señal seno discretastem(seno); % Realiza la grafica de la señal seno en tiempo discretoxlabel('Instantes n'); % Nombre al eje x del grafico.ylabel('Seno(n)'); % Nombre al eje y del grafico.

1.2 Funciones del script:Sin(x). Devuelve el seno del argumento “x” dado en radianes.Stem (). Función para graficar en tiempo discreto.

1.3 Ejecución del script y gráfica generada.

En esta grafica podemos observar que el eje horizontal no está mostrando los valores del rango que especificamos, se esperaría que en nuestro caso empezara desde el valor de -10 y no desde cero.

1.4

Modificación del script.

clear all n=-10:19; % Generación del vector de instantes seno= sin(n/2+10); % Generación de la señal seno discretastem(n,seno); % Realiza la grafica de la señal seno en tiempo discretoxlabel('Instantes n'); % Nombre al eje x del grafico.ylabel('Seno(n)'); % Nombre al eje y del grafico.

Resultado de modificación del código:

Page 2: Informe Laboratorio No 1 DSP

2. Ejecutando un Script.

2.1 % Ejemplo de script: Nombre de archivo: rang_mag--- Determina el rango deun cuadrado mágicoclear all;r= zeros(1,32); % Creamos un vector de ceros for n= 3:32r(n)= rank(magic(n)) ; % consigno en r el valor del numero de columnas o filas linealmente independientes end r % del cuadro mágico de orden n (mágico: al sumar los elementos de fila, columna o diagonal el resultado es el mismo) bar(r) % muestra los valores en r a través de barras verticales

2.2 Funcionamiento.El programa lo que realiza es consignar en r el valor del número de columnas o filas linealmente independientes del cuadro mágico de orden n (mágico: al sumar los elementos de fila, columna o diagonal el resultado es el mismo) muestra los valores en r a través de barras verticales.

2.3, 2.4Ejecución del script y gráfica generada.

Al analizar los valores obtenidos en el vector r se observa de una forma muy general que existe una relación de incremento de 2 unidades cada 2 posiciones empezando desde posición 3 hasta la posición 31 el cual coincide con la amplitud la cual es 31. El mismo incremento de 2 unidades también se presenta a partir de la posición 5 el cual tiene una amplitud de 5, hasta la posición 30 la cual tiene una amplitud de 17. Por último se observa que a partir de la posición 4 y cada 4 posiciones la amplitud se mantiene constante en el valor de 3. En pocas palabras es como si me estuviera representando la serie de Fourier y cada una posee una frecuencia fundamental y a medida que aumenta se van anexando componentes frecuenciales uno a uno y a su vez se van sumando pero dejando en común una fundamental.

2.5Comando whos>> whos Name Size Bytes Class Ans 1x32 256 double n 1x1 8 double r 1x32 256 double

1. Generación de Señales Discretas.

3.1 Señal Senoidal.

clear allm=50; % Cantidad de muestrasfrec=40; % frecuencia de la señal en Hz Tsample=3/frec; % periodo de muestreo en segundos

Page 3: Informe Laboratorio No 1 DSP

n=-(m-1)/2:(m-1)/2;% instantes de muestreonT=n*Tsample;y=sin(2*pi*frec*nT);plot(nT,y)title('Señal Discreta');xlabel('nT')ylabel('Magnitud')

Gráfica de resultado de la ejecución del programa (3.1).

3.2Con la función plot() no podemos ver la representación de la función discreta ya que plot() va a realizar la interpolación punto a punto y por ello nos muestra una gráfica continua, que no representa la gráfica deseada.

Para un Tsample = 0,2/frec.

Podemos observar fácilmente que la señal responde a la función seno comparándola con la primera figura que obtuvimos cuando el Tsample era igual 3/frec, con esto se puede comprobar que la frecuencia en una señal discreta cuando es entera no realiza una función periódica, en cambio cuando la frecuencia es racional la función si es periódica.

3.3 Usando la función Stem ()

clear allm=50; % Cantidad de muestrasfrec=40; % frecuencia de la señal en HzTsample=0.2/frec; % periodo de muestreo en segundosn=-(m-1)/2:(m-1)/2;% instantes de muestreonT=n*Tsample;y=sin(2*pi*frec*nT);stem(nT,y)title('Señal Discreta');xlabel('nT')ylabel('Magnitud')

Gráfica.

Page 4: Informe Laboratorio No 1 DSP

Con stem () si es posible observar la gráfica en tiempo discreto, pues solo muestra el valor de la función en el correspondiente valor de n.

3.4 Señal sinc.

% Calcula 2m+1 muestras dela funcion sin(2*pi*fl*t)/(pi*t)% para n=-m:m (es decir, centrado alrededor del origen).% fc: Frecuencia de corte[Hz] asociada aun filtro pasa bajo% : normalizada entre 0 y 1 respecto a la frecuencia de muestreo, por lo tanto la% : frecuencia maxima permitida es de fc=0.5 % x :salida, muestras de la funcion sincclear allm=50;fc=0.25;wc=fc*2*pi;n=(-m:m);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 señalfigure()stem(n,x);title(strcat('Generacion de la Señal sinc -- fc=',num2str(fc)));xlabel('Instantes n');ylabel('Señal Sinc');

Resultados.m = 50

m = 5

m = 150

Page 5: Informe Laboratorio No 1 DSP

Como podemos ver si se presentan cambios y estos se deben a que m corresponde al número de muestras, las cuales serán reflejadas en la gráfica de modo que aumenten o disminuyan los datos que representen la función, pero en cuanto a cambios funcionales es irrelevante el valor de m

3.5Al mantener m=50 y asignando los valores de fc= 0.1 y fc= 0.5, tenemos:

fc = 0.1

fc = 0.5

Es posible denotar que al aumentar el valor de fc se presentan cambios en cuanto a la forma de la señal, esto se debe a que ocurre una variación en el periodo fundamental de la misma.

Al asignar un valor de fc>0.5, se obtiene:

Aquí vemos una mal representación de la señal sinc y con ello se establece el criterio de nyquist fm>2fc.

3.6 Señal Escalón.function [n,s] = escalon(inter,A,k)% Escalon genera una señal escalon, de la cual puedo modificar su % Amplitud, Duracion, y Corrimiento en el eje de tiempo discreto% Uso: [n,y]= escalon(inter,A,k) % PARAMETROS DE ENTRADA DE LA FUNCIÓN % inter ;valor intervalo t discreto% A ;Amplitud

Page 6: Informe Laboratorio No 1 DSP

% k desplazamiento en el eje tiempo discreto% PARAMETROS DE RETORNO DE LA FUNCIÓN% n ; Vector del intervalo muestras para graficar% y ; Salida n = -inter:inter; %vector intervalo de tiemposs = zeros (length(n),1); %vector s, ceros tipo columnali=k; %limite inferior secuencia definidalf=inter; %limite superior secuencia definidasi = max(li-(-inter)+1,1); sf = min(length(n),lf-(-inter)+1);c=(sf-si);s(si:sf) = A.*ones(1+c,1); end

3.7Resultados.Intervalo de -10 a 10Amplitud de 2Corrimiento cero (0) [n,y] = escalon(10,2,0)stem(n,y)title('Señal Escalon A*u(n+k)') xlabel('n')ylabel('y[n]')

Intervalo de -50 a 50Amplitud de 5Corrimiento 10[n,y] = escalon(50,5,10)stem(n,y)title('Señal Escalon A*u(n+k)') xlabel('n')ylabel('y[n]')

Intervalo de -20 a 20Amplitud de 8Corrimiento -15 [n,y] = escalon(20,8,-15)stem(n,y)title('Señal Escalon A*u(n+k)') xlabel('n')ylabel('y[n]')

3.8 Señal RampaFunción para generación de la función rampa.

function [n,s] = frampa(inter,m,k,b,A)% frampa genera una señal rampa% Uso: [n,s]= frampa(inter,k,m,k,b,A)% inter ; valor intervalo t discreto% m (+-entero) pendiente% k (+-entero) desplazamiento en el eje tiempo discreto% b (+-real) desplazamiento en el eje de amplitud% A ; Amplitud% s señal de salida

Page 7: Informe Laboratorio No 1 DSP

n = -inter:inter; %vector intervalo de tiempos discretoss = zeros (length(n),1); %vector s, ceros tipo columnali=k; %límite inferior secuencia definidalf=inter; %limite superior secuencia definidasi = max(li-(-inter)+1,1);sf = min(length(n),lf-(-inter)+1);c= sf-si; s(si:sf) = A.*(m.*[0:c]+b); end

3.9 Resultados.

Intervalo de -10 a 10Amplitud de 1Corrimiento (0) eje tiempo discretoCorrimiento (0) eje amplitudPendiente de 1

[n,y]=frampa(10,1,0,0,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento 5 eje tiempo discretoCorrimiento (0) eje amplitudPendiente de 1[n,y]=frampa(10,1,5,0,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento -5 eje tiempo discretoCorrimiento (0) eje amplitudPendiente de 1[n,y]=frampa(10,1,-5,0,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento 0 eje tiempo discretoCorrimiento 5 eje amplitudPendiente de 1[n,y]=frampa(10,1,0,5,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Page 8: Informe Laboratorio No 1 DSP

Intervalo de -10 a 10Amplitud de 1Corrimiento 0 eje tiempo discretoCorrimiento -5 eje amplitudPendiente de 1[n,y]=frampa(10,1,0,-5,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento 5 eje tiempo discretoCorrimiento 5 eje amplitudPendiente de 1[n,y]=frampa(10,1,5,5,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento -5 eje tiempo discretoCorrimiento -5 eje amplitudPendiente de 1[n,y]=frampa(10,1,-5,-5,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 1Corrimiento 0 eje tiempo discretoCorrimiento 0 eje amplitudPendiente de -1[n,y]=frampa(10,-1,0,0,1);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Page 9: Informe Laboratorio No 1 DSP

3.10 Exponencial ( an para a real)Función fexpfunction [n,s] = fexp(inter,a,A,k)% fexp genera una señal exponencial: a ^ n para a real% Uso: [n,s] = fexp(inter,a,A,k)%inter (entero) valor intervalo t discreto% a (+-real) base, entrada escalar que da la razón entre términos% A (+-real) Escalamiento amplitud % k (+-entero) instante de inicio, desplazamiento en el eje t discreton = -inter:inter; %vector intervalo de tiemposs = zeros (length(n),1); %vector s, ceros tipo columnali=k; %limite inferior secuencia definidalf=inter;%limite superior secuencia definidasi = max(li-(-inter)+1,1); sf = min(length(n),lf-(-inter)+1);c= sf-si; s(si:sf) = A.*(a.^([0:c])); end

3.11 Resultados.

Intervalo de -10 a 10Amplitud de 1Corrimiento 0 eje tiempo discretoBase 0.5[n,y]=fexp(10,0.5,1,0);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 2Corrimiento 0 eje tiempo discretoBase 0.5[n,y]=fexp(10,0.5,2,2);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 2Corrimiento eje tiempo discretoBase 0.5[n,y]=fexp(10,0.5,2,-2);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Page 10: Informe Laboratorio No 1 DSP

Intervalo de -10 a 10Amplitud de 2Corrimiento 0 eje tiempo discretoBase -0.5[n,y]=fexp(10,-0.5,2,0);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

Intervalo de -10 a 10Amplitud de 5Corrimiento -6 eje tiempo discretoBase -0.5[n,y]=fexp(10,-0.5,5,-6);stem(n,y)title('Señal Rampa');xlabel('n'); ylabel('y[n]');

3.12 Señal exponencial [(a + j b)n base compleja]

Función

Function[n,s]= fexpcomp(interinf,intersup,a,b,A,k,E)% gexpc genera una señal exponencial compleja: (a+jb)^n base compleja% Uso: [n,s]= fexpcomp(inter,a,b,A,k)% interinf ; valor inferior intervalo t discreto% inntersup; valor inferior intervalo t discreto% a (+-real) parte real% b (+-real) parte imaginaria% A (+-real) Escalamiento amplitud% k (+-entero) instante de inicio, desplazamiento en el eje t discreto% E (+-real) (E>1 comprimo y 0<E<1 expando) escalamiento temporal n= -interinf:intersup; %vector intervalo de tiemposs = zeros (length(n),1); %vector s, ceros tipo columnali=k; %limite inferior secuencia definidalf=intersup;%límite superior secuencia definidasi = max(li-(-interinf)+1,1); sf = min(length(n),lf-(-interinf)+1);c= sf-si; s(si:sf) = A.*((a+j*b).^(E.*[0:c])); end

3.13 Resultados ejecución del programa

[n,s] = fexpcomp(0,15,1,1,1,0,1);figure()subplot(2,2,1); stem(n,real(s))

Page 11: Informe Laboratorio No 1 DSP

title('P real señal(a+jb)^n');xlabel('n'); ylabel('real[(a+jb)^n]');subplot(2,2,2); stem(n,imag(s))title('P imag señal(a+jb)^n ');xlabel('n'); ylabel('imag[(a+jb)^n]');subplot(2,2,3); stem(n,abs(s))title('magnitud señal(a+jb)^n');xlabel('n'); ylabel('abs[(a+jb)^n]');subplot(2,2,4); stem(n,angle(s))title('fase señal(a+jb)^n');xlabel('n'); ylabel('angle[(a+jb)^n]');

[n,s] = fexpcomp(-5,13,-5,1,1,-3,0.1);

[n,s] = fexpcomp(-5,13,5,10,2,0,0.1);

3.15 Señal impulsoFunción.function [n,s] = fimp(inter,A,k)% gimp genera una señal impuso% Uso: [n,s] = fimp(inter,k,a)% inter; valor intervalo t discreto% A (+-real) Escalamiento amplitud% k (+-entero) desplazamiento en el eje tiempo discreton = -inter:inter; %vector intervalo de tiemposs = zeros (length(n),1); %vector s, ceros tipo columnali=k;%límite inferior secuencia definidasi = max(li-(-inter)+1,1); % ubicación del impulsos(si) = A.*1; % secuencia deseada end

3.16 Resultados.[n,s] = fimp(10,1,0)stem(n,s) %plot discretotitle('Señal impulso');xlabel('n'); ylabel('y(n)');

Page 12: Informe Laboratorio No 1 DSP

[n,s] = fimp(10,2,5)stem(n,s) %plot discretotitle('Señal impulso');xlabel('n'); ylabel('y(n)');

[n,s] = fimp(10,3,-5)stem(n,s) %plot discretotitle('Señal impulso');xlabel('n'); ylabel('y(n)');

4. Interfaz Gráfica. Código Utilizado.function varargout = senales1(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @senales1_OpeningFcn, ...

'gui_OutputFcn', @senales1_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{:});endfunction senales1_OpeningFcn(hObject, eventdata, handles, varargin) axes(handles.axes4);imagen=imread('usco.png');imshow(imagen);image(imagen)axis offhandles.output = hObject; guidata(hObject, handles);% --- Executes on button press in calcular.function calcular_Callback(hObject, eventdata, handles)global n global y x yn yhglobal p impiSelected = get(handles.lista1,'Value'); switch iSelected case 1 set(handles.text9,'string','Frecuencia =') set(handles.text10,'string','Amplitud =') set(handles.text11,'string','Inicio =') m=str2num(get(handles.muestras1,'string')); frec=str2num(get(handles.edit2,'string')); A=str2num(get(handles.edit3,'string')); ini=str2num(get(handles.edit4,'string')); [n,yn,y,p,imp]=seno(m,frec,A,ini)

Page 13: Informe Laboratorio No 1 DSP

axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','g'); title('Señal Seno'); xlabel('nT') ylabel('Magnitud') case 2 set(handles.text9,'string','Frecuencia =') set(handles.text10,'string','Amplitud =') set(handles.text11,'string','Inicio =') m=str2num(get(handles.muestras1,'string')); fc=str2num(get(handles.edit2,'string')); A=str2num(get(handles.edit3,'string')); ini=str2num(get(handles.edit4,'string')); [yn,n,p,imp,y]=fsenc(m,fc,A) axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','b'); title(strcat('generacion de la señal sinc--fc=',num2str(fc))) xlabel('instantes n') ylabel('Magnitud') case 3 set(handles.text9,'string','Amplitud =') set(handles.text10,'string','Inicio =') set(handles.text11,'string','No se usa') m=str2num(get(handles.muestras1,'string')); A=str2num(get(handles.edit2,'string')); ini=str2num(get(handles.edit3,'string')); [y,yn,n,p,imp]=escalon(m,A,ini) axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','r'); title('señal Escalon') xlabel('instantes n') ylabel('Magnitud')

case 4 set(handles.text9,'string','Amplitud =') set(handles.text10,'string','Inicio =') set(handles.text11,'string','Pendiente') m=str2num(get(handles.muestras1,'string')); A=str2num(get(handles.edit2,'string')); ini=str2num(get(handles.edit3,'string')); pend=str2num(get(handles.edit4,'string')); [n,y,yn,p,imp]=rampa(m,A,ini,pend) axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','o'); title('señal Rampa') xlabel('instantes n') ylabel('Magnitud') case 5 set(handles.text9,'string','Base =') set(handles.text10,'string','Amplitud =') set(handles.text11,'string','Inicio =') m=str2num(get(handles.muestras1,'string')); base=str2num(get(handles.edit2,'string')); A=str2num(get(handles.edit3,'string')); ini=str2num(get(handles.edit4,'string')); [n,y,p,imp,yn]=exp_re(m,base,A,ini) axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','ro'); xlabel('k'); % rotulo para eje x ylabel('x(k)'); % rotulo para eje y title('POTENCIAL DISCRETA')

Page 14: Informe Laboratorio No 1 DSP

case 6 set(handles.text9,'string','No se usa') set(handles.text9,'string','No se usa') set(handles.text10,'string','Amplitud =') set(handles.text11,'string','Inicio =') m=str2num(get(handles.muestras1,'string')); A=str2num(get(handles.edit3,'string')); ini=str2num(get(handles.edit4,'string')); [n,y,yn,p,imp] = fimp(m,A,ini); axes(handles.axes1) handles.h=stem(n,y); set(handles.h,'Color','ro'); xlabel('k'); % rotulo para eje x ylabel('x(k)'); % rotulo para eje y title('IMPULSO') end% --- Executes when selected object is changed in uipanel1.function uipanel1_SelectionChangeFcn(hObject, eventdata, handles)global n global y xglobal p imp if hObject==handles.par axes(handles.axes3) handles.h=stem(n,p); set(handles.h,'Color','r'); title('COMPONENTE PAR DE LA SEÑAL') xlabel('N'); ylabel('AMPLITUD'); else axes(handles.axes3) handles.h=stem(n,imp); set(handles.h,'Color','r'); title('COMPONENTE IMPAR DE LA SEÑAL') xlabel('N'); ylabel('AMPLITUD'); end

% --- Executes on button press in reflexion.function reflexion_Callback(hObject, eventdata, handles)global n global y x yn yhglobal p imp% Hint: get(hObject,'Value') returns toggle state of reflexion axes(handles.axes3) handles.h=stem(-n,y); set(handles.h,'Color','g'); title('FUNCION INVERTIDA') xlabel('N'); ylabel('AMPLITUD'); % --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles) global n global y x yn yhglobal p imp iSelected2 = get(handles.lista2,'Value'); switch iSelected2 case 1 set(handles.text13,'string','Frecuencia =') set(handles.text14,'string','Amplitud =') set(handles.text15,'string','Inicio =') m=str2num(get(handles.muestras2,'string')); frec=str2num(get(handles.edit6,'string')); A=str2num(get(handles.edit7,'string')); ini=str2num(get(handles.edit8,'string')); [n,yh,y,p,imp]=seno(m,frec,A,ini); axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','g'); title('Señal Seno'); xlabel('nT') ylabel('Magnitud')

Page 15: Informe Laboratorio No 1 DSP

case 2 set(handles.text13,'string','Frecuencia =') set(handles.text14,'string','Amplitud =') set(handles.text15,'string','Inicio =') m=str2num(get(handles.muestras2,'string')); fc=str2num(get(handles.edit6,'string')); A=str2num(get(handles.edit7,'string')); ini=str2num(get(handles.edit8,'string')); [yh,n,p,imp,y]=fsenc(m,fc,A) axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','b'); title(strcat('generacion de la señal sinc--fc=',num2str(fc))) xlabel('instantes n') ylabel('Magnitud') case 3 set(handles.text13,'string','Amplitud =') set(handles.text14,'string','Inicio =') set(handles.text15,'string','No se usa') m=str2num(get(handles.muestras2,'string')); A=str2num(get(handles.edit6,'string')); ini=str2num(get(handles.edit7,'string')); [y,yh,n,p,imp]=escalon(m,A,ini) axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','r'); title('señal Escalon') xlabel('instantes n') ylabel('Magnitud') case 4 set(handles.text13,'string','Amplitud =') set(handles.text14,'string','Inicio =')

set(handles.text15,'string','Pendiente') m=str2num(get(handles.muestras2,'string')); A=str2num(get(handles.edit6,'string')); ini=str2num(get(handles.edit7,'string')); pend=str2num(get(handles.edit8,'string')); [n,y,yh,p,imp]=rampa(m,A,ini,pend); axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','o'); title('señal Rampa') xlabel('instantes n') ylabel('Magnitud') case 5 set(handles.text13,'string','Base =') set(handles.text14,'string','Amplitud =') set(handles.text15,'string','Inicio =') m=str2num(get(handles.muestras2,'string')); base=str2num(get(handles.edit6,'string')); A=str2num(get(handles.edit7,'string')); ini=str2num(get(handles.edit8,'string')); [n,y,p,imp,yh]=exp_re(m,base,A,ini) axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','ro'); xlabel('k'); % rotulo para eje x ylabel('x(k)'); % rotulo para eje y title('POTENCIAL DISCRETA') case 6 set(handles.text13,'string','No se usa') set(handles.text14,'string','Amplitud =')

Page 16: Informe Laboratorio No 1 DSP

set(handles.text15,'string','Inicio =') m=str2num(get(handles.muestras2,'string')); base=str2num(get(handles.edit6,'string')); A=str2num(get(handles.edit7,'string')); ini=str2num(get(handles.edit8,'string')); [n,y,yh,p,imp] = fimp(m,A,ini); axes(handles.axes2) handles.h=stem(n,y); set(handles.h,'Color','ro'); xlabel('k'); % rotulo para eje x ylabel('x(k)'); % rotulo para eje y title('IMPULSO') end% --- Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)global ynglobal yh m=length(yn);n=length(yh); if m>n yh(n+1:m)=0;else yn(m+1:n)=0;endY=(yn+yh);axes(handles.axes3)handles.h=stem(Y,'red','square');set(handles.h,'Color','ro');title('Resultado de Suma')% --- Executes on button press in pushbutton6.function pushbutton6_Callback(hObject, eventdata, handles)global ynglobal yh m=length(yn);n=length(yh); if m>n yh(n+1:m)=0;

else yn(m+1:n)=0;endY=(yn.*yh);axes(handles.axes3)handles.h=stem(Y,'red','square');set(handles.h,'Color','ro');title('Resultado de Multiplicar')

4.1 Resultados.Menú del Programa.

Programa Principal.

Créditos.

Page 17: Informe Laboratorio No 1 DSP

5. Convolución.

5.1 Función para hallar la Convolución entre dos señales discretas.

function [x,h,y,yno,nx,nh,k]=fconv_dis(x,h,xno,hno) % Funcion para calcular la convolucion de dos señales % x= Vector de muestras x=[x1 x2,...,xn]% h= Valores para el Vector de muestras h=[h1,h2,...,hn]% xno= Valor del instante cero en la secuencia x% hno= valor del instante cero en la secuencia h: ');% yno= Valor del instante cero en la secuencia de salida y% nx = Instnates para x% nh = Instnates para h% k = Instantes para y%long_x= length(x); % Longitud del Vector de muestras xlong_h= length(h); % Longitud del Vector de muestras h x1=[x,zeros(1,long_h)];% Para que los vectores x & h puedan ser operadosh1=[h,zeros(1,long_x)];% se hace que tengan la misma longitud. for i=1:long_x+long_h-1y(i)=0; for j=1:long_x if(i-j+1>0) y(i)=y(i)+x1(j)*h1(i-j+1); else end endend

y; yno=xno+hno;k=-yno:1:long_x+long_h-2-yno;% Instantes para ynx=-xno:1:long_x-1-xno;% Instantes existentes para x y hnh=-hno:1:long_h-1-hno;end

5.2 Si la respuesta impulsional de un sistema LTI está dada por h(n) y la señal de entrada por x(n), calcule la secuencia de salida y(n)=h(n)*x(n) del sistema mediante la utilización de él script conv_dis para las siguientes señales.

a) h (n )={1,3,1,2,1 }

x (n )={1+n , n=0,11−n , n=2,3}

b) h (n )={1,3,1,2,1 } x (n )= {1 , 2 ,−1,2 }

c) h (n )={1 ,2 ,−1,2 } x (n )= {1 , 2,3,2,1 }

d) h (n )={n+1 ,n=0,1,2n−1 , n=3

1 ,n=4 }

x (n )={|n|, n=−12 ,n=0

−2 , n=1,2} e) h (n )={1 ,2,3,2,1 } x (n )= {1,5 , 2 ,−2 ,−1 }

a) Entre x: [1 2 -1 -2]

Entre h: [1 2 3 2 1]

[x,h,y,yno,nx,nh,k]=fconv_dis([1 2 -1 -2],[1 2 3 2 1],0,0);subplot(3,1,1)stem(nx,x,'r')title('Muestras para x(n)'), xlabel('n'),

Page 18: Informe Laboratorio No 1 DSP

grid onsubplot(3,1,2)stem(nh,h,'g')title('Muestras para h(n)'), xlabel('n'),grid onsubplot(3,1,3)stem(k,y);grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

Vector convolución.

y =[ 1 4 6 4 -2 -6 -5 -2]

b. Entre x: [1 2 -1 -2]

Entre h: [1 2 3 2 1]

[x,h,y,yno,nx,nh,k]=fconv_dis([1 2 -1 -2],[1 2 3 2 1],1,2);

subplot(3,1,1)stem(nx,x,'r')title('Muestras para x(n)'), xlabel('n'),grid onsubplot(3,1,2)stem(nh,h,'g')title('Muestras para h(n)'), xlabel('n'),grid onsubplot(3,1,3)stem(k,y);grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

y =[ 1 4 6 4 -2 -6 -5 -2]

c. Entre x: [1 2 3 2 1]

Entre h: [1 2 -1 -2]

% Distintas Graficasclear allclc [x,h,y,yno,nx,nh,k]=fconv_dis([1 2 3 2 1],[1 2 -1 -2],1,2);subplot(3,1,1)stem(nx,x,'r')title('Muestras para x(n)'), xlabel('n'),grid onsubplot(3,1,2)stem(nh,h,'g')title('Muestras para h(n)'), xlabel('n'),grid onsubplot(3,1,3)stem(k,y);grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

y =[ 1 4 6 4 -2 -6 -5 -2]

Page 19: Informe Laboratorio No 1 DSP

d. Entre x: [1 2 -2 -2]

Entre h: [1 2 3 2 1]

[x,h,y,yno,nx,nh,k]=fconv_dis([1 2 -2 -2],[1 2 3 2 1],2,1);subplot(3,1,1)stem(nx,x,'r')title('Muestras para x(n)'), xlabel('n'),grid onsubplot(3,1,2)stem(nh,h,'g')title('Muestras para h(n)'), xlabel('n'),grid onsubplot(3,1,3)stem(k,y);grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

y=[1 4 5 2 -5 -8 -6 -2]

e) Entre x: [1 5 2 -2 -1]

Entre h: [1 2 3 2 1]

% Distintas Graficasclear allclc [x,h,y,yno,nx,nh,k]=fconv_dis([1 5 2 -2 -1], [1 2 3 2 1],3,1);subplot(3,1,1)stem(nx,x,'r')title('Muestras para x(n)'), xlabel('n'),grid onsubplot(3,1,2)stem(nh,h,'g')title('Muestras para h(n)'), xlabel('n'),grid onsubplot(3,1,3)stem(k,y);grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

y =[ 1 7 15 19 12 1 -5 -4 -1]

5.3 Compare las respuestas obtenidas para cada caso en el punto anterior. Observe en qué instante se presenta el mayor valor de la salida y(n). Explique claramente el resultado obtenido y confírmelo analíticamente.

De acuerdo a los resultados de cada una de las convoluciones realizadas anteriormente, podemos decir que el mayor valor de la salida y(n) se presenta cuando el 1er dato de x(n) coincide con el

Page 20: Informe Laboratorio No 1 DSP

último dato de h(n) y el último dato de x(n) coincide con el 1er dato de h(n).

5.4 Obtener la convolucion del sistema h(n)={1,2,3,2,1} ante una entrada seno con frecuencias frec = 1KHz, 10KHz, 50KHz y 100KHz; al fijar una frecuencia de muestreo de 300KHz para todos los casos. Se ajusta el numero de muestras m para que se puedan observar dos periodos de la señal.

clcm=60; % Cantidad de muestrasfrec=input('Ingrese el valor de la Frecuencia de la señal en Hertz: ');Tsample=1/300000; % Periodo de muestreo en segundos, Frec. muestreo=300KHzn=-(m-1)/2:(m-1)/2;% Cada uno de los Instantes de MuestreonT=n*Tsample;x=sin(2*pi*frec*nT); % Graficasubplot(2,1,1)% Señal de Entradastem(nT,x)title('Entrada');xlabel('nT')ylabel('Magnitud') disp('Convolucion entre dos señales (x & h)')h=input('Ingrese los Valores para el Vector de muestras h: ');disp('')xno=0;hno=0;long_x= length(x); % Longitud del Vector de muestras xlong_h= length(h); % Longitud del Vector de muestras hx1=[x,zeros(1,long_h)];% Para que los vectores x & h puedan ser operadosh1=[h,zeros(1,long_x)];% se hace que tengan la misma longitud. for i=1:long_x+long_h-1y(i)=0;for j=1:long_xif(i-j+1>0)y(i)=y(i)+x1(j)*h1(i-j+1);elseendendend

y;a=xno+hno;k=-a:1:long_x+long_h-2-a;% Instantes para y% Graficasubplot(2,1,2)% Señal de Salidastem(k,y,'g');grid onxlabel('n');title('Convolucion entre x(n) y h(n)');

Para frec=1000 Hz

Para frec=10 KHz

Page 21: Informe Laboratorio No 1 DSP

Para frec= 50 KHz

Para frec=100 KHz

5.5 Utilizando el comando conv ( ) de matlab.clear allclc tic;%x=input(' vector de muestras x: ');%h=input(' vector de muestras h: ');x= [1 2 -2 -2]h= [1 2 3 2 1]q=conv(x,h);t=length(x);y=length(h);%Creamos el vector de tiempon=0:t+y-2;toc;%Graficamos en tiempo discreto la convolucion respecto al vector de tiempo stem(n,q,'m');%encendemos la grillagrid onxlabel('n');title('Convolucion x(n)*h(n)');

a. Vector de muestras x: [1 2 -1 -2]Vector de muestras h: [1 2 3 2 1]

h(n)={1,2,3,2,1} x(n)={1,2,-1,-2}

d.

h(n){n+1 , n=0,1,2n−1 , n=3

1 , n=4

x (n){|n|, n=−12 , n=0

−2n=1,2

Entre x: [1 2 -2 -2]

Entre h: [1 2 3 2 1]

Page 22: Informe Laboratorio No 1 DSP

e) Entre x: [1 5 2 -2 -1]

Entre h: [1 2 3 2 1]

DIFERENCIAS ESTABLECIDAS ENTRE LA FUNCIÓN CONV ( ) Y EL ALGORITMO.

En el algoritmo debemos hacer una especificación para la posición de cero (0), mientras que matlab siempre toma esta posición al primer valor de la matriz.

El tiempo de ejecución por parte de la función conv ( ) = 0.001490 segundos y el tiempo del algoritmo es de 0.033970 segundos.

5.6 Prueba de la funciones conv() y deconv() de Matlab con las señales de 5.2 y los resultados de 5.5.

a.

Convolucion_Matlab = 1 4 6 8 6 6 3 2

h = 1 2 3 2 1

>> [x,r]=deconv(Convolucion_Matlab,h)

x = 1 2 -1 2

r = 0 0 0 0 0 0 0 0

b.

Convolucion_Matlab = 1 4 6 8 6 6 3 2

h = 1 2 3 2 1

>> [x,r]=deconv(Convolucion_Matlab,h)

x= 1 2 -1 2

r = 0 0 0 0 0 0 0 0

c.

Convolucion_Matlab = 1 4 6 8 6 6 3 2

h = 1 2 -1 -2

>> [x,r]=deconv(Convolucion_Matlab,h)

x = 1 2 3 2 1

r = 0 0 0 0 0 0 0 0

Page 23: Informe Laboratorio No 1 DSP

d.

Convolucion_Matlab = 1 4 5 2 -5 -8 -6 -2

h = 1 2 3 2 1

>> [x,r]=deconv(Convolucion_Matlab,h)

x= 1 2 -2 -2

r = 0 0 0 0 0 0 0 0

e.

Convolucion_Matlab = 1 7 15 19 12 1 -5 -4 -1

h = 1 2 3 2 1

>> [x,r]=deconv(Convolucion_Matlab,h)

x = 1 5 2 -2 -1

r = 0 0 0 0 0 0 0 0 0

Se podría obtener el instante n=0, Si se indica el instante cero de la secuencia de convlución. Este código es muy práctico, pues permite obtener la señal entrante a partir de una señal convolucionada.

6. Consulta

6.1 resumen artículo.

ECOGRAFÍA ACÚSTICA SUBSUPERFICIAL EN ARENAS SUELTAS A TRAVÉS DE

SENSORES NO ACOPLADOS

En este articulo se presentan alternativas más ágiles de prospección que utilicen el principio de propagación de ondas mecánicas elásticas – acústicas con sensores no acoplados como micrófonos y sensores de efecto Doppler (ultrasónicos, radio frecuencia y Láser). En este trabajo se presenta un sistema prototipo de laboratorio para la obtención de imágenes acústicas en arenas sueltas o ecografías acústicas,

Cada registro obtenido del sensado de la onda reflejada constituye una traza o señal. El procedimiento de emisión y recepción de los pulsos de onda, se repiten a lo largo de una línea de barrido obteniéndose una traza para cada posición (Scanning). Estos registros son

capturados por un conversor analógico – digital de alta velocidad y enviados en formato digital a una computadora personal. Mediante un programa computacional, es posible almacenar las trazas digitales y representarlas en la pantalla del computador de manera ordenada y secuencial. A esta matriz de trazas se conoce como ecografía sísmica.

Referencia bibliográfica http://www.dsp.efn.unc.edu.ar/documentos/a42_eco.pdf

6.2 base de datos de señales EEG tomadas de Physionet.

El EEG es la prueba de laboratorio más informativa en individuos con crisis epilépticas. Puede desempeñar un rol importante en el diagnostico de epilepsia, clasificación del tipo de epilepsia y síndrome epiléptico, determinando el área en el cerebro donde comienzan las crisis y en ciertas instancias, puede influenciar la

Page 24: Informe Laboratorio No 1 DSP

selección del tipo de medicamento anti-epiléptico.

El diagnostico de epilepsia usualmente se basa en la historia clínica. Debido a la naturaleza aleatoria y frecuentemente impredecible de las crisis epilépticas, el EEG es típicamente tomado entre convulsiones y las conclusiones se basan en los resultados arrojados por el EEG entre convulsiones. Si el área donde se inician las crisis epilépticas esta en lo profundo del cerebro, tal como en los lóbulos frontales o temporales, el EEG puede salir normal. Incluso, aun varias repeticiones el EEG pueden arrojar resultados normales en algunos pacientes con epilepsia. En contraste, patrones epileptiformes ocurren en aproximadamente 1 a 2 por ciento de pacientes que no tienen historia de crisis epilépticas. Parientes de individuos que tienen epilepsia pueden haber heredado patrones genéticos

electroencefalográficos (EEG) y no tener crisis epilépticas por lo tanto es importante que los resultados del EEG sean interpretados correctamente y correlacionados con la historia clínica del paciente.

La nomenclatura usa letras mayúsculas y subíndices numéricos. Los electrodos frontales, centrales, temporales, parietales y occipitales se reconocen con las letras: F, C, T, P y O respectivamente. El subíndice par indica el hemisferio derecho mientras que el impar el hemisferio izquierdo. Así por ejemplo; F3 se refiere al electrodo frontal izquierdo mientras que T4 al temporal derecho. Finalmente, los canales se identifican según los dos electrodos que lo alimentan. Un canal identificado con los electrodos Fp1 - F7 significa que en este canal se amplificará las señales provenientes del

la región frontopolar (Fp1) y frontal anterior (F7) del hemisferio izquierdo. La combinación de varios canales y sus respectivas fuentes conforma lo que se conoce como un montaje de registro.

Esta base de datos, recogidos en el Hospital Infantil de Boston, contiene grabaciones de EEG de pacientes pediátricos con convulsiones intratables. Los sujetos fueron monitorizados durante varios días después de la retirada de la medicación contra las convulsiones con el fin de caracterizar las crisis y evaluar su candidatura para la intervención quirúrgica. Las pruebas se realizaron en 22 sujetos (5 hombres, las edades 3-22, y 17 mujeres, con edades desde 1.5 hasta 19).

Todas las señales fueron muestreadas a 256 muestras por segundo con resolución de 16 bits. La mayoría de los archivos contienen 23 señales de EEG (24 o 26 en algunos casos). Se utilizó el sistema internacional de 10 a 20 posiciones de electrodos de EEG.

A continuación se muestra la imagen obtenida de la base de datos y la realizada en matlab, de un canal identificado con los electrodos Fp1 - F7 para un paciente femenino de 11 años, con convulsiones intratables.Frecuencia de muestreo: 256 Hz.Intervalo de muestreo: 0,00390625 segundo

GRÁFICAS.

Page 25: Informe Laboratorio No 1 DSP

Referencia bibliográfica

http://www.acnweb.org/guia/g7cap17.pdf

V. CONCLUSIONES

Se comprobó el concepto de frecuencia en señales discretas al realizar el ejercicio de la señal senoidal en el cual tomamos un valor de frecuencia entero y el resultado de la señal era no periódica

además que su amplitud no era la unidad tal como se esperaría; al cambiar la frecuencia a un número racional observamos que la señal se vuelve periódica y obtenemos una gráfica consistente.