laboratorio1 de diniz

11
Procesamiento Digital de Señales Laboratorio1 Señales y sistemas discretos en Matlab Edison Ramiro Segovia Vega Escuela Politécnica del Ejército Departamento de Eléctrica y Electrónica Quito 10/09/2013 Palabras Claves.- Señal discreta, señal continua, muestreo, ecuación de diferencias, respuesta al impulso, Matlab. I. INTRODUCCION Aunque el nombre de Matlab significa laboratorio de matrices, Matlab puede utilizarse como una herramienta muy poderosa para todo tipo de cálculos y visualizaciones científicas, de ingeniería y otros campos. También es posible considerarlo como otro lenguaje de programación para el desarrollo de funciones avanzadas a partir de las utilidades estándares de Matlab. Estas características han hecho de Matlab una herramienta efectiva para la educación y la investigación. En nuestra primera practica usaremos la herramienta de Matlab, para representar en forma de matrices los datos encontrados en el estudio de señales y sistemas, debido a esto las señales discretas son representadas en forma perfecta mediante vectores, no así las señales continuas que en Matlab son tan solo aproximaciones para ello se deberá escoger adecuadamente el intervalo de muestreo para así lograr una aproximación más exacta. II. FUNDAMENTOS TEORICOS 2.1. Señales continuas y señales discretas Como ya sabemos existen dos tipos de señales dependiendo de la naturaleza de la variable independiente (tiempo): señales de tiempo continuo y señales de tiempo discreto. En una señal de tiempo continuo x (t), La variable tiempo es una variable continua y por ello este tipo de señales están definidas para cualquier par de instantes de tiempo y para cualquier instante comprendido entre este par. Por otro lado, una señal de tiempo discreto x(n), solamente está definida en ciertos instantes discretos de tiempo, de tal manera que entre cada instante de tiempo y el siguiente no está definida la señal. Una señal de tiempo discreto también se puede representar como una lista o secuencia de números, denotado comúnmente como x(n). Estos dos tipos de señales se relacionan de tal manera que podemos obtener una señal discreta al muestrear una señal continua. Esto se hace necesario ya que para que una señal pueda ser procesada digitalmente debe ser una señal digital y si la señal es continua se debe convertir a una señal digital mediante un proceso de muestreo (conversión a señal de tiempo discreto) y cuantización (conversión de su conjunto de valores a un conjunto finito). Fig. 1 Señal discreta en el tiempo Fig. 2 Señal continúa en el tiempo

description

libro de procesamiento digital de señales

Transcript of laboratorio1 de diniz

Page 1: laboratorio1 de diniz

Procesamiento Digital de Señales

Laboratorio1

Señales y sistemas discretos en Matlab

Edison Ramiro Segovia Vega

Escuela Politécnica del Ejército

Departamento de Eléctrica y Electrónica

Quito 10/09/2013

Palabras Claves.- Señal discreta, señal continua,

muestreo, ecuación de diferencias, respuesta al

impulso, Matlab.

I. INTRODUCCION

Aunque el nombre de Matlab significa laboratorio de

matrices, Matlab puede utilizarse como una

herramienta muy poderosa para todo tipo de cálculos

y visualizaciones científicas, de ingeniería y otros

campos. También es posible considerarlo como otro

lenguaje de programación para el desarrollo de

funciones avanzadas a partir de las utilidades

estándares de Matlab. Estas características han

hecho de Matlab una herramienta efectiva para la

educación y la investigación.

En nuestra primera practica usaremos la herramienta

de Matlab, para representar en forma de matrices los

datos encontrados en el estudio de señales y

sistemas, debido a esto las señales discretas son

representadas en forma perfecta mediante vectores,

no así las señales continuas que en Matlab son tan

solo aproximaciones para ello se deberá escoger

adecuadamente el intervalo de muestreo para así

lograr una aproximación más exacta.

II. FUNDAMENTOS TEORICOS

2.1. Señales continuas y señales discretas

Como ya sabemos existen dos tipos de señales

dependiendo de la naturaleza de la variable

independiente (tiempo): señales de tiempo continuo

y señales de tiempo discreto.

En una señal de tiempo continuo x (t), La variable

tiempo es una variable continua y por ello este tipo

de señales están definidas para cualquier par de

instantes de tiempo y para cualquier instante

comprendido entre este par. Por otro lado, una señal

de tiempo discreto x(n),

solamente está definida en ciertos instantes discretos

de tiempo, de tal manera que entre cada instante de

tiempo y el siguiente no está definida la señal. Una

señal de tiempo discreto también se puede

representar como una lista o secuencia de números,

denotado comúnmente como x(n).

Estos dos tipos de señales se relacionan de tal

manera que podemos obtener una señal discreta al

muestrear una señal continua. Esto se hace necesario

ya que para que una señal pueda ser procesada

digitalmente debe ser una señal digital y si la señal

es continua se debe convertir a una señal digital

mediante un proceso de muestreo (conversión a

señal de tiempo discreto) y cuantización (conversión

de su conjunto de valores a un conjunto finito).

Fig. 1 Señal discreta en el tiempo

Fig. 2 Señal continúa en el tiempo

Page 2: laboratorio1 de diniz

2.2. Muestreo

Es el proceso de conversión de señales continuas a

señales discretas en el tiempo. Este proceso se

realizada midiendo la señal en momentos periódicos

del tiempo.

2.3. Ecuación de diferencias

Es una ecuación que muestra la relación entra

valores consecutivos de una secuencia y la

diferencia entre ellos. Usualmente se escribe en una

ecuación recurrente para que la salida del sistema se

pueda calcular de las entradas de la señal y sus

valores anteriores.

La ecuación de diferencia nos ayuda a describir la

salida del sistema descrito por la fórmula para

cualquier n.

III. EXPERIMENTOS

3.1. Experimento 1.1

En el ejemplo 1.7: 𝑦(𝑛) −1

∝𝑦(𝑛 − 1) = 𝑥(𝑛)

hemos sido capaces de determinar una expresión de

forma cerrada para la respuesta de impulso asociado

con la ecuación de diferencia .Una solución numérica

de este problema se puede determinar, para α = 1,15

y

0 ≤ n ≤ 30 usando los siguientes comandos de

MATLAB:

Comandos en Matlab a = 1.15;

N = 30;

x = [1 zeros(1,N)];

y = filter(1,[1 -1/a],x);

stem(y);

En general, el comando Matlab

Determina la solución de la ecuación de diferencia

general:

Cuando la señal de entrada se proporciona en el

vector X y el vector Z_i contiene sus condiciones

iniciales

Definimos los valores de alfa y N, estos los usaremos

para en los parámetros de la función filter, la cual

define a una ecuación diferencial.

y = filter (1, [1 -1/a], x);

Utilizaremos esto para crear una función que define

a una ecuación diferencial.

Podemos ver la respuesta de la ecuación de

diferencia con valores de α y N definidos arriba:

Fig. 3 Respuesta de la ecuación de diferencias

En este experimento logramos visualizar la respuesta

en tiempo discreto a una ecuación de diferencias con

la función filter.

3.2. Experimento 1.2

El proceso de muestreo puede ser visto como una

asignación de una función de tiempo continuo en un

conjunto de

muestras de tiempo discreto. En general, sin

embargo, hay infinitas funciones que pueden generar

los mismos conjuntos de muestras. Para ilustrar esta

idea, considerar una función general f1 (t). el uso de

una frecuencia de muestreo de las muestras de FS

por segundo, el proceso de muestreo se obtiene el

tiempo discreto función f1 (NTS), con Ts = 1/fs y n

entero.

Muestreo de cualquier función de la forma f2 (t) = f1

(αt), con cualquier α positivo, utilizando un

muestreo de frecuencia

que se corresponde con el mismo conjunto de

muestras como antes.

Por lo tanto, en general, un conjunto dado de

muestras no especifica la original función de tiempo

continuo de una manera única. Para reducir esta

incertidumbre, debemos especificar el muestreo de

frecuencia empleada para generar las muestras

dadas. Al hacerlo, el razonamiento algebraico

anteriormente se rompe y se eliminan (casi) todas las

funciones candidatas de tiempo continuo para una

muestra dada conjunto. Hay, sin embargo, un

candidato último que debe ser eliminado para evitar

ambigüedad. Vamos a ilustrar este caso, mediante la

emulación de un procedimiento de muestreo

utilizando Matlab.

Page 3: laboratorio1 de diniz

Considere la posibilidad de la función 3-Hz coseno

f1 (t) = cos (2π3t) muestreada en Fs = 10 muestras por

segundo lugar, para un intervalo de tiempo de 1 s,

utilizando el comando Matlab:

Comandos en Matlab

tiempo = 0:0.1:0.9; f_1=cos(2*pi*3.*tiempo); f_2=cos(2*pi*7.*tiempo); tiem_aux = 0:0.001:(1-0.001); figure(1); stem(tiempo,f_1); hold on; plot(tiem_aux,

cos(2*pi*3.*tiem_aux),'r'); hold off; figure(2); stem (tiempo,f_2); hold on; plot(tiem_aux,

cos(2*pi*7.*tiem_aux),'r'); hold off;

Resultado:

f_1 = cos (2*pi*3.*time)

f = 3 Hz

Fig. 4 Muestreo de la función coseno a 3 Hz

f_2 = cos (2*pi*7.*time)

f = 7 Hz.

Fig. 5 Muestreo de la función coseno a 7 Hz

En este experimento podemos ver que para el

muestreo con una frecuencia de 7Hz el periodo

disminuye, debido a la relación inversa que existe

entre el periodo y la frecuencia.

En esta secuencia, el control sobre comandos

permiten trazar más de una función en la misma

figura y la variable timp_aux se utiliza para emular un

contador de tiempo continuo en la trama manda a

llamar a las funciones de fondo.

Para eliminar la ambigüedad, hay que hacer

referencia a la toma de muestras. Ese resultado indica

que una función de 7-Hz coseno no se muestreará con

Fs = 10 Hz, ya que la frecuencia mínima de muestreo

en este caso debe ser igual o mayor a Fs = 14 Hz.

3.3. Experimento 1.3

Supongamos que la señal x (t) = 5 cos (2π5t) + 2 cos

(2π50t), muestreados con fs = 1000 muestras por

segundo, como se muestra en la figura, es

corrompido por una pequeña cantidad de ruido, que

forma la señal se muestra en la Figura 1.25B

generados por los comandos siguientes:

Comandos en Matlab

amplitude_1 = 5; freq_1 = 5; amplitude_2 = 2; freq_2 = 50; F_s = 1000; time = 0:1/F_s:(1-

1/F_s); sine_1 =

amplitude_1*sin(2*pi*freq_1.*time); sine_2 =

amplitude_2*sin(2*pi*freq_2.*time); noise = randn(1,length(time)); x_clean = sine_1 + sine_2; x_noisy = x_clean + noise; figure(1); plot(time,x_clean); figure(2); plot(time,x_noisy,'y');

En particular, el comando randn genera el número

especificado de muestras de una señal

pseudoaleatoria con distribución gaussiana con

media cero y varianza unitaria.

Podemos minimizar el efecto ruidoso por un

promedio de N muestras sucesivas de x (n) =

x_noisy, la aplicación de la siguiente ecuación en

diferencias:

Page 4: laboratorio1 de diniz

Señal Limpia

Fig. 6 señales limpias

Señal con Ruido

Fig. 7 señales con ruido

Se puede realizar dicho procesamiento especificando

el valor de N y el uso de los comandos de Matlab:

b=ones(1,N);

y=filter(b,1,x_noisy);

el rendimiento de las parcelas se muestra en la Figure

para N = 3, N = 6, N = 10 y N = 20.

Esta gráfica nos indica que la técnica de promedio es

bastante eficaz para reducir la cantidad de ruido de la

señal dañado. En este caso, cuanto mayor sea el valor

de N, mayor será la capacidad de eliminar el

componente de ruido. Sin embargo, si N es muy

grande, como se observa en la siguiente gráfica a

continuación, el procedimiento de promedio casi

elimina la componente sinusoidal de alta frecuencia.

N=3

Fig. 8 N=3

N=6

Fig. 8 N=6

N=10

Page 5: laboratorio1 de diniz

Fig. 8 N=10

N=20

Fig. 8 N=20

Entonces, uno puede discutir si es posible reducir el

componente de ruido sin afectar a la señal original

significativamente. Tal vez un procesamiento más

elaborado puede preservar los componentes

sinusoidales mejor. La teoría y el diseño de

herramientas para responder a este tipo de pregunta

es el tema principal de este proyecto.

Creamos una variable noise que generara valores al

azar y definirá el número máximo de elementos con

los valores de time. También creamos una variable

x_clean y después generamos otra variable llamada

x_noisy.

Para concluir generamos las gráficas que serán las

de la función con ruido y la función limpia.

IV. VERIFICAR LOS RESULTADOS

DE LOS EJERCICIOS

4.1. Ejercicio 1.4

Calcular la suma de convolución de los siguientes

pares de secuencias:

Codigo en Matlab

x=[0 ones(1,5) zeros(1,5)]; h=[0 ones(1,8) zeros(1,5)]; y= conv(x,h); n=0:10; n3=1:24; figure(1); stem(n,x),title 'x(n)' figure(2); stem(n,y),title 'h(n)','g';

figure(3); stem(n3,y),title 'convolucion

x(n)*h(n)' x(n)

Fig. 9 x(n)

h(n)

Fig. 10 h(n)

Convolución x(n)*h(n)

Fig. 11 convolución

Page 6: laboratorio1 de diniz

Comandos en Matlab

x=[1 1 1 0 0 0 0 1 1 0 0]; h=[0 1 2 3 4 0 0 0 0 0 0]; y= conv(x,h); n=1:11; n1=1:21; subplot(221),stem(n,x),title 'x(n)' subplot(222),stem(n,h),title 'h(n)' subplot(212),stem(n1,y),title

'conv(x,h)'

Fig. 12 convolución x(n)*h(n)

Generamos dos vectores con once valores,

utilizamos el comando conv(vector1, vector2) y

realizamos la convolución. Al muestrear los 11

valores de la función, en la gráfica podemos

observar que a partir del numero 14, la función vale

0. Esto se debe a que solamente estaban definidos

nueve valores en la primera función y cuatro en la

segunda función. Entonces al realizar la

convolución, la respuesta será cero.

Comando en Matlab

x=[0 0 0 2 0 4 0 6 0 8 0 10]; h=[0.5 1 0.5 0 0 0 0 0 0 0 0 0]; y= conv(x,h); n=-5:6; n2=-1:21; subplot(221), stem(n,x),title

'x(n)' subplot(222), stem(n,h), title

'h(n)' subplot(212), stem (n2,y), title

'conv x(n)*h(n)'

Convolución x(n)*h(n)

Fig. 13 convolución x(n)*h(n)

En este ejercicio pudimos observar la convolución

de dos señales discretas dadas en Matlab por el

código conv.

Este proceso nos muestra que la convolución de dos

señales discretas nos dará otra señal discreta en el

tiempo.

4.2. Ejercicio 1.5

Para la secuencia:

Calcule

Compruebe su resultado en Matlab usando la

función conv.

Comando en Matlab x1=[1 1 0 0]; h1=[1 1 0 0]; y1= conv(x1,h1); x2=[1 1 0 0]; h2=[1 1 0 0]; y2= conv(x2,h2); yt=conv(y1,y2); n=1:13; stem(n,yt),title 'convolucion

y(n)=x(n)*x(n)*x(n)*x(n)'

Fig. 14 convolución

Page 7: laboratorio1 de diniz

Generamos una variable z que corresponde a la

función de convolución de x(n)*x(n). Podemos notar

que la gráfica nunca toma el valor de cero, debido a

que solo pusimos dos valores en el vector y nunca

pusimos un cero en dicho vector

V. RESOLVER LOS EJERCICIOS

1.12, 1.15, 1.19, 1.23 Y 1.26

5.1. Ejercicio 1.12

Escribir un programa en MATLAB para trazar las

muestras de las soluciones de las ecuaciones en

diferencias en el ejercicio 1.9 desde n = 0 a n = 20.

Comandos en Matlab

a= [1, 2, 1]; b= [0, 0, 0]; x= zeros(1,20); zi = filtic (b,a,[1,0]); y =filter (b,a,x,zi); stem(1:20,y)

Fig. 15 respuestas a la ecuación de diferencias

Comandos en Matlab

a= [1, 1, 2]; b= [0, 0, 0]; x= zeros(1,20); zi = filtic (b,a,[1,0]); y =filter (b,a,x,zi); stem(1:20,y)

Fig. 16 respuestas a la ecuación de diferencias

Primero tenemos una ecuación diferencial con

condiciones iniciales, luego generamos nuestro

vector x. En la función filter debemos ingresar tres

parámetros, aquí irán los valores de los coeficientes

de nuestra ecuación diferencial y las condiciones.

5.2. Ejercicio 1.15

Escribir un programa Matlab para calcular las

respuestas de impulso de los sistemas descritos por

ecuaciones en diferencias siguientes:

Comandos en Matlab

n=-10:10; x=[1:21]; y=[1:21]; for k=1:21 if(k == 11) x(k) = 1; else x(k) = 0; end end for j=1:21 if(j>=1 && j<=10) y(j) = 0; else y(j) = x(j)-y(j-1)-y(j-2); end end stem(n,x,'r'),hold on, stem(n,y,'b'),hold off

Page 8: laboratorio1 de diniz

Fig. 17 respuesta al impulso a la ecuación de

diferencias

En la gráfica podemos ver que nuestra función tiene

valores máximos en 1 y -1.

Comandos en Matlab

n=-10:10; x=[1:21]; y=[1:21]; for k=1:21 if(k == 11) x(k) = 1; else x(k) = 0; end end for j=1:21 if(j>=1 && j<=10) y(j) = 0; else y(j) = (x(j)-x(j-4)-y(j-1)-3*y(j-

2))/4; end end stem(n,x,'y'),hold on, stem(n,y,'b'),hold off

Fig. 18 respuesta al impulso a la ecuación de

diferencias

En esta grafica podemos ver que nuestra función

toma valores mayores a cero y que para ciertos

valores de x, en un mismo punto toman dos valores

al mismo tiempo.

5.3. Ejercicio 1.19

Escriba un programa Matlab para trazar la solución a

las tres ecuaciones en diferencias en el Ejercicio

1.18 para ω = π / 3 y ω = π.

Comandos en Matlab

n=-10:20; x=[1:31]; y=[1:31]; for k=1:31 if(k>=1 && k<=10) x(k) = 0; else x(k) = sin((pi/3)*(k-11)); end end for j=1:31 if(j>=1 && j<=10) y(j) = 0; else y(j) = x(j-2)+x(j-1)+x(j); end end figure(1) stem(n,x,'r'),hold on, stem(n,y,'b'),hold off,title 'y(n)

para w=pi/3'

w= π / 3

Fig. 19 para w= π / 3

w = π

Fig. 20 para w= π

Page 9: laboratorio1 de diniz

w= π / 3

Fig. 21para w= π / 3

w = π

Fig. 22 para w= π

w= π / 3

Fig. 23 para w= π / 3

w = π

Fig. 24 para w= π

En este ejercicio podemos ver como la señal tiene una

respuesta a una entrada.

Podemos observar que para cada valor de w la

graficas varía en frecuencia.

5.4. Ejercicio 1.23

Supongamos que queremos procesar la señal en

tiempo continuo El uso de un sistema de tiempo

discreto. La frecuencia de muestreo utilizada es de

4000 muestras por segundo. El procesamiento en

tiempo discreto llevó a cabo en las muestras de la

señal x (n) se describe mediante la siguiente

ecuación en diferencias

Comandos en Matlab

t=-10:0.01:10; xa=3.*cos(2.*pi.*1000.*t) +

7.*sin(2.*pi.*1100.*t); n=-10:0.04:10; x=3.*cos(2.*pi.*1000.*n) +

7.*sin(2.*pi.*1100.*n); figure(1) plot(t,xa,'y'), hold on plot(n,x), title 'Señal muestreada

xa(t) y x(n)',hold off y=[1:501]; y(1)=6; y(2)=6; for k=3:501 y(k)=x(k)+x(k-2); end figure(2)

Page 10: laboratorio1 de diniz

plot(n,y),title 'Ecuacion de

diferencias y(n)'

Fig. 25 señal muestreada

Fig. 26 ecuaciones de diferencias

En el ejercicio anterior logramos ver como se realiza

el muestreo de una señal continua. Aquí podemos

observar las etapas de muestreo como lo es el

filtrado del espectro de la señal continua algo

demasiado importante para proceder con el siguiente

paso que es el muestreo holding el cual deja por un

periodo de tiempo corto el valor de la señal

muestreada.

5.5. Ejercicio 1.26

Dada una sinusoide y (t) = Acos (Ωct)

Demostrar que si y (t) es muestreada con una

frecuencia de muestreo ligeramente por encima

de la frecuencia de Nyquist (que es Ωs = 2Ωc

2Ωc + ε, donde ε «wc), entonces la envolvente

de la señal muestreada variará lentamente, con

una frecuencia de π ε / (2Ωc + ε) rad / muestra.

Esto se refiere a menudo como el efecto muaré.

Escribir un programa MATLAB para trazar 100

muestras de y (n) para ε igual a Ωs/100 y

confirmar el resultado anterior.

Comandos en Matlab

A = 10; Pc = 2; t=-10:0.01:10; y=A.*cos(Pc.*t); Ps = 5; n=-10:1/Ps:10; yn=A.*cos(Pc.*n); subplot(211),plot(t,y),title

'Función de t' subplot(212),stem(n,yn,'y'), title

'Function de n'

Fig. 27 señal continúa en el tiempo

Fig. 28 señal discreta en el tiempo

En este ejercicio logramos observar como pasamos

de una señal continua en el tiempo a la misma señal

e tiempo discreto.

Para lo cual nuestra señal continua debe ser

muestreada y filtrada para luego ser pasada a señal

discreta, la frecuencia de muestreo debe ser igual o

mayor a la frecuencia de Nyquist para así reducir el

efecto de aliasing.

VI. CONCLUSIONES

Para poder procesar una señal continua en

un sistema discreto necesitamos tomar una

frecuencia de corte mayor igual a la

frecuencia de Nyquist para eliminar el

efecto de aliasing.

El espectro de señal continua en el tiempo

debe ser procesada a través de un filtro pasa

bajos para su transformación a una señal

discreta.

Matlab nos permite representar señales

discretos de manera perfecta mientras que

para señales continuas nos da una

aproximación muy buena.

El muestreo de una señal continua es una

parte fundamental en el procesamiento de la

señal para su transformación a discreta en

el tiempo.

VII. BIBLIOGRAFIA

Diniz P. ( 2012).Digital signal processing. Segunda

Edición. 12- 10-2012.