Está en la página 1de 8

Introducción a las señales digitales en Pylab

Dr. Ing. Marcelo Risk, Ing. Federico Milano

12/09/2011

Índice

1. Introducción 1
2. Preparación del ambiente 2
3. Generación de señales 2
3.1. El dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2. Senoidales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.3. Impulso unitario, escalón y rampa . . . . . . . . . . . . . . . . . . . . 4

4. Estadísticas básicas de una señal 6


4.1. Media, desviación estándar y varianza muestrales . . . . . . . . . . . 6
4.2. Estadísticas progresivas . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1. Introducción

Una señal es una descripción de cómo un parametro se relaciona con otro parámetro.
Por ejemplo, en electrónica es común una señal en la cual la tensión varía en el tiem-
po.
En el contexto del procesamiento de señales las mismas pueden ser clasicadas
como analógicas, en tiempo-discreto o digitales. Una señal analógica es una señal re-
presentable por una función matemática en la cual ambos parámetros pueden tomar
un rango continuo de valores. Por este motivo dichas señales son también denomi-
nadas señales continuas. Una señal en tiempo-discreto es una señal representable
por una función que puede tomar valores de un rango continuo sobre un dominio
discreto, por ejemplo, un dominio entero. El proceso de conversión por el cual se
obtiene una señal en tiempo-discreto a partir de una señal analógica se denomina
muestreo. Una señal digital es una señal en tiempo-discreto que tiene un número
discreto de niveles de amplitud. En otras palabras, una señal digital puede ser repre-
sentada como una función matemática cuyo dominio e imagen son ambos conjuntos
discretos. El proceso de conversión por el cual se obtiene una señal digital a partir
de una señal en tiempo-discreto se denomina cuanticación.

1
En este apunte daremos una introducción a las señales digitales utilizando el
ambiente PyLab, esto es, el lenguaje Python y sus extensiones SciPy, NumPy y
matplotlib.

2. Preparación del ambiente

El trabajo con Pylab, requiere de la instalación del intérprete de Python y de


los paquetes SciPy, NumPy y matplotlib. Para facilitar la utilización en forma in-
teractiva de estas herramientas, deberemos instalar a su vez el paquete IPython.
Una vez realizada la instalación, desde una línea de comandos se deberá invocar
a la interfaz interactiva de Python de la siguiente forma:
> ipython -pylab -p scipy

Esto imprimirá en pantalla un cartel similar al que sigue:


Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
Type "copyright", "credits" or "license" for more information.

IPython 0.9.1 -- An enhanced Interactive Python.


? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

IPython profile: scipy

Welcome to pylab, a matplotlib-based Python environment.


For more information, type 'help(pylab)'.

También aparecerá una línea de espera de órdenes, cuyo número entre corchetes
se incrementará a medida que se ingresen nuevos comandos:
In [1]:

El texto impreso más arriba nos muestra las diferente formas de requerir ayuda
y documentación al sistema.

3. Generación de señales

3.1. El dominio

La generación de una señal requiere en primer lugar de la creación de un dominio


sobre el cual la función que representa a la señal tome valores:

2
In [1]: xs = numpy.arange(1, 100, 0.01)

El vector referenciado por la variable xs contiene el rango numérico del uno


al cien (no incluido) de a pasos de a una centésima. Por lo general los intervalos
tratados en Python son siempre cerrados en el valor incial y abiertos en el valor
nal.
El representación impresa de un objeto referenciado por una variable puede ser
obtenida evaluando dicha variable:

In [2]: xs
Out[2]: array([ 1. , 1.01, 1.02, ..., 99.97, 99.98, 99.99])

Si quisieramos obtener el largo total de este vector, invocamos a la función len:

In [3]: len(xs)
Out[3]: 9900

Ejercicio
Generar un vector de NumPy representando un intervalo [0; 2π), con un paso
entre valores de 0,1. Utilizar el valor de π provisto por el sistema.

3.2. Senoidales

Una señal senoidal puede generarse y gracarse de la siguiente manera:

In [4]: g = sin(xs)

In [5]: pylab.plot(xs, g)

La ejecución de dicho código producirá una gráca como la que se encuentra en


la gura 1.

Figura 1: Señal senoidal, g(x) = sin(x) con 0 ≥ x < 100.

3
De esta forma hemos generado una señal senoidal que se extiende cerca de dieci-
seis ciclos. Si suponemos que la frecuencia de muestreo, fs , es de mil muestras por
segundo, entonces en total tenemos dieciseis ciclos en diez (9,9) segundos. Bajo estos
supuestos, la frecuencia de la señal generada, fg , es de unos 1,6Hz .

Ejercicio
Generar una señal senoidal de 10Hz de frecuencia y de 4 unidades de ampli-
tud, suponiendo que fs = 100 muestras/s.

3.3. Impulso unitario, escalón y rampa

El impulso unitario se escribe δ[n] y se dene como


(
1, n = 0
δ[n] = para n ∈ Z
0, n =
6 0
El impulso unitario es una función que toma el valor cero en todo su dominio
excepto en 0, donde su valor es la unidad.
1.0
0.8
0.6
Amplitud

0.4
0.2
0.0

0 5 10 15

Muestras

Figura 2: Impulso unitario sin desplazamiento, k = 0

La señal impulso unitario puede ser desplazada k unidades a derecha o a izquier-


da.
El siguiente código dentro de Pylab genera la gura 2:

In [1]: xs = numpy.arange(0, 20)


In [2]: d = numpy.zeros(20)

4
1.0
0.8
0.6
Amplitud

0.4
0.2
0.0

0 5 10 15

Muestras

Figura 3: Impulso unitario deplazado a derecha, k = 5

In [3]: d[0] = 1
In [4]: pylab.scatter(xs, d)
In [5]: pylab.xlim(-1, 20)
Out[5]: (-1, 20)
In [6]: pylab.xlabel('Muestras')
In [7]: pylab.ylabel('Amplitud')

Ejercicio
Escriba en Python una función impulso_unitario(x, k) tal que tome como
parámetros de entrada un vector x y un desplazamiento k y retorne un vector.
Por ejemplo

In [1]: d = impulso_unitario(numpy.arange(0, 4), 1)


In [2]: d
Out[2]:
array([ 0., 1., 0., 0.])

Otra señal básica es el escalón unitario (gura 4)

(
1, n ≥ 0
u[n] = para n ∈ Z
0, n < 0

5
1.0
0.8
0.6
Amplitud

0.4
0.2
0.0

0 5 10 15

Muestras

Figura 4: Escalón unitario, k = 5

y la señal rampa unitaria (gura 5),


(
n, n ≥ 0
ur [n] = para n ∈ Z
0, n < 0

Ejercicio
1. Implemente las funciones escalon_unitario(x, k) y rampa_unitaria(x, k)
en Python, asumiendo el mismo signicado para los parámetros x y k .
2. Genere la señal mostrada en la gura 6 mediante una combinación lineal
de tres señales rampa unitaria con diferentes desplazamientos.

4. Estadísticas básicas de una señal

4.1. Media, desviación estándar y varianza muestrales

La media muestral, denotada por x̄, es el valor promedio de una señal. En


términos formales, dado un conjunto de N muestras x1 ...xN de una variable aleatoria
X , la media muestral se dene como
N
1 X
x̄ = xi
N i=1

6
14
12
10
8
Amplitud

6
4
2
0

0 5 10 15

Muestras

Figura 5: Rampa unitaria, k = 5


5
4
3
Amplitud

2
1
0

0 5 10 15

Muestras

Figura 6: Combinación lineal de tres rampas unitarias desplazadas

7
En Pylab, podemos obtener la media de una señal f de la siguiente manera:
In [1] numpy.mean(f)

o
In [1] f.mean()

La desviación estándar muestral, denotada por s, es una medida de la dis-


persión o variabilidad de los valores de una señal. La misma se dene como
N
2 1 X
s = (xi − x̄)2
N − 1 i=1
El término s2 es aparece con frecuencia en estadística y se lo denomina varianza
muestral.

Ejercicio
Genere un vector de NumPy con 100 valores aleatorios y encuentre su
desviación estándar y varianza con las funciones apropiadas de dicha biblioteca.

4.2. Estadísticas progresivas

El método visto más arriba para calcular la media y la desviación estándar es


adecuado para muchas aplicaciones. Sin embargo tiene dos limitaciones. En primer
lugar, si la media es mucho mayor que la desviación estándar, la ecuación 4.1 implica
sustraer dos números muy cercanos en valor. La consecuencia de esto es un error
de redondeo muy grande. En segundo lugar, muchas veces se quiere recalcular la
media y la desviación estándar a medida que se van adquiriendo nuevas muestras.
Denominaremos a este tipo de cálculo estadísticas progrsivas.
Si x̄N −1 es la media previa a la adición de la nueva muestra xN , entonces la media
para N muestras a partir de la media de N − 1 muestras puede denirse como
1
x̄ = x̄N −1 + (xN − x̄N −1 )
N
Ejercicio
1. Tomando la fórmula para el cálculo de la media progresiva, deduzca la
fórmula para el cálculo de la desviación estándar progresiva.
2. Implemente la función mediaProgresiva(mediaPrevia, numeroDeMues-
trasPrevias, nuevaMuestra) y desviacionEstandarProgresiva(mediaPrevia,
desviacionEstandarPrevia, numeroDeMuestrasPrevias, nuevaMuestra)

También podría gustarte