예제 #1
0
def generar_pico_de_ruido(senal, fs, frec_pico, snr):
    cantidad_muestras = len(senal)
    duracion = cantidad_muestras / fs
    potencia_media_senal = calcular_potencia(senal, fs)
    potencia_ruido_db = 10 * np.log10(potencia_media_senal) - snr
    potencia_ruido = 10**(potencia_ruido_db / 10)
    omega_2_L = 2 * 2 * np.pi * frec_pico * duracion
    amplitud_ruido = np.sqrt(potencia_ruido * 2 * omega_2_L /
                             (omega_2_L + np.sin(omega_2_L)))
    t, ruido = generar_senoide(0, duracion, amplitud_ruido, frec_pico, 0, fs)
    return ruido
예제 #2
0
import numpy as np
from matplotlib import pyplot as plt

from ejemplos.practica_2.funciones import generar_senoide
from ejemplos.practica_4.funciones import generar_senal_cuadrada

lim_izq = -10
lim_der = 10
duracion_senal = lim_der - lim_izq
T = 1

fs = 2000
eje_t_1, senal = generar_senal_cuadrada(T, lim_izq, lim_der, fs)
eje_t_2, seno = generar_senoide(lim_izq, lim_der, 1, 1, 0, fs)

N = 48
n_muestras = duracion_senal * fs + 1
suma_parcial_fourier = [0 for x in range(n_muestras)]

for n in range(1, N + 1):
    seno = generar_senoide(lim_izq, lim_der, 1, (2 * n - 1) * 2 * np.pi / T, 0,
                           fs)
    coef = 1 / (2 * n - 1)
    suma_parcial_fourier += coef * seno[1]
suma_parcial_fourier *= (4 / np.pi)

plt.plot(eje_t_1, suma_parcial_fourier)
plt.show()
예제 #3
0
from ejemplos.practica_2.funciones import generar_senoide
import numpy as np
from matplotlib import pyplot as plt

t, x = generar_senoide(0, 3, 2, 50, 0, 44100)
t, y = generar_senoide(0, 3, 2, 50, np.pi, 44100)

z1 = x + y
z2 = x + (-x)

plt.plot(t, z1)
plt.show()

import numpy as np
from matplotlib import pyplot as plt

from ejemplos.practica_2.funciones import generar_senoide
from ejemplos.practica_5.funciones import calcular_transformada

duracion = 2
fs = 1000
t, x_t = generar_senoide(0, duracion, 2, 250, 0, fs)

X_w = calcular_transformada(x_t)

re_X = np.real(X_w)
im_X = np.imag(X_w)  # El coseno es real puro, asi que esto es casi nulo. Lo descarto

'''
w = np.linspace(0, 2*np.pi*fs, duracion*fs, endpoint=None)

fig, axes = plt.subplots(1, 3)
axes[0].plot(t, x_t)
axes[1].plot(w, re_X)
axes[1].set_ylim(bottom=-2000, top=2000)
axes[2].plot(w, im_X)
axes[2].set_ylim(bottom=-2000, top=2000)


plt.show()
'''

w = np.linspace(0, 2*np.pi*fs, duracion*fs, endpoint=None)
f = np.linspace(0, fs, duracion*fs, endpoint=None)
import numpy as np

from ejemplos.filtros.ruido.generador_ruido import generar_pico_de_ruido
from ejemplos.practica_2.funciones import generar_senoide
from matplotlib import pyplot as plt

fs = 44100

t, senal = generar_senoide(0, 4, 2, 440, 0, fs)
N = len(senal)
espectro = np.abs(np.fft.fft(senal))[0:int(N / 2)]

ruido = generar_pico_de_ruido(senal, fs, 16000, 20)
espectro_ruido = np.abs(np.fft.fft(ruido))[0:int(N / 2)]

senal_ruidosa = senal + ruido
espectro_ruidoso = np.abs(np.fft.fft(senal_ruidosa))[0:int(N / 2)]

f = np.linspace(0, fs / 2, len(espectro), endpoint=None)

fig, axes = plt.subplots(3, 2)

axes[0][0].plot(t, senal)
axes[0][0].set_xlabel("t (seg)")
axes[0][0].set_xlim(left=0, right=50 / 44100)

axes[0][1].plot(f, espectro)
axes[0][1].set_xlabel("f (Hz)")

axes[1][0].plot(t, ruido)
axes[1][0].set_xlabel("t (seg)")
예제 #6
0
import numpy as np
import scipy.signal as sig

from ejemplos.practica_2.funciones import generar_senoide
from matplotlib import pyplot as plt

fs = 44100
t1, x = generar_senoide(0, 3, 2, 50, 0, fs)
t2, y = generar_senoide(0, 3, 2, 400, 0, fs)
t3, w = generar_senoide(0, 3, 2, 20000, 0, fs)
t4, u = generar_senoide(0, 6, 2, 50, 0, fs)
t5, v = generar_senoide(0, 6, 2, 400, 0, fs)
t0, silencio = generar_senoide(0, 3, 0, 400, 0, fs)

z1 = np.concatenate((x, y), axis=None)
z2 = np.concatenate((x, w, y), axis=None)
z3 = np.concatenate((silencio, w), axis=None) + u + v

f, t, spect = sig.spectrogram(z3, fs)
plt.pcolormesh(t, f, spect)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [seg]')
plt.show()
from matplotlib import pyplot as plt
import numpy as np

from ejemplos.practica_2.funciones import generar_senoide
from ejemplos.practica_5.funciones import calcular_transformada, poner_a_cero_valores_nulos

fs = 500
ti = 0
tf = 5

t1, x1 = generar_senoide(ti, tf, 5, 50, -np.pi/2, fs)
t2, x2 = generar_senoide(ti, tf, 3, 100, np.pi/2, fs)
t3, x3 = generar_senoide(ti, tf, 1, 200, np.pi/3, fs)

x = x1 + x2 + x3

duracion = tf - ti

X_w = calcular_transformada(x)
X_w = poner_a_cero_valores_nulos(X_w, 0.01)

mod_X = np.abs(X_w)[0:int(len(X_w)/2)]
fase_X = np.angle(X_w)[0:int(len(X_w)/2)]

f = np.linspace(0, fs, duracion*fs, endpoint=None)[0:int(len(X_w)/2)]

fig, axes = plt.subplots(1, 2)

axes[0].stem(f, mod_X)
axes[0].set_xlabel("f (Hz)")
import numpy as np
from matplotlib import pyplot as plt

# SCRIPT
from ejemplos.practica_2.funciones import generar_senoide, calcular_energia

fs_10 = 10
fs_100 = 100
fs_1000 = 1000

t_inicial = 0
t_final = 1

t_10, senoide_10 = generar_senoide(t_inicial, t_final, 1, fs_10)
t_100, senoide_100 = generar_senoide(t_inicial, t_final, 1, fs_100)
t_1000, senoide_1000 = generar_senoide(t_inicial, t_final, 1, fs_1000)

fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
ax1.plot(t_10, senoide_10)
ax2.plot(t_100, senoide_100)
ax3.plot(t_1000, senoide_1000)

e_10 = calcular_energia(senoide_10, fs_10)
e_100 = calcular_energia(senoide_100, fs_100)
e_1000 = calcular_energia(senoide_1000, fs_1000)

print('Energia (10 muestras por segundo): ' + str(e_10))
print('Energia (100 muestras por segundo): ' + str(e_100))
print('Energia (1000 muestras por segundo): ' + str(e_1000))

plt.show()
import numpy as np

from ejemplos.practica_2.funciones import generar_senoide
from ejemplos.practica_7.funciones import estan_afinadas

fs = 44100
t1, x = generar_senoide(0, 3, 2, 50, 0, fs)
t2, y = generar_senoide(1, 8, 10, 50.5, np.pi, fs)
tol_abs = 0.6

print(estan_afinadas(x, y, fs, tol_abs))