Está en la página 1de 8

Introducción al análisis de señales y sistemas

discretos
Socasi Bryan, Viera Katherine

Universidad de las Fuerzas Armadas ESPE


Departamento de Eléctrica y Electrónica
Sangolquí - Ecuador
basocasi@espe.edu.ec, kaviera@espe.edu.ec

Resumen- En el presente informe se explora el análisis Parámetros de entrada:


de señales discretas utilizando Matlab, haciendo uso de
los comandos que nos permiten presentar señales y o Los valores de las ordenadas t en los que se van
sistemas en tiempo discreto, entre ellos se analiza y
ejemplifica comandos como conv, impz, stem, filter. a trazar los datos
Matlab nos permite ejecutar ciertas operaciones como la o Los valores de x a ser graficadas
convolución, también hallar la respuesta al impulso de un
sistema y varias gráficas. Ejemplo:
Palabras Clave- señales discretas, Matlab t=[0:0.1:2];
x=cos(pi*t+0.6);
I. INTRODUCCIÓN stem(t,x);
Una señal puede ser definida como una portadora física de
información. Por ejemplo, las señales de audio son
variaciones en la presión del aire llevando consigo un
mensaje a nuestros oídos y las señales visuales son ondas de
luz que llevan información a nuestros ojos. Desde un punto de
vista más matemático, las señales se representan por una
función de una o más variables, pero las funciones en tiempo
discreto que estamos estudiando son de una sola variable
independiente entera: el tiempo.

II. OBJETIVOS
 Familiarizar al estudiante con el tratamiento de señales
discretas en Matlab.
Fig. 1. Gráfica comando stem
 Entender la funcionalidad de los diversos comandos
existentes en Matlab para el procesamiento de señales
discretas.  conv: Realiza la convolución discreta de dos secuencias.
o Parámetros de entrada: los vectores a y b que
III. MATERIALES contienen las dos secuencias.
o Parámetro de salida: el vector y que contiene la
 Computador con Matlab versión R2017a instalado convolución de a y b.
IV. PROCEDIMIENTO Ejemplo
A. Señales y Sistemas en tiempo Discreto con Matlab
a=[1 1 1 1 1];
La caja de herramientas de procesamiento de señales en
b=[1 2 3 4 5 6 7 8 9];
Matlab tiene varias funciones que nos permiten procesar
c=conv(a,b);
señales discretas, entre los comandos más comunes stem(c);
encontramos:

 stem: Grafica una secuencia de datos como raíces del


eje x terminados en círculos.
Ejemplo:

Encuentre la respuesta al impulso del sistema 𝑦[𝑛] =


1
𝑦[𝑛 − 1] = 𝑥[𝑛], suponiendo que el sistema está
𝛼
inicialmente relajado.

Una solución numérica para este problema puede ser


determinada para 𝛼 = 1.15 y 0 ≤ 𝑛 ≤ 30.

alpha = 1.15; N = 100;


x = [1 zeros(1,N)];
y = filter(1,[1 -1/alpha],x);
stem(y);
Fig. 2. Gráfica comando conv

 impz: Calcula la respuesta al impulso de un sistema 0.9


inicialmente en reposo descrito por una ecuación de 0.8
diferencias. Sus parámetros de entrada son:
0.7

o Vector b que contiene los valores de bl, para l= 0.6

0, 1, …, M; 0.5

o Vector a que contiene los valores de ai, para i= 0.4

0, 1, …, N; 0.3

o El número deseado de muestras n de la 0.2


respuesta de impulso. 0.1

0
Su parámetro de salida es el vector h que guarda la 0 20 40 60 80 100 120

respuesta al impulso del sistema.


Fig. 4. Gráfica comando filter
Ejemplo:

a=[1 -0.22 -0.21 0.017 0.01]; C. Muestreo


b=[1 2 1]; El proceso de muestreo se puede entender como la
h=impz(b,a,20); conversión de señales continuas a señales discretas en el
stem(h); dominio del tiempo. Definiendo una frecuencia de muestreo
adecuada dependiendo de la señal, eliminaremos la
2.5 incertidumbre de cuantas muestras tomar.

2
Ejemplo: Considere la función coseno a 3Hz 𝑓1 (𝑡) =
cos⁡(2𝜋3𝑡) muestreada a 𝑓𝑠 = 10⁡ muestras por segundo, para
un intervalo de 1seg, y la función coseno a 7Hz 𝑓2 (𝑡) =
1.5
cos⁡(2𝜋7𝑡).

1 time = 0:0.1:0.9;
f_1 = cos(2*pi*3.*time);
0.5 f_2 = cos(2*pi*7.*time);
time_aux = 0:0.001:(1-0.001);
0
figure(1);
0 2 4 6 8 10 12 14 16 18 20
stem(time,f_1);
hold on;
Fig. 3. Gráfica comando impz plot(time_aux, cos(2*pi*3.*time_aux));
hold off;
figure(2);
stem(time,f_2);
B. Sistemas recursivos hold on;
plot(time_aux,cos(2*pi*7.*time_aux));
 filter: este comando determina la solución de la
hold off;
ecuación general de diferencias 𝑦[𝑛] + 𝑎1 𝑦[𝑛 − 1] +
⋯ + 𝑎𝑁 𝑦[𝑛 − 𝑁] = 𝑏𝑜 𝑥[𝑛] + 𝑏1 𝑥[𝑛 − 1] + ⋯ +
𝑏𝑚 𝑥[𝑛 − 𝑚] cuando la señal de entrada está dada por el
vector x y el vector zi contiene las condiciones iniciales.
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Fig. 5. Gráfica 𝑓1 (𝑡) = cos⁡(2𝜋3𝑡) muestreada a 𝑓𝑠 = 10 Fig. 7. Señal x(t) = 5 𝑐𝑜𝑠(2π5t) + 2 𝑐𝑜𝑠(2π50t) original

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Fig. 6. Gráfica 𝑓2 (𝑡) = cos⁡(2𝜋7𝑡) muestreada a 𝑓𝑠 = 10


Fig. 8. Señal x(t) = 5 𝑐𝑜𝑠(2π5t) + 2 𝑐𝑜𝑠(2π50t) con ruido aleatorio
D. Ruido y filtrado
Suponga que la señal 𝑥(𝑡) = 5 𝑐𝑜𝑠(2𝜋5𝑡) + 2 𝑐𝑜𝑠(2𝜋50𝑡) Se puede reducir el efecto del ruido calculando el
muestreada con 𝑓𝑠 = 1000 muestras por segundo, está dañada promedio de N muestras de x[n] = x_noisy,
por una pequeña cantidad de ruido, de acuerdo con los implementando la siguiente ecuación de diferencias:
comandos siguientes:
𝑥[𝑛] + 𝑥[𝑛 − 1]+. . . +𝑥[𝑛 − 𝑁 + 1]
𝑦[𝑛] =
𝑁
amplitude_1 = 5; freq_1 = 5; Mientras más grande sea N, más se eliminará el ruido, sin
amplitude_2 = 2; freq_2 = 50; embargo, si N es demasiado grande, esta ecuación
f_s = 1000; time = 0:1/f_s:(1-1/f_s); eliminará las frecuencias altas de las componentes
sine_1 = sinodales.
amplitude_1*sin(2*pi*freq_1.*time);
sine_2 = En el siguiente gráfico se muestra la señal original
amplitude_2*sin(2*pi*freq_2.*time); procesada con N=20 con este método para eliminar el
noise = randn(1,length(time)); ruido.
x_clean = sine_1 + sine_2;
x_noisy = x_clean + noise;
b = ones(1,N);
figure(1);
y = filter(b,1,x_noisy);
plot(time,x_clean);
plot(time,y);
figure(2);
plot(time,x_noisy);
B. Calcule 𝒚[𝒏] = 𝒙[𝒏] ∗ 𝒙[𝒏] ∗ 𝒙[𝒏] ∗ 𝒙[𝒏] usando la
función de Matlab conv para la secuencia:
1,⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡0 ≤ 𝑛 ≤ 1
𝑥[𝑛] = {
0, 𝑐𝑎𝑠𝑜⁡𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜

x=[1 1 0 0 0 0 0 0 0 0 0];
y=conv(conv(x,x),conv(x,x));
stem(y,'filled','m'),title
'y[n]=x[n]*x[n]x[n]*x[n]'

Fig. 9. Señal x(t) = 5 𝑐𝑜𝑠(2π5t) + 2 𝑐𝑜𝑠(2π50t) filtrada con el promedio


de N=20 muestras sucesivas

V. EJERCICIOS ADICIONALES

A. Calcular la suma de convolución del siguiente par de secuencias


utilizando la función “conv” de Matlab:

1,⁡⁡⁡⁡0 ≤ 𝑛 ≤ 2
0,⁡⁡⁡⁡3 ≤ 𝑛 ≤ 6
𝑥[𝑛] = {
1,⁡⁡⁡⁡7 ≤ 𝑛 ≤ 8
0,⁡⁡⁡⁡𝑜𝑡𝑟𝑜⁡𝑐𝑎𝑠𝑜

𝑛,⁡⁡⁡1 ≤ 𝑛 ≤ 4⁡
ℎ[𝑛] = {
0,⁡⁡⁡⁡𝑜𝑡𝑟𝑜⁡𝑐𝑎𝑠𝑜
Fig. 11. Señal de salida 𝑦[𝑛]

Explicación: Se desarrolló en un vector los puntos de la función


x=[1 1 0 0 0 0 1 1 0 0 0 0]; X[n], ya que la función conv tiene como argumentos los vectores de
h=[1 2 3 4 0 0 0 0 0 0 0 0]; las señales discretas que van a hacer la convolución. Y ya que la
y= conv(x,h); convolución es asociativa, se procedió a encontrar la convolución de
stem(y,'filled','m'),title esta manera:
'y[n]=x[n]*h[n]' 𝑦[𝑛] = [𝑥[𝑛] ∗ 𝑥[𝑛]] ∗ [𝑥[𝑛] ∗ 𝑥[𝑛]]
y valiéndonos de la función stem graficamos la salida y[n].

C. Escribir un programa en Matlab que obtenga la respuesta


a los impulsos para el sistema descrito por las siguientes
ecuaciones de diferencia para valores desde 𝒏 = 𝟎 a 𝒏 = 𝟐𝟎.

𝑦[𝑛] + 2𝑦[𝑛 − 1] + 𝑦[𝑛 − 2] = 0,⁡⁡⁡⁡⁡𝑦[0] = 1⁡⁡⁡˄⁡⁡⁡𝑦[1] = 1

A=[1,2,1];
B=[0,0,0];
z=zeros(1,20);
ini=filtic(B,A,[1,0]);
y=filter(B,A,z,ini);
stem(1:20,y,'filled','m'), title 'Salida
y[n]'

Fig. 10. Salida y[n]=x[n]*h[n]

Explicación: Para este ejercicio se desarrolló en un vector los puntos


de cada función, ya que la función conv tiene como argumentos los
vectores de las señales discretas que van a ser convolucionadas, y
valiéndonos de la función stem graficamos la salida y[n].
z=impz(b,a,N);
stem(z,'filled','m')

Fig. 12. Salida y[n]

Fig. 14. Respuesta al impulso 𝑦[𝑛] + 𝑦[𝑛 − 1] + 𝑦[𝑛 − 2] = 𝑥[𝑛]


𝑦[𝑛] + 𝑦[𝑛 − 1] + 2𝑦[𝑛 − 2] = 0

K= [1, 1, 2];
S= [0, 0, 0];
v= zeros(1,20);
ini = filtic (S,K,[1,0]); D.2 4𝑦[𝑛] + 𝑦[𝑛 − 1] + 3𝑦[𝑛 − 2] = 𝑥[𝑛]6𝑥[𝑛 − 4]
y =filter (S,K,v,ini);
stem(1:20,y,'filled','m'), title 'Salida N=20; a=[4 1 3]; b=[1 0 0 1];
y[n]'; z=impz(b,a,N);
stem(z,'filled','m')

Fig. 13. Salida y[n]


Fig. 15. Respuesta al impulso 4𝑦[𝑛] + 𝑦[𝑛 − 1] + 3𝑦[𝑛 − 2] = 𝑥[𝑛]6𝑥[𝑛 −
Explicación: Se han generado dos vectores con los coeficientes de la 4]
ecuación de diferencias y para ir guardando las respuestas a los
impulsos se generó el vector de ceros con 20 posiciones. Con el
comando filtic damos valores iniciales de reposo y el comando filter Explicación: Se selecciona un N=20 para realizar la operación de la
nos permite obtener la salida del sistema. Finalmente graficamos el respuesta al impulso, se utiliza el comando de Matlab para calcularlo
resultado con el comando stem. y se dibuja con “stem”

D. Escriba un programa en Matlab para calcular la respuesta E. Escriba un programa en Matlab para graficar la respuesta
al impulso de los sistemas descritos por las siguientes de estado estacionario para la entrada 𝒙[𝒏] = 𝐬𝐢𝐧(𝝎𝒏) 𝝁[𝒏]
ecuaciones de diferencias. de los filtros descritos por las siguientes tres ecuaciones de
𝝅
D.1 𝑦[𝑛] + 𝑦[𝑛 − 1] + 𝑦[𝑛 − 2] = 𝑥 [𝑛] diferencias. Considere 𝝎𝟏 = y 𝝎𝟐 = 𝝅.
𝟑

N=20; a=[1 1 1]; b=1; 𝑦[𝑛] = 𝑥[𝑛 − 2] + 𝑥[𝑛 − 1] + 𝑥[𝑛]


Para w1=pi/3
t=30; 2

for i=1:t 1
x_1(i)=sin(pi/3*(i-1));
0
end
for i=1:t -1

x_2(i)=sin(pi*(i-1)); -2
end 0 5 10 15 20 25 30

y_1=filter([1 1 1],1, x_1); x 10


-14
Para w2=pi
y_2=filter([1 1 1],1, x_2); 1

subplot(2,1,1);stem(0:29,y_1,'r'),title
0
'Para w1=pi/3';
subplot(2,1,2);stem(0:29,y_2,'b'),title -1
'Para w2=pi';
-2
0 5 10 15 20 25 30
Para w1=pi/3
2
Fig. 17. Respuesta para x[n] para w1 y w2
1

0
𝑦[𝑛] = 𝑥[𝑛 − 2] + 2𝑥[𝑛 − 1] + 𝑥[𝑛]
-1

-2 t=30;
0 5 10 15 20 25 30
for i=1:t
x 10
-14
Para w2=pi x_1(i)=sin(pi/3 * (i-1));
2
end
1 for i=1:t
0 x_2(i)=sin(pi*(i-1));
end
-1
y_1=filter([1 2 1],1, x_1);
-2
0 5 10 15 20 25 30
y_2=filter([1 2 1],1, x_2);
subplot(2,1,1);stem(0:29,y_1,'r');title
'Para w1=pi/3';
Fig. 16. Respuesta para x[n] para w1 y w2 subplot(2,1,2);stem(0:29,y_2,'b'),title
'Para w2=pi';
1
𝑦[𝑛] − 𝑦[𝑛 − 1] = 𝑥[𝑛]
2
Para w1=pi/3
t=30; 4

for i=1:t 2
x_1(i)=sin(pi/3*(i-1)); 0
end
for i=1:t -2

x_2(i)=sin(pi*(i-1)); -4
0 5 10 15 20 25 30
end
y_1=filter(1,[1 -1/2], x_1); x 10
-14
Para w2=pi
2
y_2=filter(1,[1 -1/2], x_2);
subplot(2,1,1);stem(0:29,y_1,'r'),title 1

'Para w1=pi/3'; 0
subplot(2,1,2);stem(0:29,y_2,'b'),title
-1
'Para w2=pi';
-2
0 5 10 15 20 25 30

Fig. 18. Respuesta para x[n] para w1 y w2

Explicación: Primero se ha definido un periodo en el que se


graficará la respuesta de estado estacionario, en este caso lo hemos
realizado un proceso iterativo hasta n=30. Colocamos los
coeficientes de la ecuación y nos valemos de la función subplot para
colocar las gráficas juntas tanto para w1 y w2.

F. Suponga que se quiere procesar la señal continua 𝒙𝒂 (𝒕) =


𝟑 𝐜𝐨𝐬(𝟐𝝅𝟏𝟎𝟎𝟎𝒕) + 𝟕⁡𝐬𝐢𝐧⁡(𝟐𝝅𝟏𝟏𝟎𝟎𝒕) usando un sistema
discreto. La frecuencia de muestreo usada es de 4000
muestras por segundo. El procesamiento discreto es descrito
por la siguiente ecuación de diferencia 𝒚[𝒏] = 𝒙[𝒏] + 𝒙[𝒏 −
𝟐]. Después del procesamiento, las muestras de la salida 𝒚[𝒏]
son convertidas de nuevo a una forma continua. Escriba un
programa en Matlab para hacer una simulación de la solución
de este problema e interprete el efecto que tuvo el
procesamiento en la señal de entrada.

fs=4000; time=0:1/fs:(1-1/fs);
xa
=3*cos(2*pi*1000.*time)+7*sin(2*pi*1100.*
time);
xd=xa(1:100:length(xa));
y=filter([1 0 1],1,xd);
n=0:100:length(na); Fig. 21. Secuencia x[n]
h=sinc(-10:0.01:10);
for i=1:length(n),
aux(i,100*i-99:100*i-
100+length(h))=h*y(i);
end;
yc=sum(aux);
ya=yc(1001:length(yc)-1000);
Ta=1/400000;
figure(1);
stem(xd)
figure(2);
stem(y)
figure(3);
plot(na*Ta,xa)
figure(4); Fig. 22. Secuencia y[n]
plot(na*Ta,ya)

Explicación: Se procedió a ingresar la señal analógica 𝑥𝑎 ,


muestreada a 4000, luego de esa misma señal, se tomó muestras para
obtener 𝑥𝑑 . Se aplicó a esa señal un filtro y se guardó en 𝑦.
Posteriormente se interpoló truncando la función con la SINC para
obtener la 𝑦𝑎
Interpretación: Este procesamiento filtró una de las componentes
sinusoidales de la señal

VI. CONCLUSIONES Y RECOMENDACIONES

A. Conclusiones

 Matlab es una herramienta que nos permite ejecutar


procesos que serían muy extensos de realizar a mano,
Fig. 19. Señal analógica x[n] además de obtener gráficas con gran precisión.
 El estudiante se ha familiarizado con el tratamiento de
señales discretas en Matlab.
 Se ha entendido la funcionalidad de los diversos
comandos existentes en Matlab para el procesamiento de
señales discretas.

B. Recomendaciones

 Es importante definir la extensión de los ejes para


observar el gráfico con claridad.
 Usar las propiedades de la convolución para facilitar el
trabajo al momento de calcularla.
 Si se desea observar la diferencia entre una señal y otra
Fig. 20. Señal analógica y[n] muy parecida, graficarla en la misma figura de diferente
color.
REFERENCIAS
[1] Paulo Diniz, Eduardo da Silva, and Sergio Netto. Digital Signal
Processing: System Analysis and Design, 2nd Edition. Cambridge
University Press, ISBN 978-0-521-88775-5, 2010.

También podría gustarte