Combinatorias

Referencia: León-García p.42, Gubner p.35, Ross p.10

Combinatorias es el estudio de metodos sistemáticos de conteo, las cuatro clases de problemas principales son:

  1. Muestreo ordenado con reemplazo
  2. Muestreo ordenado sin reemplazo
  3. Muestreo no ordenado sin reemplazo
  4. Muestreo no ordenado con reemplazo

Muestreo ordenado con reemplazo

Se llaman variaciones con repetición de m elementos tomados de n en n, a los diferentes grupos que pueden formarse con los m elementos dados, tomados de n en n.
Dos grupos pueden ser distintos entre si, si tienen diferentes elementos en diferente orden.

El número de posibles k-tuplas en distinto orden (x1x2x3… xk) con elementos xi de un grupo de ni elementos diferentes es:

número de k-tuplas en orden distinto = n1n2n3… nk

Ejemplo : Posibles rutas para un paquete de internet

León-García E2.15 p.42.
Una urna tiene cinco pelotas numeradas de 1 al 5. Suponga que se sacan dos pelotas de la urna con reemplazo.

– ¿Cuántos pares diferentes de se pueden obtener?

pares diferentes = 5 * 5 = 52 = 25 pares diferentes

– ¿Cuál es la probabilidad que en se repitan las pelotas?

las formas de repetir son (1,1),(2,2),(3,3),(4,4) y (5,5), en total 5 de un total de 25 pares diferentes, por lo que la probabilidad será 5/25 = 1/5 = 0.20


Muestreo ordenado sin reemplazo

Se seleccionan k elementos en sucesi{on sin reemplazo de una población A de n elementos diferentes. Con k≤n, la primera vez se pueden escoger n1=n elementos diferentes, la segunda n2=n-1, la tercera n3=n-2, … en la última nk=n-(k-1)

número de k-tuplas en orden distinto = n(n-1)(n-2)…(n-k+1)

n(n-1)(n-2)...(n-k+1) = \frac{n!}{(n-k)!}

Ejemplo :

León-García E2.17 p.43.
Una urna tiene cinco pelotas numeradas de 1 al 5. Suponga que se sacan tres pelotas sin reemplazo .

– ¿Cuántos tripletas diferentes de se pueden obtener?

tripletas diferentes = 5 * 4 * 3 = 60 formas diferentes

(5!)/(5-3)! = 5!/2! = 5*4*3*(2!)/2! =5*4*3 = 60 formas diferentes

import scipy.special as sts

sts.perm(5,3)
60.0

Muestreo no ordenado sin reemplazo

Se sacan k elementos de un grupo A de n objetos diferentes sin reemplazo, y que se escriben los resultados sin importar e orden. Sería como colocarlos en otro conjunto B, el orden deja de importar.

En el nuevo conjunto B, existen k! formas ordenadas de seleccionar los objetos, y Ckn será el valor buscado de las combinaciones de tamaño k del conjunto A de n elementos.

C_k^n k! = n(n-1)(n-2)...(n-k+1) = = \frac{n!}{(n-k)!}

que simplificando se convierte el «coeficiente binomial» y se lee «de n toma k elementos»:

C_k^n = \frac{1}{n!} \frac{k!}{(n-k)!} = \left( \begin{array}{c} n \\ k \end{array} \right)

da lo mismo escoger k elementos del conjunto A, que dejar n-k elementos en el conjunto, por lo que:

\left( \begin{array}{c} n \\ k \end{array} \right) =\left( \begin{array}{c} n \\ n-k \end{array} \right)

Ejemplo :

Gubner E 1.38 p.38.

Se requiere conformar un jurado de 12 personas seleccionados de un total de 20 jueces. ¿Cuántas formas posibles existen para conformar el jurado?. No importa el orden.

\left( \begin{array}{c} 20 \\ 12 \end{array} \right) = \frac{20!}{12!8!} = 125970
import scipy.special as sts

sts.comb(20,12,repetition=False)
125970.0

Muestreo no ordenado con reemplazo

Se toman k objetos de un grupo de n objetos diferentes con reemplazo, se escribe el resultado sin importar el orden.

\left( \begin{array}{c} n-1+k \\ k \end{array} \right) = \left( \begin{array}{c} n-1+k \\ n-1 \end{array} \right)

Ejemplo : Dispensadora de frutas

(Gubner Ej 1.38 )

En una maquina dispensadora automática se entregan manzanas, bananas y peras. Por un precio fijo, se puden obtener cinco frutas seleccionadas por el cliente.

El proceso se maneja electrónicamente con una secuencia de 7 bits que los ceros (0) representan las manzanas, bananas y peras en orden y se separan por un bit uno (1) como en el ejemplo:

0100100 son un manzana, dos bananas y dos peras.

El primer grupo de 0’s es manzanas, el segundo grupo de 0’s son bananas y el grupo final de 0’s son peras.
¿Cuántas opciones tienen los clientes?

Solución: Equivale a preguntar cuántas secuencias de 7 bits hay con cinco ceros y dos unos.

\left( \begin{array}{c} 7 \\ 5,2 \end{array} \right) = \left( \begin{array}{c} 7 \\ 5 \end{array} \right) =\left( \begin{array}{c} 7 \\ 2 \end{array} \right)
import scipy.special as sts

c1 = sts.comb(7,2)
c2 = sts.comb(7,5)

print(c1)
print(c2)
21.0
21.0

3. Eventos Independientes

Referencia: León-García p.53, Gubner p.30, Parsen p.13/pdf.34, Ross p.10

Eventos Independientes

Conocer que al ocurrir un evento B no se altera la probabilidad de otro evento A, se dice que A es independiente de B. Para lo cual se cumple que:

P[ A \cap B ] = P[A] P[B]

que implica que:

P[A|B] = P[A]

y que:

P[B|A] = P[B]

Ejemplo: Transmisión de paquetes por Routers

Gubner E1.23 p.31

Un mensaje se transmite en forma de paquete de dato desde la ciudad de Guayaquil a Daule usando los “Router1”, un enlace de fibra óptica y el “router2” mostrados en la figura. Cada router puede descartar un paquete con una probabilidad p=0.01.

¿Cuál sería la probabilidad de transmitir con éxito un paquete entre el origen y destino?

Routers Guayaquil-Daule

Un paquete se transmite con éxito si y solo si ninguno de los routers descarta el paquete.

En lenguaje de eventos se dice que: descartar un paquete por el router 1 es D1 y para el router 2 es D2.

Sea el evento A cuando el paquete se transmite con éxito, ocurre solo cuando el paquete no se descarta en ningún router.

A = D_1^c \cap D_2^c

El problema indica que D1 y D2 son eventos independientes, por lo que D1c y D2c también son independientes, entonces:

P[A] = P[D_1^c \cap D_2^c] = P[D_1^c] P[D_2^c] = [1-P[D_1][1-P[D_2]] = (1-p)^2

dado que p=0.01, entonces P[A] = (1-0.01)2 = 0.9801

otra forma de ver el problema:

D1c D1
D2c (1-p)(1-p) (1-p)p
D2 (1-p)p p2

con números es:

D1c D1 PMarginal
D2c 0.9801 0,0099 0,99
D2 0,0099 0,0001 0,01
Pmarginal 0,99 0,01 1

Ejemplo: urnas con pelotas numeradas y de color

León-García E2.31 p.54

De una urna que contiene dos pelotas negras numeradas 1 y 2, y dos blancas numeradas 3 y 4, se obtienen una pelota.

Sean los eventos en los que se obtiene :

A = {(1,negra), (2,negra)}, «una pelota negra»
B = {(2,negra), (4,blanca)}, «una pelota numerada par»
C = {(3,blanca), (4,blanca)}, «una pelota con número mayor que 2»

a) Los eventos A y B ¿son independientes?
b) Los eventos A y C ¿son independientes?

Desarrollo :
a) las probabilidades de A y B son:

P[A] = P[B] = \frac{2}{4} = \frac{1}{2} P[A \cap B] = P[\{(2,negra)\}] = \frac{1}{4}

entonces:

P[A \cap B] = \frac{1}{4} = P[A]P[B]

por lo que A y B son independientes. Otra forma de escribirlo es:

P[A|B] = \frac{P[A \cap B]}{P[B]} = \frac{P[\{(2,negra)\}]}{P[\{(2,negra), (4,blanca)\}]} = = \frac{1/4}{1/2} = \frac{1}{2}

y para P[A]:

P[A] = \frac{P[A]}{P[S]} = \frac{P[\{(1,negra), (2,negra)\}]}{P[\{(1,negra), (2,negra),(3,blanca), (4,blanca) \}]} = = \frac{1/2}{1}

las ecuaciones implican que P[A]=P[B] debido que la proporción de las salidas en S tienen como resultado que A ocurre el mismo número de veces que B. Por lo que al conocer cuando ocurre B, no se altera la probavilidad de que ocurra A.

b) Los Eventos A y C no son independientes dado que:
P[A \cap C] = P[\emptyset] = 0
P[A|C] = 0 \neq P[A] = \frac{1}{2}

A y C son mutuamente excluyentes dado que A∩C=∅, por lo que ocurra C implica que A no ha ocurrido de forma definitiva.


En general, si dos eventos tienen probabilidad diferente de cero y son mutuamente excluyentes, no pueden ser independientes.

Si fueran independientes y mutiamente excluyentes:

0=P[A∩B] =P[A]P[B]

lo que implica que al menos uno de los eventos deben tener probabilidad cero.

Probabilidad Condicional

Referencia: León-García p.47, Gubner p.27, Parsen p.41/pdf.62, Ross p.7

Dos eventos A y B, relacionados de forma que al ocurrir uno, por ejemplo B, se altera la posibilidad de que ocurra el otro, por decir A, lleva a manejar el concepto de probabilidad condicional:

P[A|B] = \frac{ P[A \cap B] }{ P[B] }, \text{para } P[B] > 0

Ejemplo :

Una empresa ensambladora de televisores en la ciudad obtiene sus partes de dos proveedores (marca1 y marca2) para reducir el riesgo falla de suministros.
Dado que el proveedor tiene relación directa con la falla de sus equipos, la empresa busca encontrar:

¿cuál proveedor entrega las partes con menor defecto?.

Desarrollo:

Si se analizaron n=1688 televisores para determinar si están buenos o dañados, se resume  que:

marca1 marca2
bueno 754 499
dañado 221 214

Observe que la suma de la primera columna es el número de partes de marca1: N[marca1].

La frecuencia relativa de las partes buenas de marca 1 es:

\frac{N[bueno,marca1]}{N[marca1]}

Para cada parte existen cuatro posibles resultados:

marca1 marca2
bueno N[bueno, marca1] N[bueno, marca2]
dañado N[dañado, marca1] N[dañado, marca2]

Observe que las frecuencias relativas de las partes buenas de la marca 1 tambien se puede escribir como el cociente de frecuencias relativas:

\frac{N[bueno,marca1]}{N[marca1]} = \frac{\frac{N[bueno,marca1]}{n} }{ \frac{N[Marca1]}{n}}

La probabilidad condicional de que se use una parte buena, sabiendo que se ha seleccionado de la marca1 se puede escribir como P[bueno|marca1]

Si A=bueno, B=marca1 y si P(marca1)>0 entonces:

P[A|B] = \frac{P[A \cap B]}{P[B]} P[A \cap B] = P[A|B]P[B]
B marca2
A P[A∩B] N[bueno, marca2]
dañado N[dañado, marca1] N[dañado, marca2]
P[B]

interseccion

Ejemplo : Sistema de Comunicación Binaria

León-García E2.26 p.50

Los sistemas de comunicación se pueden modelar de la siguiente manera: el usuario ingresa un 0 o un 1 en el sistema y se transmite la señal, luego el receptor detecta la señal transmitida y lo convierte nuevamente en un 0 ó 1.

Suponga que el usuario envia 0´s con probabilidad (1-p) y 1’s con probabilidad p y que al receptor le llegan datos errados con probabilidad ε.

Para cada i=0,1 sea Ai el evento que la «entrada fué i» y sea Bi el evento que lo «recibido en el receptor fue i».

Encuentre las probabilidades P[Ai ∩ Bi] para i=0,1 y j=0,1

canal binario diagrama

B0 B1
A0 (1-p)(1-ε) (1-p)ε
A1 p(1-ε)

p[A0 ∩ B0] = (1-p)(1-ε)

p[A0 ∩ B1] = (1-p)ε

p[A1 ∩ B0] = pε

p[A1 ∩ B1] = p(1-ε)

El diagrama de árbol para el sistema es:

canal binario árbol

1. Experimento, espacio muestral, evento

Experimento

Un experimento aleatorio es un experimento en que el resultado varia de forma no predecible cuando se repite bajo las mismas condiciones.

Un experimento aleatorio se especifica dado el procedimiento experimental y el grupo de uno o mas medidas y observaciones.

  • Un solo procedimiento, pero con diferentes en las observaciones
  • puede tener mas de una medida u observación
  • las medidas pueden ser valores contínuos
  • pueden ser secuenciales, o una secuencia de experimentos más simples o subexperimentos

Espacio Muestral

Se define como resultado o muestra ζ (zeta griega) de un experimento aleatorio como el resultado que no puede ser descompuesto a partir de otros resultados, o una combinación de ellos.

El espacio muestral S de un experimento aleatorio se define como el grupo de todos los resultados posibles, que se especifican como:

  • Lista de todos los resultados a={0,1,2,3}
  • Mediante una propiedad de los resultados A={x: 0≤x≤3, x es entero}

Un espacio muestral discreto es contable, ejemplo las caras de un dado.
un espacio muestral contínuo es contable infinito o no contable, ejemplo los valores de voltaje de descarga de un capacitor, o el tiempo hasta la primera falla de un equipo.

Algunas veces es conveniente incluir en el espacio muestral el resultado imposible. Ejemplo, incluir que el espacio muestral es un número real positivo para el tiempo antes de la falla de un dispositivo, aunque conocemos que no tiene tiempo de operación infinito.

Eventos

Normalmente no es de interés un resultado, muestra u observación específica, el interés se enfoca más en que ocurra un evento, lo que requiere usar subgrupos de S. Por ejemplo, que el voltaje de una señal sea negativo {señal: -∞ < señal < 0}

Dos eventos de interés especial son: evento de certeza S, y el evento imposible o nulo ∅, que no resultados o nunca ocurre.

Eventos Clase

La teoría de probabilidades usa también lo que se conoce como una clase F con los eventos de interés, que son aquellos a los que se les asigna valores de probabilidad.

Referencia: Leon-García 2.1 p21, Gubner 1.1 p.7

Axiomas de probabilidad

Referencia: Leon-García 1.3.3 p.23, Gubner 1.4 p.36, Parsen p.9/pdf.30, Ross p.4

La teoría de probabilidad inicia con un grupo de axiomas que indican las propiedades que los valores de probabilidad deben satisfacer.

Supone que se definieron:

  1. el experimento aleatorio con todos los posibles valores en el espacio muestral S
  2. las clases y subgrupos llamados eventos
  3. cada evento A tiene asignado un valor P[A]

con lo que se satisfacen los AXIOMAS:

  • Axioma I    :  0 ≤ P[A] ≤ 1
  • Axioma II   : P[S] = 1
  • Axioma III  : Si A∩B=∅,  P[A∪B] = P[A] + P[B]

Lo que se expresa como, que la probabilidad siempre es no negativa, que la probabilidad del espacio muestral es 1, que incluye la probabilidad P[∅] que a veces se le denomina «imposible» e igual a 0.

Resultados de los axiomas

Unión de eventos finitos y separados

P\left[ \bigcup\limits_{n=1}^{N} A_n \right] = \sum\limits_{n=1}^{N} P[A_n]

Probabilidad de un complemento

P[A^c] = 1 - P[A]

Evento imposible

P[\varnothing] = 0

Monotonicidad

A \subset B ,\text{ implica } P[A] \leq P[B]

Inclusión – Exclusión

P[A \cup B] = P[A] + P[B] - P[A \cap B]

Propiedades de límites

P \left[ \bigcup\limits_{n=1}^{\infty} A_n \right] = \lim \limits_{N \rightarrow \infty} P\left[ \bigcup\limits_{n=1}^{N} A_n \right] P \left[ \bigcap\limits_{n=1}^{\infty} A_n \right] = \lim \limits_{N \rightarrow \infty} P\left[ \bigcap\limits_{n=1}^{N} A_n \right]

Union bound/countable subadditivity

P \left[ \bigcup\limits_{n=1}^{\infty} A_n \right] \leq \sum \limits_{n=1}^{\infty} P[ A_n]

2. Regularidad estadística y Frecuencia Relativa

Para que un modelo sea útil, se debe poder realizar predicciones del comportamiento del sistema en el futuro, es decir debe tener un comportamiento regular.

Muchos modelos de probabilidad en ingeniería se fundamentan en los promedios obtenidos en las secuencias de resultados, así las muchas repeticiones o intentos del experimento aleatorio son consistentes y tienden aproximadamente al mismo valor.

Esta es la propiedad de regularidad estadítica.

En el experimento de la urna y pelotas con S={0, 1, 2}, se pueden procesar las muestras del archivo: aleatoriosurna100.txt

muestras = [1,1,1,1,1,2,1,2,2,2,2,0,0,0,0,0,2,1,2,2,
            0,2,0,2,1,2,1,2,2,0,2,0,1,2,0,2,2,0,2,1,
            1,1,1,1,0,2,1,2,1,0,1,0,1,2,0,2,2,2,1,0,
            2,2,0,2,0,2,1,1,0,0,2,1,0,1,0,0,2,1,2,0,
            1,1,2,0,0,0,1,0,2,2,2,0,0,0,1,2,1,1,0,0]

Algoritmo en Python

Para seleccionar los valores únicos de las muestras y contar el número de veces de cada uno se puede usar la instrucción de numpy np.unique

# Muestras de una urna con pelotas S=[0,1,2]
# propuesta: edelros@espol.edu.ec
import numpy as np

# INGRESO
# archivotxt=input('nombre del archivo.txt: ')
archivotxt = 'aleatoriosurna100.txt'

# PROCEDIMIENTO
muestras = np.loadtxt(archivotxt)
n = len(muestras)

# cuenta los únicos
[unicos,cuenta] = np.unique(muestras,return_counts=True)

# une en tabla N, y aplica T transpuesta
N = np.asarray((unicos, cuenta)).T 

# SALIDA 
print('los eventos unicos:  ', unicos)
print('la cuenta de unicos: ', cuenta)
print('Nk:')
print(N)
los valores unicos:   [ 0.  1.  2.]
la cuenta de unicos:  [33 31 36]
Nk:
[[  0.  33.]
 [  1.  31.]
 [  2.  36.]]

El número de veces que aparece la pelota 0 en el experimento es N0(n)=33,la pelota N1(n)=31 y N2(n)=36.


Frecuencia relativa

La frecuencia relativa de un resultado k, se define como:

f_k(n)=\frac {N_k(n)}{n}

y lo que la regularidad estadística quiere decir es que fk(n) varía siempre acercandose a una constante pk cuando n tiende a ser muy grande.

lim_{n\to\infty} f_k(n) = p_k
# frecuencia relativa
fk  = cuenta/n
fkn = np.asarray((unicos, fk)).T
print(fkn)
[[ 0.    0.33]
 [ 1.    0.31]
 [ 2.    0.36]]

Tarea

Repita el experimento de la urna con n=1000 intentos, y determine las frecuencias relativas de cada pelota. Use el algoritmo de la hoja «modelo de probabilidad» para generar el archivo de aleatorios


Ejercicios

Referencia: Gubner 1.1 p.18

Se lanza una moneda 100 veces, y se anota la frecuencia relativa de las caras (0) y sellos (1). La experiencia nos indica que la frecuencia relativa debería estar alrededor de 0.5. Realice el experimento simulado y compare los resultados.

# Simulador de lanza monedas [0,1]
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
intentos = 100
eventos  = 2

# PROCEDIMIENTO
# lanza moneda
caramoneda = np.random.randint(eventos,size=intentos)
# cuenta los únicos
[unicos, cuenta] = np.unique(caramoneda,return_counts=True)

# frecuencia relativa
fk  = cuenta/intentos

# une en tabla fkn, y aplica T transpuesta
fkn = np.asarray((unicos, fk)).T 

# SALIDA
print(' caras de moneda: ')
print(caramoneda)
print('frecuencia relativa:')
print(fkn)

# grafica pmf
plt.plot(caramoneda,'o--')
plt.xlabel('intentos')
plt.ylabel('caramoneda')
plt.margins(0.1)
plt.show()

 caras de moneda: 
[0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 
 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 0 1 1 1 
 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 1
 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1
 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 0 0 1 1 1]
frecuencia relativa:
[[ 0.    0.55]
 [ 1.    0.45]]

Ejercicio

Referencia: Gubner 1.2 p.18, Leon-García pdf/p.21

Un experimento por si mismo es lanzar una moneda 100 veces y guardar las frecuencias relativas de cada caras.

Dado que el numero de caras puede estar en el rango entre 0 y 100, hay 101 posibilidades de respuesta.

Realice el experimento anterior 1000 veces y almacene la frecuencia relativa para cada experimento. Muestre los resultados.

# Simulador de lanza monedas [0,1]
# Ejercicio: Gubner 1.2 p.18, Leon-García pdf/p.21
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
experimentos = 1000
intentos = 100
eventos  = 2

# PROCEDIMIENTO
# Para cada experimento
resultado = np.zeros(shape=(experimentos,eventos),dtype=int)
for i in range(0,experimentos):
    
    # lanza moneda
    caramoneda = np.random.randint(eventos,size=intentos)
    n=len(caramoneda)
    [unicos, cuenta] = np.unique(caramoneda,return_counts=True)
    
    # resultado de cada experimento
    for j in range(0,eventos):
        resultado[i][j] = cuenta[j]

# Frecuencias relativas por evento
s = np.arange(eventos)
fr_cuenta = []
fr_unicos = []
for evento in s:
    unevento = resultado[:,evento]
    [unicos,cuenta] = np.unique(unevento,return_counts=True)
    fr_cuenta.append(cuenta)
    fr_unicos.append(unicos)

# SALIDA - gráfica
for evento in s:
    plt.plot(fr_unicos[evento]/100,fr_cuenta[evento],label=str(evento))
plt.xlabel('frecuencia relativa')
plt.legend()
plt.show()

Tarea

Escriba sus observaciones en el ejercicio anterior, cambiando el número de intentos en el rango de [10, 100000].

Referencia: Leon-García 1.3 p.5, Gubner p.3

4. Modelos de Probabilidad

Referencia: Leon-García 1.3 p.4

Muchos modelos de señales muestran variaciones impredecibles y un comportamiento aleatorio o probabilístico.

En un experimento aleatorio, repetido sobre las mismas condiciones, entrega resultados que varian de forma poco predecible. Si consideramos realizar un modelos determinístico, encontramos que no es el más apropiado al predecir siempre el mismo resultado.

Experimento aleatorio clásico

http://www.gifsanimados.org/data/media/994/bingo-imagen-animada-0002.gif

En un ánfora se colocan tres pelotas de igual tamaño numeradas con 0, 1 y 2, se agita el ánfora para que no exista un «orden» predeterminado.

Al sacar una pelota cualquiera, no se podría predecir cual será, luego se anota el número de la pelota y se la devuelve al ánfora.

El resultado del experimento, cada vez que se realiza un intento, es un número que pertenece al grupo S={0,1,2}, que formalmente se lo denomina espacio muestral

El resultado del experimento para 20 intentos, se obtiene un vector con los valores siguientes:

modeloprob01.png

Simulación en Python

Para simular el experimento con python, se puede usar el generador de enteros aleatorios np.random.randint().

# Simulador de Urna con pelotas 0,1,2 
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
intentos = 20
pelotas  = 3

# PROCEDIMIENTO
aleatorios = np.random.randint(pelotas,size=intentos)

# SALIDA
print(aleatorios)

# grafica
plt.plot(aleatorios,'o-')
plt.xlabel('intentos')
plt.ylabel('aleatorios')
plt.margins(0.1)
plt.show()

# SALIDA - ARCHIVO
archivotxt = 'aleatoriosurna.txt'
np.savetxt(archivo, aleatorios, fmt='%d ')
print(' ... archivo: '+archivotxt+' guardado ...')

Revise la aplicación codificar a morse

Ahora, revise el resultado obtenido al codificar un mensaje cualquiera en morse, y realice sus observaciones:

codigo morse :
'. ... .--. --- .-.. .. -- .--. ..- .-.. ... .- 
 -. -.. --- .-.. .- ... --- -.-. .. . -.. .- -..
 -.. . .-.. -.-. --- -. --- -.-. .. -- .. . -. -
 --- ' 
  1. ¿Cuál sería el conjunto posible de resultados?
  2. defina el espacio muestral S

Señal Componentes

Si diseña un equipo para transmitir el tono «la» de 440Hz, debe tomar en cuenta que no siempre es posible obtener una expresión matemática «sencilla» de una señal.

Escuche los siguientes sonidos, vea sus gráficas y realice sus observaciones:

440Hz_44100Hz_16bit_05sec.wav

440Hz_piano.wav

440Hz_violin_A4.wav

senal440Hz_pianoviolin

        • Proponga algunas expresiones matemáticas para cada una de las graficas mostradas.
        • ¿Que tienen en común cada una de las señales?
        • ¿Que tienen de diferente?

Algoritmo en Python

Para obtener la gráfica de los sonidos, se leen los datos y frecuencias de muestreo de cada uno de los archivos.wav

# Señales analógicas
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO
archivo1 = '440Hz_44100Hz_16bit_05sec.wav'
[muestreo1, sonido1] = waves.read(archivo1)

archivo2 = '440Hz_piano.wav'
[muestreo2, sonido2] = waves.read(archivo2)

archivo3 = '440Hz_violin_A4.wav'
[muestreo3, sonido3] = waves.read(archivo3)

# SALIDA - Observacion intermedia
print('archivo, frecuencia , dimensiones:')
print('sonido1: ', muestreo1, np.shape(sonido1))
print('sonido2: ', muestreo2, np.shape(sonido2))
print('sonido3: ', muestreo3, np.shape(sonido3))

con lo que se obtiene:

archivo, frecuencia , dimensiones:
sonido1:  44100 (220500,)
sonido2:  11025 (16538,)
sonido3:  22050 (98160,)

Nota: si el archivo.wav tiene etiquetas, se descartan para el ejercicio. por lo que se presenta una advertencia «WavFileWarning».

c:\python34\lib\site-packages\scipy\io\wavfile.py:179: WavFileWarning: Chunk (non-data) not understood, skipping it.
  WavFileWarning)

Se observa que:

  • todos los «sonidos» son monofónicos,
  • las frecuencias de muestreo de cada archivo son diferentes
  • las dimensiones de cada «sonido» o cantidad de muestras indican una duración diferente

Se recomienda escuchar nuevamente cada sonido y decidir el intervalo de observación para las gráficas. Se propone usar una ventana de observación o fragmento desde de los 1.2 segundos por 11 milisegundos.

Se extraen los fragmentos de cada sonido y se determinan los tiempos a los que corresponden basados en cada dt, con lo que se grafican los fragmentos.

# PROCEDIMIENTO
# ventana de observación
inicia  = 1.2
termina = 1.211
canal   = 0

# Extraen los fragmentos de sonido
dt1 = 1/muestreo1
t1  = np.arange(inicia,termina,dt1)
muestras   = len(t1)
fragmento1 = sonido1[int(inicia/dt1):int(inicia/dt1)+muestras]

dt2 = 1/muestreo2
t2  = np.arange(inicia,termina,dt2)
muestras   = len(t2)
fragmento2 = sonido2[int(inicia/dt2):int(inicia/dt2)+muestras]

dt3 = 1/muestreo3
t3  = np.arange(inicia,termina,dt3)
muestras  = len(t3)
fragmento3 = sonido3[int(inicia/dt3):int(inicia/dt3)+muestras]

# SALIDA
# grafica
plt.subplot(311)
plt.plot(t1,fragmento1)
plt.ylabel('sonido1(t)')

plt.subplot(312)
plt.plot(t2,fragmento2)
plt.ylabel('sonido2(t)')

plt.subplot(313)
plt.plot(t3,fragmento3)
plt.ylabel('sonido3(t)')
plt.xlabel('t segundos')

plt.show()

senal440Hz_pianoviolin
Una vez obtenidas las gráficas, realice observaciones adicionales a cada una de las señales de sonido:
1.
2.
3.

Pregunta:
Para la nota musical «la», ejecutada en un violin tradicional tradicional de madera, ¿tendrá la misma forma de señal siempre?.

Considere las siguientes situaciones:
a. Tocada por diferentes músicos
b. en diferentes lugares
c. en diferentes días


Tarea

Buscar la nota «La» en otros instrumentos en formato.wav. De ser necesario realizar observaciones adicionales.

Referencia: Lathi 1.3.2 pdf/p.63, Estándar ISO16, Frecuencias de afinación de un piano

Señal Determinística

Referencia: Lathi 1.3.2 pdf/p.63, Estándar ISO16, Frecuencias de afinación de un piano

Señal determinística, conocida como una señal cuya descripción física es completamente conocida por su forma matemática o gráfica.

Ejemplo: Señal 440 Hz

Es una señal que puede ser escrita de forma determinística como:

x(t)= cos(2\pi f t)

Siendo f=440 Hz

La señal de 440 Hz es usada como la frecuencia referencia para la afinación de todos los instrumentos musicales desde 1936, adoptada por ISO en 1955 y reafirmado en 1975 como ISO16.

señal 440Hz

Algoritmo en Python – Graficar en dominio del tiempo

El audio del archivo.wav se puede escuchar con windows media player. Para visualizar la forma de señal del archivo.wav, se puede usar python para leer el archivo y graficar la señal en el dominio del tiempo.

El archivo.wav debe encontrarse en el mismo directorio que el archivo .py de python.

# Señales analógicas
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO
# archivo = input('archivo.wav a leer: ')
archivo = '440Hz_44100Hz_16bit_05sec.wav'
[muestreo, sonido] = waves.read(archivo)

# SALIDA - Observación intermedia
print('frecuencia de muestreo: ', muestreo)
print('dimensiones de matriz: ', np.shape(sonido))
frecuencia de muestreo:  44100
dimensiones de matriz:  (220500,)

Nota: si el archivo.wav tiene etiquetas, se descartan para el ejercicio. por lo que se presenta una advertencia «WavFileWarning».

c:\python34\lib\site-packages\scipy\io\wavfile.py:179: WavFileWarning: Chunk (non-data) not understood, skipping it. WavFileWarning)

Existen 220500 muestras en el archivo del ejemplo, que en una sola gráfica puede resultar muy denso y poco observable. La gráfica se limitará a una ventana de tiempo del archivo definida en el rango de tiempo por inicio y termina, con valores en el rango de milisegundos.

El rango de la ventana puede cambiarse si es de interés usar otro rango de tiempo.

De las dimensiones de la matriz (220500,), se determina que el audio es de tipo monofónico al tener una sola dimensión. El audio estéreo tiene dimensiones de (n,2).

# PROCEDIMIENTO
# ventana de observación
inicia  = 0
termina = 0.005
canal   = 0

# selecciona datos
dt = 1/muestreo
t  = np.arange(inicia,termina,dt)
muestras = len(t)
fragmento = sonido[int(inicia/dt):int(inicia/dt)+muestras]

# SALIDA
plt.plot(t,fragmento)
plt.ylabel('sonido(t)')
plt.xlabel('t segundos')
plt.show()

señal 440Hz

Aunque la señal es simple de ver, y oir, la riqueza del sonido de un instrumento corresponde a otros componentes de frecuencia que los hace únicos al oido estando en la misma nota musical.