Autor: Edison Del Rosario

  • s2Eva_IIT2017_T1 PDF exp(ax)

    2da Evaluación II Término 2017-2018. Febrero 7, 2018

    Tema 1. Propuesta de solución

    Y(x) = e^{-\alpha x}

    Siendo X de tipo uniforme entre (0,T]

    f_x(x) = \frac{1}{T}

    Se puede calcular la función de densidad por cada punto de intersecciónal, al trazar una paralela al eje x que pasa por el punto y0

    f_Y(y) = \sum_k \frac{f_x(x)}{|\frac{dy}{dx}|} \Big|_{x=x_0}

    De la gráfica del enunciado se encuentra que existe un solo punto de intersección  (y0, x0).

    Para un valor de y0 se encuentra su valor equivalente en x0,

    y_0 = e^{-\alpha x_0} \ln (y_0) = \ln (e^{-\alpha x_0}) \ln (y_0) = -\alpha x_0 x_0 = \frac{\ln (y_0)}{-\alpha}

    la derivada dy/dx será

    \frac{dy}{dx} = -\alpha e^{-\alpha x}

    Reemplazando en la ecuación para fY(y):

    f_Y(y) = \frac{\frac{1}{T}}{|-\alpha e^{-\alpha x_0}|} = \frac{1}{T|-\alpha e^{-\alpha \frac{ln(y_0)}{-\alpha}}|} = \frac{1}{T|-\alpha e^{ln(y_0)}|} f_Y(y) = \frac{1}{T\alpha y}

    los valores de x se encuentran entre (0,T], por lo que los valores de y se encuentran:

    y_0 = e^{-\alpha(0)} = 1 y_T = e^{-\alpha (T)} = e^{-\alpha T}

    el rango para y se encuentra entre 1 y e-αT.

    La función de distribución acumulada:

    F_Y(y) = \int_{1}^{y} f_Y(y) dy = \int \frac{1}{T\alpha y} dy = \frac{1}{T\alpha} \int \frac{1}{y} dy = \frac{1}{T\alpha} ln(y) \Big|_{1}^{y} = \frac{1}{T\alpha}(ln(y) - ln(1)) = \frac{1}{T\alpha}( ln(y) - 0) = \frac{1}{T\alpha}ln(y) F_Y(y) = \frac{ln(y)}{T\alpha}

    Gráfica: Para que la gráfica tenga una forma representativa, α=-1.

    La auto-correlación aplica para funciones que dependen del tiempo, con diferencias de tiempo τ.
    Para éste caso, no aplica la autocorrelación. tampoco se dispone de otra variable en el problema para realizar la correlación.


    Script de python para presentar las gráficas del problema

    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    alfa = -1
    T = 1
    # Rango de x
    a = 0
    b = a + T
    # muestreo
    m = 100
    
    # PROCEDIMIENTO
    funciony = lambda x: np.exp(alfa*x)
    pdf = lambda y: 1/(T*np.abs(alfa*y))
    cdf = lambda y: np.log(y)/(np.abs(alfa)*T)
    
    x = np.linspace(a,b,m)
    yi = funciony(x)
    
    ya = funciony(alfa*a)
    yb = funciony(alfa*b)
    y = np.linspace(yb,ya,m)
    
    fy = pdf(y)
    Fy = cdf(y)
    
    # SALIDA
    plt.subplot(311)
    plt.plot(x, yi,label='y')
    plt.legend()
    plt.subplot(312)
    plt.plot(y,fy, label='fy')
    plt.legend()
    plt.subplot(313)
    plt.plot(y,Fy, label='Fy')
    plt.legend()
    plt.show()
    
  • 2Eva_IIT2017_T1 PDF exp(ax)

    2da Evaluación II Término 2017-2018. Febrero 7, 2018

    Tema 1 (25 puntos). Sea Y una variable aleatoria definida por:

    Y(x) = e^{-\alpha x} 0 \lt x \leq T \alpha = 1, T=1

    donde X es una variable aleatoria uniforme, distribuida en el intervalo
    de (0, T ]

    a) Determine la función densidad de probabilidad para Y

    b) Calcule la función de distribución acumulada para Y

    c) Grafique su resultado

    d) Determine la auto-correlación para Y

    Rúbrica: literal a (10 puntos), literal b, c, d (5 puntos cada uno)

  • El nuevo sonido de la música

    El nuevo sonido de la música

    formas de grabar la ejecución de musica de un instrumento.

  • Midi un instrumento, teclas pmf y cdf

    Se realiza el conteo de cada tecla de un instrumento para una canción desde un archivo.midi

    # Pmf de notas de un instrumento
    # desde archivo midi
    
    import numpy as np
    import matplotlib.pyplot as plt
    import mido as md
    
    # INGRESO
    archivomid = 'el_aguacate.mid'
    # instrumento
    canal = 'channel=3' 
    # para pmf
    tramos = 100     
    
    # PROCEDIMIENTO
    # Abre archivo midi
    partitura = md.MidiFile(archivomid)
    
    # un instrumento, tabla de notas
    transcurrido = 0
    deltat = 0
    accion = 'note_on'
    tabla = []
    for dato in partitura:
        linea = str(dato)
        parte = linea.split(' ')
        if (parte[0]==accion):
            valor = parte[4].split('=')
            tiempo = float(valor[1])
            transcurrido = transcurrido + tiempo
            deltat = deltat+tiempo
            if (parte[1]==canal):
                valor = parte[2].split('=')
                nota = int(valor[1])
                valor = parte[3].split('=')
                velocidad = int(valor[1])
                tabla.append([nota, velocidad, tiempo, deltat])
                deltat=0
    tabla = np.array(tabla)
    m = len(tabla)
    
    notas = tabla[:,0]
    x, cuenta = np.unique(notas, return_counts=True)
    print(x)
    print(cuenta)
    
    frelativa = cuenta/np.sum(cuenta)
    acumulada = np.cumsum(frelativa)
                
    deltax = 1
    
    # GRAFICAS
    plt.subplot(211)
    plt.bar(x,frelativa, width=deltax*0.8, align='edge')
    plt.title('notas, '+ archivomid + ' , ' + canal)
    plt.ylabel('pmf')
    
    plt.subplot(212)
    plt.plot(x,acumulada,'m')
    plt.ylabel('cdf')
    plt.show()
    
  • MIDI un instrumento

    Referencias: Wikipedia

    MIDI (Musical Instrument Digital Interface) es un protocolo estándar, una interfaz digital y conectores que permiten que varios instrumentos musicales electrónicos, ordenadores y otros dispositivos relacionados se conecten y comuniquen entre sí.

    De un archivo MIDI se puede usar las instrucciones para una solo intrumento, por ejemplo el que ejecuta la melodía, y revisar los delta tiempos entre cada nota para encontrar su pmf o cdf.

    Archivo ejemplo: el_aguacate.mid

    Formato de MIDI

    Las intrucciones midi se puden leer usando la librería mido de python.

    Para instalar la librería puede usar pip install mido en la uso de una ventana“símbolo de sistema”. Revisar instrucciones en el enlace pip install.

    Para abrir el archivo y crear un documento de texto que se pueda interpretar, se dispone del siguiente script de python:

    import mido as md
    
    # INGRESO
    archivomid = 'el_aguacate.mid'
    archivotxt = 'el_aguacatemidi.txt'
    
    # PROCEDIMIENTO
    partitura = md.MidiFile(archivomid)
    
    # SALIDA
    pistas = partitura.tracks
    n = len(pistas)
    for i in range(0,n,1):
        print(i, pistas[i])
    
    # ARCHIVO DE TEXTO
    archivo = open(archivotxt,'w')
    for dato in partitura:
        archivo.write(str(dato) + '\n')
    archivo.close()
    

    que muestra el número de pistas/instrumentos en el archivo.mid y crea un archivo de texto.

    0 <midi track 'untitled' 47 messages>
    1 <midi track 'BAJO' 1041 messages>
    2 <midi track 'PIANO' 3079 messages>
    3 <midi track 'GUITARRAS' 943 messages>
    4 <midi track 'JAZZ GTR' 383 messages>
    5 <midi track 'PLATILLO' 1002 messages>
    6 <midi track 'TAMBOR' 470 messages>
    

    También se puede procesar los datos, para un instrumento, y utilizar las medidas de tiempo como parámetro para tabular el comportamiento y obtener la pmf y cdf.

    import numpy as np
    import matplotlib.pyplot as plt
    import mido as md
    
    # INGRESO
    archivomid = 'el_aguacate.mid'
    # instrumento
    canal = 'channel=3' 
    # para pmf
    tramos = 20     
    
    # PROCEDIMIENTO
    # Abre archivo midi
    partitura = md.MidiFile(archivomid)
    
    # un instrumento, tabla de notas
    accion = 'note_on'
    tabla = []
    for dato in partitura:
        linea = str(dato)
        parte = linea.split(' ')
        if (parte[0]==accion and parte[1]==canal):
            valor = parte[2].split('=')
            nota = int(valor[1])
            valor = parte[3].split('=')
            velocidad = int(valor[1])
            valor = parte[4].split('=')
            tiempo = float(valor[1])
            tabla.append([nota, velocidad, tiempo])
    tabla = np.array(tabla)
    m = len(tabla)
    
    # Cuenta de tiempos
    xmin = 0
    xmax = np.round((np.max(tabla[:,2])*1.1),2)
    muestreo = tramos +1
    x = np.linspace(xmin,xmax,muestreo)
    deltax = x[1]-x[0]
    cuenta = np.zeros(muestreo,dtype=int)
    for f in range(0,m,1):
        valor = tabla[f,2]
        encuentra = 0
        j=0
        while not(j>=muestreo or encuentra==1):
            if x[j]>valor:
                cuenta[j-1] = cuenta[j-1]+1
                encuentra=1
            j=j+1
    frelativa = cuenta/np.sum(cuenta)
    acumulada = np.cumsum(frelativa)
                
    # SALIDA
    # Presenta pistas
    pistas = partitura.tracks
    n = len(pistas)
    print('pistas/instrumentos: ')
    for i in range(0,n,1):
        print(i, pistas[i])
    # Tabulados
    print('Tabulados: ')
    print('     x: ',x)
    print('cuenta: ', cuenta)
    
    # GRAFICAS
    plt.subplot(211)
    plt.bar(x,frelativa, width=deltax*0.8, align='edge')
    plt.title(archivomid + ' , ' + canal)
    plt.ylabel('pmf')
    
    plt.subplot(212)
    plt.plot(x,acumulada,'m')
    plt.ylabel('cdf')
    plt.show()
    

    Tarea:

    a) Descargar el archivo.mid de la canción de su preferencia, seleccionar una pista y procesar las funciones de probabilidad de masas y acumulada.

    b) para las notas del instrumento, mostrar tambien la pmf, cdf

    Ejemplo de instrucciones midi generadas en el archivo

    control_change channel=9 control=7 value=120 time=0
    note_on channel=2 note=62 velocity=64 time=1.5
    note_on channel=2 note=58 velocity=64 time=0
    note_on channel=2 note=58 velocity=0 time=0.155
    note_on channel=2 note=62 velocity=0 time=0.08
    note_on channel=0 note=43 velocity=64 time=0.065
    note_on channel=1 note=74 velocity=64 time=0
    note_on channel=1 note=70 velocity=64 time=0
    note_on channel=1 note=62 velocity=64 time=0
    note_on channel=2 note=70 velocity=64 time=0
    note_on channel=2 note=67 velocity=64 time=0
    note_on channel=9 note=46 velocity=64 time=0
    note_on channel=9 note=46 velocity=0 time=0.07
    
  • correlacion multiplicación de procesos

    Referencia: Problema León García 10.10 p.636

    Sean X(t) y Y(t) procesos independientes estacionarios en el sentido amplio.

    Defina Z(t) = X(t) Y(t)

    a) Muestre que Z(t) es estacionario en el sentido amplio (WSS).

    b) Encuentre RZ(τ) y SZ(f)

    Solución propuesta:

    E[Z(t)] = E[X(t) Y(t)]

    que por ser independientes,

    = E[ X(t) ] E[ Y(t) ] = mX mY

    RZ(τ) = E[ Z(t) Z(t+τ) ]
    = E[ X(t)Y(t) X(t+τ)Y(t+τ) ]
    = E[ X(t)X(t+τ) Y(t)Y(t+τ) ]
    = E[ X(t)X(t+τ)] E[ Y(t)Y(t+τ) ]
    = RX(τ) RY(τ)

    que tambien dependen solo de τ, por lo que Z(t) es WSS

    SZ(f) = F[RZ(τ)]
    = F[RX(τ) RY(τ)]
    = SX(f) * SY(f) (convolución)

    Referencia: Convolutions | Why X+Y in probability is a beautiful mess. 3Blue1Brown. 27-Junio-2023.

  • correlacion suma de procesos

    Referencia: Problema León García 10.6 p.636

    Sea Z(t) = X(t) + Y(t)

    ¿Bajo qué condiciones SZ(f) = SX(f) + SY(f)?

    Solución Propuesta:

    E[ Z(t)Z(t+τ) ] = E[ [X(t) + Y(t)][X(t+τ) + Y(t+τ)] ]

    = E[ X(t)X(t+τ) + Y(t) X(t+τ) + X(t)Y(t+τ) + Y(t)Y(t+τ) ]

    = E[  X(t)X(t+τ) ] +E[ Y(t) X(t+τ) ] + E[ X(t)Y(t+τ) ] + E[ Y(t)Y(t+τ) ]

    RZ(τ) = RX(τ) + RYX(τ)  + RXY(τ)  + RY(τ)

    SZ(f) = SX(f) + SYX(f)  + SXY(f)  + SY(f)

    Si X(t) y Y(t) son ortogonales, entonces:

    RXY(τ)  = RYX(τ) = 0

    SZ(f) = SX(f) + 0  + 0  + SY(f)

    SZ(f) = SX(f) +  SY(f)

     

  • autocorrelacion cuadrado y triangulo

    Referencia: Problema León García 10.4 p.635

    a) Encuentre la función de autocorrelación correspondiente a la densidad espectral de potencia de la figura.

    b) Encuentre el total de la potencia promedio

    c) Grafique la potencia en el rango de |f| > f0 como función de f0>0.

    Solución propuesta:

    a)
    S_X(f) = A \prod \Big(\frac{f}{2f_2} \Big) + (B-A) \bigwedge \Big( \frac{f}{f_1} \Big)

    R_X(\tau) = F^{-1}\Big[ A \prod \Big(\frac{f}{2f_2} \Big) \Big] + F^{-1} \Big[ (B-A) \bigwedge \Big( \frac{f}{f_1} \Big) \Big] = 2A f_2 [Sa (2\pi f_2 \tau)] + (B-A) f_1 [Sa (\pi f_1 \tau) ]^2

    b)
    P = \int_{-\infty}^{\infty} S_X(f) \delta f

    = A(2f_2) + (2f_1)\frac{(B-A)}{2} = 2A f_2 + (B-A)f_1

    c)

    la potencia en función de la frecuencia es par, por lo que se integra entre 0 y f0 y se duplica para el rango entre [-f0, f0]
    2\int_{0}^{f_0} S_X(f) \delta f =

    primera sección: 0 < f0 < f1

    2\int_{0}^{f_0} \Big[ \Big( -\frac{B-A}{f_1} \Big)f +B\Big] \delta f = 2 \Big[ \Big(-\frac{B-A}{f_1}\Big) \frac{ f^2}{2} +Bf \Big] \Big|_{0}^{f_0} = \Big(-\frac{B-A}{f_1}\Big) f_0^2 +2Bf_0 = 2Bf_0 -\frac{B-A}{f_1} f_0^2

    segunda sección: f1 < f0 < f2
    = 2[ \frac{B-A}{2}f_1 + A(f_0 - f_1) \Big]

    # leon- garcia 10.4
    # literal c
    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    A = 1
    B = 2
    f1 = 1
    f2 = 2
    
    n = 50
    final = 4
    # PROCEDIMIENTO
    f = np.linspace(0,final,n)
    P = np.zeros(n,dtype=float)
    for i in range(0,n,1):
        if f[i]= f1 and f[i]f2:
            P[i] = 2*(((B+A)/2)*f1 + A*(f2-f1))
    
    # SALIDA Grafica
    plt.plot(f,P)
    plt.vlines(f1,0,2.5*B, color='m', linestyle='dashed')
    plt.vlines(f2,0,2.5*B, color='m', linestyle='dashed')
    plt.show()
    
  • autocorrelacion AM

    Referencia: Problema León García 10.3 p.635

    a) Encuentre la densidad espectral de potencia SY(f) de un proceso aleatorio con función de autocorrelación RX(τ) cos(2π f0 τ), donde RX(τ) es también una función de autocorrelación.

    b) Grafique SY(f) si RX(τ) como en el problema 10.1a.

    Solución propuesta:

    R_Y(\tau) = R_X(\tau) \cos(2\pi f_0 \tau) S_Y(f) = F\Big[ R_X(\tau) \cos(2\pi f_0 \tau) \Big] = F\Big[ R_X(\tau) \frac {e^{j2\pi f_0 \tau} + e^{-j2\pi f_0 \tau}}{2} \Big] = \frac{1}{2} F\Big[ R_X(\tau) e^{j2\pi f_0 \tau} \Big] + \frac{1}{2} F\Big[ R_X(\tau) e^{-j2\pi f_0 \tau} \Big] = \frac{1}{2} S_X(f-f_0) + \frac{1}{2} S_X(f+f_0)

    donde SX (f) = F[RX(τ)]

  • Rectangular PSD

    Referencia: Problema León García 10.2 p.635

    Sea p(x) una función rectangular. ¿ RX(τ) = p(τ/T) es una función de autocorrelación?

    Solución propuesta:

    T=2, es función rectangular es el ancho de la base.

    S_Y(f) = F\Big[ \prod \Big(\frac{\tau}{T} \Big) \Big] = 2AT \frac {Sen(2\pi f \tau)}{2\pi fT} = AT Sa (\pi f\tau)

    La función SX(f) es negativa para algunos rangos de f. Dado que la densidad espectral de potencia es no negativa, la función rectangilar en el tiempo no es una función de autocorrelacón válida.