Psicoacustica

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);

png

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);

png

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)