1 Resumen
Una señal discreta viene representada matemáticamente a través de una función cuya variable
independiente es de tipo discreto (sólo toma valores enteros). De esta manera, podemos decir que
una señal discreta es una secuencia de números. Si estos números o amplitudes son también de
tipo discreto, estaremos hablando de señales digitales. Las señales discretas pueden obtenerse
bien, a partir de un muestreo de una señal continua o bien, a partir de un procesado discreto.
2 Introducción teórica
Las señales discretas pueden proceder de estudios demográficos, de datos económicos o
meteorológicos para los cuales, la variable independiente es inherentemente discreta. Otro tipo
de secuencias discretas son aquéllas generadas a partir de un muestreo de señales cuya variable
independiente es continua. Por ejemplo, para el procesado discreto de una señal de voz se
necesita una secuencia discreta en donde estén almacenados los valores que toma la voz continua
en instantes temporales equiespaciados.
El interés creciente del procesado discreto o digital de señales estriba en su versatilidad y
eficiencia para tratar señales bien diferentes y procesos complejos de gran carga computacional.
La implementación de estos procesos puede llevarse a cabo con diferentes tecnologías, que hoy
en día pueden considerarse como muy potentes y económicas: microprocesadores de propósito
específico, ordenadores de propósito general, dispositivos de onda acústica de superficie, etc.
En los siguientes apartados se presentan los conceptos fundamentales de las señales discretas.
donde los x[k] se consideran simplemente como constantes de amplitud. Este aspecto es de
interés al considerar sistemas lineales discretos.
Si deseamos visualizar mediante Matlab un intervalo de la secuencia impulso unitario entre los
instantes 0 ≤ n ≤ 39, la secuencia de comandos que introduciremos será:
>> d = zeros(40,1);
>> d(1) = 1;
>> stem(d)
Observe que, de esta manera, el valor de amplitud unitario en lugar de situarse en el instante 0 se
sitúa en el instante 1. Para etiquetar correctamente el eje horizontal, deberá crearse un vector que
contenga el intervalo de tiempos:
>> n = 0:39;
>> d = zeros(40,1);
>> d(1) = 1;
>> stem(n,d)
Si ahora desea poner títulos a la gráfica y a los ejes:
>> title('delta(n)'), xlabel('n')
Ejercicio 1. Genere y visualice en Matlab las siguientes secuencias impulso unitario en los
intervalos temporales que se especifican:
d1[n] = 2[n], −20 ≤ n ≤ 20
d2[n] = 3.5[n − 115], 100 ≤ n ≤ 150
d3[n] = −0.5[n], −1 ≤ n ≤ 20
d4[n] = [n + 110], −120 ≤ n < −100
Ejercicio 2. Genere (usando la función zeros() y el operador “:”) y visualice el tren periódico de
impulsos:
, 0 ≤ n ≤39
Las relaciones más interesantes entre la secuencia impulso y la secuencia escalón vienen dadas a
través de:
Si deseamos visualizar mediante Matlab un intervalo de la secuencia escalón unitario entre los
instantes −50 ≤ n ≤ 49, una posible secuencia de comandos sería:
>> n = -50:49;
>> x = zeros(100,1);
>> x(51:100) = ones(50,1);
>> stem(n,x)
>> title('u(n)'), xlabel('n')
Observe que la indexación en Matlab comienza siempre en 1. Así, el elemento x(51) se
corresponde con el valor u[0] de nuestra secuencia escalón analítica, mientras que el elemento
x(1) se corresponde con el valor u[−50].
La exponencial será decreciente en amplitud a lo largo del tiempo siempre que |α| < 1, mientras
que será creciente cuando |α| > 1. Para el caso en que α = 1 tenemos una secuencia constante n.
Figura 1.3: Secuencias exponenciales reales
Ejercicio 4 Genere y visualice en el intervalo de tiempos −10 < n ≤ 20, exponenciales reales
considerando α = ±0.5;± 0.8; ±0.95; ±1.4; ±1.1; ±1.05.
siendo k una constante entera. Sólo en el caso en que la frecuencia 0 cumpla la anterior
condición, nos encontraremos ante una secuencia sinusoidal periódica, de periodo N. Nótese que
una secuencia sinusoidal discreta puede proceder del muestreo de una señal continua.
Dependiendo de cómo se efectúe este muestreo, los valores de las muestras seleccionadas en un
periodo podrán coincidir (secuencia periódica) o no (secuencia no periódica) con los valores
elegidos en el resto de los periodos de la sinusoide continua.
Ejercicio 6. Empleando el editor de Matlab, programe una función, gensin.m que genere
sinusoides reales. La cabecera de la función será:
function [s,n] = gensin(A,wo,fi,n0,n1);
# Entradas:
# A : amplitud
# wo: frecuencia en radianes
# fi: fase en radianes
# no: índice temporal de comienzo de la secuencia
# n1: índice temporal de finalización de la secuencia
# Salidas:
# s : la secuencia sinusoidal
# n : vector con los índices temporales
• Frecuencias complejas
Una secuencia exponencial compleja viene dada por la expresión x[n] = Aαn, siendo A = |A|ej y α
= |α|ej0 . De esta manera, podemos expresar x[n] como:
Si |α| ≠ 1, las partes real e imaginaria de x[n] serán secuencias sinusoidales que se van
amortiguando (|α| < 1) o amplificando (|α| > 1) con el tiempo. Para el caso |α| = 1, la secuencia
resultante se denomina sinusoide compleja.
Según la expresión anterior, para visualizar una exponencial compleja, x, tendremos la opción de
visualizar su parte real e imaginaria:
>> subplot(211), stem(n,real(x))
>> subplot(212), stem(n,imag(x))
>> subplot(211), stem(n,abs(x))
>> subplot(212), stem(n,angle(x))
Ejercicio 7. Empleando el editor, programe una función para Matlab, genexp.m que genere
exponenciales complejas. La cabecera de la función será:
function [e,n] = genexp(modA,faseA,moda,fasea,n0,n1);
# Entradas:
# modA : |A|
# faseA:
# moda : |α|
# fasea: o
# no: índice temporal de comienzo de la secuencia
# n1: índice temporal de finalización de la secuencia
# Salidas:
# e : la secuencia exponencial
# n : vector con los índices temporales
Figura 1.5: Exponenciales moduladas por sinusoides
Ejercicio 8. Empleando la función anterior con los siguientes valores: |A| = 4, 0 = /15, = /3, n0 = 9
y n1 = 40, represente dos exponenciales complejas, una creciente y otra decreciente y una
sinusoide compleja. Salve en el workspace la exponencial decreciente con el nombre ‘ e ’ para
utilizar más adelante.
Operando con secuencias truncadas, aparece un problema cuando están definidas en distintos
intervalos de tiempo. Una primera solución consiste en añadir ceros, convenientemente, a las
secuencias truncadas tal como se muestra en el siguiente ejemplo.
Si deseamos sumar las secuencias u1[n] y u2[n], generadas en el Ejercicio 3, podemos proceder
de la siguiente manera:
>> n = -10:50;
>> x1 = [u1 ; zeros(20,1)];
>> x2 = [zeros(10,1) ; u2];
>> x3 = x1 + x2;
>> x4 = x1 .* x2;
>> stem(n,x3)
>> title('Suma'), xlabel('n'), (replot)
>> stem(n,x4)
>> title('Producto'), xlabel('n'), (replot)
La otra solución, consiste en un nuevo truncamiento de las dos secuencias a operar, de tal manera
que el nuevo intervalo de tiempos sea el común de las dos secuencias.
>> n = 0:30;
>> x5 = u1(11:41);
>> x6 = u2(1:31);
>> x7 = x5 + x6;
>> x8 = x5 .* x6;
>> stem(n,x7)
>> title('Suma'), xlabel('n'), replot
>> stem(n,x8)
>> title('Producto'), xlabel('n'), replot
Ejercicio 9.
a) Represente la secuencia resultante de sumar las secuencias u1[n] y s2[n] de los ejercicios
anteriores.
b) Represente la secuencia resultante de efectuar el producto entre d4[n] y u3[n].
4.3 Desplazamiento
Desplazamiento lineal: Dada x[n] y la constante entera no, la secuencia desplazada y[n] = x[n –
n0] será una traslación de no unidades hacia la derecha si n0 > 0 ó hacia la izquierda cuando n0 <
0. Al operar con secuencias truncadas, un desplazamiento origina la pérdida de un conjunto de
valores por un extremo del vector; por el otro extremo, habrá que añadir tantos ceros como
valores hayamos perdido, tal como se muestra en el siguiente ejemplo.
Considerando la secuencia exponencial truncada e del Ejercicio 8, el desplazamiento de 10
unidades hacia la derecha de dicho vector será de esta manera:
>> n = -9:40;
>> e 10 = zeros(50,1);
>> e 10(11:50) = e(1:40)';
>> stem(n,e 10)
>> title('Desplazamiento'), xlabel('n')
Desplazamiento circular: considerando la secuencia del anterior ejemplo, el desplazamiento
circular de 10 unidades hacia la derecha sería:
>> n = -9:40;
>> ec 10 = zeros(50,1);
>> ec 10(1:10) = e(41:50)';
>> ec 10(11:50) = e(1:40)';
>> stem(n,ec 10)
>> title('Despl. circular'), xlabel('n')
4.4 Reflexión
Partiendo de x[n], la secuencia reflejada será x[−n]. Gráficamente, la reflexión consiste en
realizar un abatimiento de la señal respecto al eje de ordenadas. En MATLAB el operador “ 2
puntos” ayuda a reflejar un vector. Además, deberá tenerse en cuenta el cambio del vector de
índices temporales.
Continuando con la secuencia exponencial del Ejercicio 8, el proceso para reflejarla será:
>> n = -40:9;
>> er = e(length(e):-1:1);
>> stem(n,er)
>> title('Reflexión'), xlabel('n')
En las funciones de desplazamiento, tenga en cuenta que el valor m puede ser mayor que la
longitud de la secuencia de entrada.
Ejercicio 11. Para comprobar las funciones que acaba de programar, considere la secuencia:
x[n] = 0.99n 0 ≤ n ≤ 39