Anda di halaman 1dari 14

Práctica 1. Fundamentos de las señales discretas.

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.

Objetivo: En esta práctica nos centraremos en la generación y visualización de secuencias


básicas unidimensionales en el entorno Matlab.

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.

2.1 Secuencias y vectores


Analíticamente, las señales discretas, x[n], se consideran de longitud infinita, abarcando un eje
de tiempos: −∞ ≤ n ≤ +∞.
Sin embargo, los elementos numéricos empleados por Matlab son de tipo matricial M × N donde
M y N son valores enteros finitos. Por tanto, un vector, x, de tipo columna N × 1, o de tipo fila 1
× N nos servirá para representar un intervalo de longitud finita N de la secuencia que deseamos
generar.
Además, es muy importante resaltar que la indexación de un vector en Matlab comienza en el
elemento 1. Por tanto, si nuestro vector x está representando los valores de la secuencia x[n]
desde n = 0 hasta n = N −1, el valor del vector x en el índice 1, x(1) se corresponderá con el
valor de la secuencia x[n] en el instante temporal 0.
3. Secuencias básicas
Las secuencias básicas para el procesado discreto de señales son la secuencia impulso, la
secuencia escalón y las exponenciales reales y complejas.

3.1 Secuencia Impulso Unidad


Es la secuencia más sencilla y viene definida como:

Figura 1.1. Secuencia Impulso Unidad

La propiedad más importante de la secuencia impulso se debe a que cualquier secuencia


arbitraria x[n] puede expresarse como:

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

3.2 Secuencia Escalón Unidad


La secuencia escalón unidad viene definida como:
Figura 1.2: Secuencia escalón unitario

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].

Ejercicio 3. Genere y visualice las siguientes secuencias:


u1[n] = 2u[n], −10 ≤ n ≤ 30
u2[n] = u[n − 10], 0 ≤ n ≤ 50
u3[n] = −0.5u[n + 100], −120 ≤ n < −20

3.3 Secuencias Exponenciales Reales


Dadas las constantes reales A y α, definimos una secuencia exponencial como:

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

Con la siguiente secuencia de comandos, generamos y visualizamos un intervalo de una


exponencial real decreciente:
>> n = -9:40;
>> e = 2 * (−0.9) .** n;
>> stem(n,e)
>> title('e(n)'), xlabel('n')
Observe el uso del operador “.” para efectuar la elevación del valor −0.9 a cada uno de los
elementos del vector n que contiene el índice de tiempos.

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.

3.4 Secuencias Sinusoidales


La expresión de una secuencia sinusoidal viene dada por:
f
siendo A, constante real, el valor de amplitud en las unidades correspondientes; 0 es el valor de la
frecuencia en radianes y es la fase de la secuencia también en radianes.
Algunas observaciones respecto a las secuencias sinusoidales:
No siempre son secuencias periódicas. La condición de periodicidad para una secuencia x[n] es
x[n] = x[n + N] (siendo N una constante entera). Aplicada a nuestro caso, se traduce en:

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.

Figura 1.4: Secuencias sinusoidales reales


Algunas observaciones de las secuencias sinusoidales.
• El conjunto de valores (0 +2r), con r constante entera, generan todos la misma secuencia
sinusoidal:
x[n] = Acos(0n + 2rn + ) = Acos(0n + )
Por tanto, a la hora de realizar un análisis frecuencial de la secuencia x[n] = Acos(0n + ), sólo
necesitamos considerar el intervalo de frecuencias − < 0 ≤ .
• Visto lo anterior, para un valor de0 cercano a 0, la sinusoide presentará pocas oscilaciones
(frecuencia baja), mientras que para valores de 0 cercanos a ± la sinusoide correspondiente
oscilará rápidamente (frecuencias altas).
• Como conclusión, dada una sinusoide periódica de periodo N, su frecuencia fundamental
vendrá dada por 2/N y sólo existirá un conjunto finito de N frecuencias armónicas, a saber: k
= 2k/N, k = 1, 2, . . . , N.

Ejercicio 5. Genere y visualice las siguientes secuencias sinusoidales:


s1[n] = cos(n/15) −20 ≤ n ≤ 40
s2[n] = 2sin(n/15 + /3) −20 ≤ n ≤ 50
s3[n] = cos(n/2) 0 ≤ n ≤ 40
La sinusoide s1[n] es periódica de periodo N = 30 y frecuencia fundamental 1 = 2/30. Existe un
conjunto de sólo 30 secuencias que sean periódicas de periodo N = 30. Visualice de dicho
conjunto de sinusoides, aquéllas cuyas frecuencias fundamentales son 3 = 23/30, 6 = 26/30, 10 =
210/30 y 1 = 215/30. A partir de las gráficas, determine el periodo fundamental de cada una de
ellas. ¿Qué ocurre con las oscilaciones de la sinusoide con 15?

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.

4. Operaciones elementales con secuencias.


4.1 Suma y producto entre dos secuencias.
La suma y producto entre dos secuencias x[n] e y[n] se define como la suma y producto muestra
a muestra para −∞ ≤ n ≤ +∞:

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.2 Cambio de Amplitud


Dada x[n] y la constante real A, obtenemos una nueva secuencia y[n] = Ax[n], donde cada
muestra de x[n] queda multiplicada por la constante A. Cuando |A| > 1, la secuencia resultante
y[n] es una versión amplificada de la original, mientras que si |A| < 1, y[n] es una versión
atenuada. Además, si A < 0 también se produce un cambio de polaridad.

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')

Ejercicio 10 Programe tres funciones cuyas cabeceras sean:

function [y,ny] = desp lin(x,n,m);


# Entradas:
# x : vector de entrada
# n : vector de índices temporales de la entrada
# m : valor entero del desplazamiento
# Salidas:
# y : vector desplazado linealmente
# ny : vector de índices temporales de la salida

function [y,ny] = desp circ(x,n,m);


# Entradas:
# x : vector de entrada
# n : vector de ´ındices temporales de la entrada
# m : valor entero del desplazamiento circular
# Salidas:
# y : vector desplazado circularmente
# ny : vector de ´ındices temporales de la salida

function [y,ny] = ref(x,n);


# Entradas:
# x : vector de entrada
# n : vector de ´ındices temporales de la entrada
# Salidas:
# y : vector reflejado circularmente
# ny : vector de ´ındices temporales de la salida

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

a) Efectúe un desplazamiento lineal de 10 unidades a la derecha de dicha secuencia.


b) Efectúe un desplazamiento circular de 10 unidades a la izquierda de dicha secuencia.
c) Represente la secuencia reflejada.

Anda mungkin juga menyukai