Por Jose R. Zapata
import numpy as np
import IPython.display as ipd
import librosa, librosa.display
import matplotlib.pyplot as plt
Escala de Magnitud
A menudo, la amplitud original de una señal en el dominio de tiempo o de lafrecuencia no es perceptualmente relevante para los humanos como la amplitud convertida en otras unidades, Ej: usar una escala logarítmica.
Por ejemplo, consideremos un tono puro cuya amplitud aumenta de forma lineal. Definir la variable de tiempo:
T = 5.0 # duracion en segundos
sr = 22050 # Frecuencia de muestreo en Hz
t = np.linspace(0, T, int(T*sr), endpoint=False)
Crear una señal que su amplitud aumente linealmente
amplitude = np.linspace(0, 1, int(T*sr), endpoint=False) # Amplitud variable en el tiempo
x = amplitude*np.sin(2*np.pi*440*t) #Señal sinusoidal
ipd.Audio(x, rate=sr)
Grafica de la señal:
librosa.display.waveplot(x, sr=sr);
Ahora considere una señal cuya amplitud crece exponencialmente, es decir, el logaritmo de la amplitud es lineal:
amplitude = np.logspace(-2, 0, int(T*sr), endpoint=False, base=10.0)
x = amplitude*np.sin(2*np.pi*440*t)
ipd.Audio(x, rate=sr)
librosa.display.waveplot(x, sr=sr);
A pesar de que la amplitud crece exponencialmente, para nosotros, el aumento en el volumen parece más gradual. Este fenómeno es un ejemplo de la ley Weber-Fechner law (Wikipedia)que establece que la relación entre un estímulo y la percepción humana es logarítmica.
Percepcion de la amplitud segun la frecuencia
T = 4.0 # duracion en segundos
sr = 44100 # Frecuencia de muestreo en Hz
t = np.linspace(0, T, int(T*sr), endpoint=False)
100 Hz
# 100 Hz
x1 = np.sin(2*np.pi*100*t)
ipd.Audio(x1, rate=sr)