Índice de inteligibilidad del habla
Normas aplicables: ANSI S3.5Referencias: French y Steinberg 1947
El índice de inteligibilidad del habla predice cuánto de una señal de habla
es audible, y por tanto inteligible, para un oyente en una condición dada de
ruido y audición. Reduce un espectro de habla, un espectro de ruido y un umbral
auditivo a un único número en [0, 1]: 0 cuando nada útil alcanza al oyente,
1 cuando todo el espectro portador del habla es audible. Esta página cubre los
cuatro procedimientos por bandas de ANSI S3.5-1997 (R2017): el método por
bandas de tercio de octava (18 bandas de 160 Hz a 8000 Hz), que es el valor
por omisión y el que recorren los apartados 1 a 4, y los métodos por bandas
críticas, por bandas críticas de contribución equitativa y por bandas de octava
del apartado 5.
1. Entradas y la función de importancia de banda
Sección titulada «1. Entradas y la función de importancia de banda»Las tres entradas son niveles espectrales equivalentes (ANSI S3.5-1997, apartados 3.11 y 3.55) muestreados en los 18 centros de banda de tercio de octava: el nivel espectral del habla , el nivel espectral del ruido (ambos en dB SPL) y el umbral de audición (en dB HL). Cada banda contribuye a la inteligibilidad en proporción a su función de importancia de banda (ANSI S3.5-1997 Tabla 3, material de habla promedio), que suma uno sobre las 18 bandas.
from phonometry import speech
# El espectro de habla estándar de esfuerzo normal (Tabla 3) en silencio, audición normal.result = speech.speech_intelligibility_index("normal")print(round(result.sii, 3)) # 0.996 (casi todo audible)print(round(speech.sii.BAND_IMPORTANCE.sum(), 6)) # 1.0
result.plot() # audibilidad por banda y su contribución ponderada (necesita matplotlib)Sin ruido y con un umbral de audición normal, el espectro de habla estándar es casi totalmente audible, por lo que el índice se acerca a uno; el pequeño déficit es el propio autoenmascaramiento del habla del oyente.
La función de importancia es donde vive el conocimiento perceptivo de la norma. Desciende de los experimentos de articulación que sustentan el índice de articulación de French y Steinberg: los oyentes puntuaban sílabas sin sentido oídas a través de filtros que eliminaban una parte del espectro cada vez, y la caída de acierto mide cuánta inteligibilidad transporta cada banda. El resultado es llamativamente desigual, y ajeno a dónde está la energía del habla: las cinco bandas de 1250 Hz a 3150 Hz transportan en torno al 43 % de la inteligibilidad (ahí viven las pistas de punto y modo de articulación de las consonantes), mientras que las cinco bandas más bajas, de 160 Hz a 400 Hz, transportan en torno al 11 % aunque contienen casi la mitad de la potencia del habla. El de la Tabla 3 es el compromiso para habla promedio; el Anexo B de la norma tabula funciones de importancia alternativas para materiales de ensayo concretos (sílabas sin sentido, listas de palabras monosílabas, pasajes cortos), que desplazan el peso según la redundancia del material.
Los niveles de banda no son niveles espectrales
Sección titulada «Los niveles de banda no son niveles espectrales»Esta es la trampa que arruina en silencio un SII calculado a partir de datos medidos. Un nivel espectral equivalente es el nivel que tendría la banda si su energía se repartiera sobre 1 Hz, así que un nivel de banda de tercio de octava salido de un analizador se convierte en nivel espectral restándole diez veces el logaritmo del ancho de banda en hercios:
No hace falta memorizar los anchos: cada objeto de procedimiento lleva sus propios bordes de banda, así que la conversión son dos líneas para cualquiera de los cuatro métodos.
import numpy as np
# `speech` es la importación del primer fragmento de esta página.proc = speech.sii_procedure("one-third-octave")widths = np.diff(proc.band_edges) # hercios, banda a bandaprint(np.round(10 * np.log10(widths), 1)[[0, 8, 17]]) # [15.5 23.5 32.7]
band_levels = np.full(18, 55.0) # lo que declara un analizadorspectrum_levels = band_levels - 10 * np.log10(widths)print(round(float(spectrum_levels[8]), 1)) # 31.5 dB a 1 kHzAsí que la corrección va de 15,5 dB a 160 Hz a 32,7 dB a 8 kHz en el procedimiento de tercio de octava, y vale 28,5 dB a 1 kHz en el de octava: es decir, un nivel de banda medido de 55 dB a 1 kHz es un nivel espectral de 31,5 dB, no de 55 dB. Mete niveles de banda directamente y tanto el habla como el ruido quedan de 15 a 33 dB demasiado altos, banda a banda, y el fallo es silencioso: el índice sigue dentro de y la gráfica de audibilidad sigue pareciendo plausible.
De ahí siguen dos cosas. La entrada de umbral no se convierte: es un nivel de umbral de audición en dB HL, una diferencia de niveles y no una magnitud por hercio. Y hay una comprobación barata: como un nivel espectral es por hercio, un ruido blanco tiene el mismo nivel espectral de ruido equivalente en todas las bandas de todos los procedimientos, mientras que sus niveles de banda suben 3 dB por octava. Si un SII sale exactamente 0 para un ruido de oficina corriente, o exactamente 1 con ruido presente, sospecha de niveles de banda introducidos como niveles espectrales; una comprobación rápida es que el propio espectro de habla de esfuerzo normal de la norma tiene su máximo en 34,8 dB cerca de 250 Hz, así que cualquier entrada de habla más de unos 15 dB por encima de eso es un nivel de banda.
De dónde salen los tres espectros
Sección titulada «De dónde salen los tres espectros»La razón de que los tres datos de entrada puedan combinarse siquiera es que describen el mismo punto del espacio. ANSI S3.5-1997 define los niveles espectrales equivalentes de habla y de ruido en la posición correspondiente al centro de la cabeza del oyente, a media distancia entre los oídos y con el oyente ausente: ambos son magnitudes de campo en una posición de escucha desocupada. Es decir: el ruido se mide ahí con el hablante o la fuente de interés en silencio, y el habla se mide ahí con el hablante a la distancia y el esfuerzo vocal reales.
Tres consecuencias que merecen constar en un informe. Los espectros tabulados
por esfuerzo vocal de la sección 4 son el habla de referencia de la norma,
excelente para diseñar y comparar, pero no sustituyen a un medido cuando
la condición de escucha real está a otra distancia o en un espacio reverberante.
Los niveles registrados en el tímpano, en un acoplador o bajo auriculares no
son niveles equivalentes de campo libre y hay que transformarlos antes de
poder usarlos. Y threshold= es el nivel de umbral de audición en tonos puros
del oyente en dB HL en los 18 centros de banda y pertenece a un solo oído,
así que hay que decir cuál es y cómo se llevó el audiograma a esos centros, a lo
que vuelve la sección 3.2.
2. Enmascaramiento y la función de audibilidad de banda
Sección titulada «2. Enmascaramiento y la función de audibilidad de banda»El procedimiento (ANSI S3.5-1997, apartado 5) convierte las entradas en una audibilidad por banda. El habla se enmascara a sí misma hacia abajo desde cada banda (); el mayor entre eso y el ruido externo, , se propaga hacia arriba en frecuencia con una pendiente dependiente del nivel para dar el nivel espectral de enmascaramiento equivalente (apartado 5.4):
El enmascaramiento se combina con el ruido interno equivalente (, el ruido interno de referencia desplazado por la pérdida auditiva) en la perturbación equivalente (apartado 5.6), y la función de audibilidad de banda es la razón habla-perturbación escalada a (apartado 5.8):
A niveles de habla muy por encima del esfuerzo normal, un factor de distorsión de nivel del apartado 5.7 (la unidad para los espectros estándar usados en esta página) reduce aún más ; phonometry lo aplica automáticamente.
Todos los arrays de esa cadena están en el resultado, así que puede dibujarse el apartado 5 entero para un caso donde el trabajo lo hace la propagación del enmascaramiento: un ventilador o un conducto que pone toda su energía por debajo de 450 Hz:
La audibilidad de banda es una posición dentro de una ventana de 30 dB: en el borde inferior la banda está totalmente enmascarada, en el superior es totalmente audible, y entre ambos hay una recta. La ventana está centrada en , y sigue a , que es el sentido de la figura: no hay ruido ninguno por encima de 400 Hz y, aun así, el enmascaramiento a 1 kHz vale 23 dB, propagado hacia arriba desde las bandas graves. Esa falda ascendente es lo que hace del SII algo más que una relación señal-ruido banda a banda, y es el término que el procedimiento de octava de la sección 5 se deja por el camino.
Mostrar el código de esta figura
import matplotlib.pyplot as plt
# `np` y `speech` vienen de los fragmentos de arriba.freqs = speech.sii_procedure("one-third-octave").frequenciesnoise = np.where(freqs <= 450.0, 60.0, 0.0) # toda la energía por debajo de 450 Hzres = speech.speech_intelligibility_index("normal", noise)print(round(res.sii, 2), round(float(res.masking[8]), 1)) # 0.6 23.2
pos = np.arange(freqs.size)fig, ax = plt.subplots(figsize=(10.4, 6.0))ax.fill_between(pos, res.disturbance - 15, res.disturbance + 15, alpha=0.25)ax.plot(pos, res.speech_spectrum, "o-", label="habla Ei'")ax.plot(pos, noise, "s--", label="ruido externo Ni'")ax.plot(pos, res.masking, "^-", label="enmascaramiento equivalente Zi")ax.twinx().plot(pos, res.band_audibility) # la audibilidad, a la derechaax.legend()plt.show()3. El índice en ruido
Sección titulada «3. El índice en ruido»3.1 En ruido
Sección titulada «3.1 En ruido»El índice de inteligibilidad del habla es la suma de las audibilidades de banda ponderada por la importancia de banda (ANSI S3.5-1997, apartado 6):
import numpy as npfrom phonometry import speech
speech_spectrum = speech.standard_speech_spectrum("normal")# Un ruido de enmascaramiento de banda ancha descendente (espectro tipo oficina/ventilación).noise = np.array([38.0, 37.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0, 14.0, 12.0, 10.0, 8.0, 6.0])
result = speech.speech_intelligibility_index(speech_spectrum, noise)print(round(result.sii, 2)) # 0.46print(result.band_audibility.round(2)) # Ai por banda
result.plot() # la figura de abajo: Ai y la contribución ponderada por bandaVer el código de esta figura
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import speech
speech_spectrum = speech.standard_speech_spectrum("normal")noise = np.array([38.0, 37.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0, 14.0, 12.0, 10.0, 8.0, 6.0])result = speech.speech_intelligibility_index(speech_spectrum, noise)
# En una línea:result.plot(language="es")plt.show()
# A mano, replicando lo que dibuja SIIResult.plot():pos = np.arange(result.frequencies.size)weighted = result.band_audibility * result.band_importancefig, ax = plt.subplots()ax.bar(pos, result.band_audibility, color="#c6dbef", label=r"Audibilidad de banda $A_i$")ax.bar(pos, weighted / weighted.max(), width=0.5, color="#1f77b4", label=r"Ponderada por importancia $I_i\,A_i$ (escalada)")ax.set_xticks(pos)ax.set_xticklabels([f"{f:g}" for f in result.frequencies], rotation=45, ha="right")ax.set_xlabel("Banda de tercio de octava [Hz]")ax.set_ylabel("Audibilidad de banda")ax.set_title(f"SII = {result.sii:.2f}")ax.legend()plt.show()Cómo leer el número. El SII es la fracción del espectro de habla que
resulta audible ponderada por importancia, así que 0,46 significa que llega
más o menos la mitad de lo que transporta la inteligibilidad. Es una proporción
de audibilidad, no de palabras: ANSI S3.5 lleva el índice a inteligibilidad solo
a través de funciones de transferencia propias del material de habla y de los
oyentes, y por eso un mismo 0,5 sostiene aciertos altos en frases y bastante más
bajos en sílabas sin sentido. Nunca cites un SII como «X % de inteligibilidad»
sin nombrar el material. Como anclas prácticas, por encima de 0,75 está el
objetivo de diseño cuando hay que entender material desconocido, la misma escala
que hace de requirement=0.75 un valor razonable en la ficha de la sección 7;
de 0,45 a 0,75 se trabaja con material familiar en un contexto conocido; por
debajo de 0,3 aproximadamente no se puede confiar en la comunicación hablada. Y
atención a la resolución: las entradas son espectros medidos con su propia
incertidumbre, así que las diferencias de unas centésimas son ruido. Cuando dos
condiciones puntúan parecido, el perfil de audibilidad por banda, y no el
escalar, es la parte que dice qué hay que arreglar.
3.2 Con un umbral de audición elevado
Sección titulada «3.2 Con un umbral de audición elevado»Un umbral de audición elevado (threshold=) sube el ruido interno equivalente y
reduce el índice, igual que lo hace añadir ruido de enmascaramiento. La entrada
es el nivel de umbral de audición en tonos puros en dB HL en los 18 centros de
banda, de un solo oído. El
SIIResult también lleva el enmascaramiento por banda , la perturbación
, la audibilidad y la importancia , y su .plot() dibuja la
figura de arriba.
Los mismos habla y ruido escuchados por una persona con pérdida auditiva en agudos muestran lo que eso cuesta, banda a banda:
Ver el código de esta figura
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import speech
# Los mismos habla y ruido de oficina de arriba, escuchados a través de una# pérdida descendente en agudos (umbrales en las 18 frecuencias centrales).speech_spectrum = speech.standard_speech_spectrum("normal")noise = np.array([38.0, 37.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0, 14.0, 12.0, 10.0, 8.0, 6.0])threshold = np.array([5.0, 5.0, 5.0, 5.0, 8.0, 10.0, 12.0, 15.0, 18.0, 22.0, 28.0, 35.0, 42.0, 48.0, 55.0, 60.0, 65.0, 70.0])res = speech.speech_intelligibility_index(speech_spectrum, noise, threshold=threshold)print(round(res.sii, 3)) # 0.358 (0.458 con audición normal)
# En una línea: las mismas barras de audibilidad, ahora limitadas por el umbral.res.plot(language="es")plt.show()La pérdida elimina las bandas que llevan las claves consonánticas, y por eso el índice baja una quinta parte sin que el nivel del habla haya cambiado. Este es el uso práctico del SII en audiología y en control de ruido de espacios ocupados: un índice objetivo se puede alcanzar bajando el ruido o devolviendo audibilidad (amplificando), y el perfil por bandas dice en qué bandas hay que poner el esfuerzo.
Cómo llevar un array de umbrales a la rejilla del SII. Los umbrales por edad
de ISO 7029 son una
entrada poblacional cómoda, pero las dos normas están tabuladas en rejillas
distintas y el traslado es una decisión de quien llama, no algo automático. La
ISO 7029 devuelve once frecuencias audiométricas (de 125 a 8000 Hz) mientras
que el procedimiento de tercio de octava del SII necesita dieciocho valores
de 160 Hz a 8000 Hz, y ANSI S3.5 no define ninguna interpolación: el bloque «No
cubierto» de esta misma página dice que no se ofrece remuestreo entre conjuntos
de bandas. Así que hay que explicitar la elección: interpolar los umbrales
audiométricos sobre un eje logarítmico de frecuencia hasta los centros de banda
del SII, o tomar para cada banda la frecuencia audiométrica más próxima, y decir
cuál de las dos en el informe. Hay un segundo desajuste: age_threshold devuelve
la desviación respecto a la mediana de los 18 años, que es un nivel de umbral
de audición en dB HL solo si esa línea de base se toma como 0 dB HL, una
suposición que merece declararse y que conviene abandonar en cuanto exista un
audiograma real, porque los valores medidos en dB HL pueden introducirse
directamente. Y por último, atención al sentido del error: una interpolación
gruesa alisa la muesca de 3 kHz a 6 kHz que lleva un audiograma expuesto a ruido,
y esas son bandas con mucho peso de importancia, así que el SII sale optimista.
4. Esfuerzo vocal
Sección titulada «4. Esfuerzo vocal»Los hablantes elevan la voz en ruido, y la norma da cuatro espectros de voz estándar para los esfuerzos vocales normal, elevado, fuerte y grito (ANSI S3.5-1997, Tabla 3). Al pasar el nombre del esfuerzo se selecciona el espectro correspondiente; hablar más fuerte sube todo el espectro y, en un ruido fijo, aumenta el índice.
import numpy as npfrom phonometry import speech
# El mismo ruido de banda ancha, cuatro esfuerzos vocales.noise = np.array([48.0, 47.0, 46.0, 44.0, 42.0, 40.0, 38.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0])for effort in speech.sii.VOCAL_EFFORTS: print(effort, round(speech.speech_intelligibility_index(effort, noise).sii, 2))# normal 0.12 | raised 0.36 | loud 0.59 | shout 0.79
print(speech.standard_speech_spectrum("loud")[8]) # 42.16 dB SPL a 1 kHzLos cuatro espectros también están disponibles como un único resultado
representable: standard_speech_spectra() devuelve un StandardSpeechSpectrum
que lleva las frecuencias centrales de banda y los niveles de banda por
esfuerzo, y su .plot() los dibuja como una familia etiquetada sobre el eje de
bandas de tercio de octava.
Mostrar el código de esta figura
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import speech
# Una línea: toda la familia de la Tabla 3 de ANSI S3.5-1997.speech.standard_speech_spectra().plot(language="es")plt.show()
# A mano, reproduciendo lo que dibuja StandardSpeechSpectrum.plot():res = speech.standard_speech_spectra()pos = np.arange(res.frequencies.size)nombres = {"normal": "Normal", "raised": "Elevada", "loud": "Fuerte", "shout": "Grito"}fig, ax = plt.subplots()for effort, levels in zip(res.vocal_efforts, res.levels): ax.plot(pos, levels, "o-", label=nombres[effort])ax.set_xticks(pos)ax.set_xticklabels([f"{f:g}" for f in res.frequencies], rotation=45, ha="right")ax.set_xlabel("Banda de tercio de octava [Hz]")ax.set_ylabel("Nivel del espectro de voz [dB SPL]")ax.legend()plt.show()Los mismos cuatro espectros alimentan el índice: en un ruido de banda ancha fijo, cada esfuerzo vocal mayor sube el espectro de voz y aumenta el SII.
Mostrar el código de esta figura
import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.ticker import NullFormatterfrom phonometry import speech
# Los cuatro espectros de la Tabla 3 de ANSI S3.5-1997 y el ruido fijo de arriba.noise = np.array([48.0, 47.0, 46.0, 44.0, 42.0, 40.0, 38.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0])efforts = speech.sii.VOCAL_EFFORTS # ("normal", "raised", "loud", "shout")freqs = speech.sii.BAND_CENTERS # los 18 centros de banda de tercio de octavanombres = {"normal": "Normal", "raised": "Elevada", "loud": "Fuerte", "shout": "Grito"}
fig, (ax_s, ax_i) = plt.subplots(1, 2, figsize=(12, 5))
# Izquierda: cada esfuerzo vocal mayor sube todo el espectro de voz.for effort in efforts: ax_s.plot(freqs, speech.standard_speech_spectrum(effort), "o-", label=nombres[effort])ax_s.set_xscale("log")ax_s.set_xticks(list(freqs))ax_s.set_xticklabels([f"{f:g}" for f in freqs], rotation=45, ha="right")ax_s.xaxis.set_minor_formatter(NullFormatter())ax_s.set_xlabel("Banda de tercio de octava [Hz]")ax_s.set_ylabel("Nivel del espectro de voz [dB SPL]")ax_s.legend()
# Derecha: el SII que alcanza cada espectro en el ruido fijo.sii = [speech.speech_intelligibility_index(e, noise).sii for e in efforts]pos = np.arange(len(efforts))ax_i.bar(pos, sii)ax_i.set_xticks(pos)ax_i.set_xticklabels([nombres[e] for e in efforts])ax_i.set_ylim(0.0, 1.0)ax_i.set_ylabel("Índice de inteligibilidad del habla")plt.show()Los nombres de esfuerzo vocal funcionan en cualquier sitio donde se espere un
espectro de voz, incluido como primer argumento de
speech_intelligibility_index.
5. Los cuatro procedimientos por bandas
Sección titulada «5. Los cuatro procedimientos por bandas»El título de la norma está en plural, y la norma también: ANSI S3.5-1997 define
cuatro procedimientos por bandas. Solo se diferencian en la tabla de bandas
y en cómo se expresa la propagación ascendente del enmascaramiento, y method=
elige uno. El valor por omisión es el procedimiento por tercios de octava usado
arriba.
method= | Bandas | Centros de banda | Límites de banda | Constantes | Propagación del enmascaramiento |
|---|---|---|---|---|---|
"critical-band" | 21 | 150 Hz a 8500 Hz | 100 Hz a 9500 Hz | Tabla 1 | entre los límites de banda tabulados |
"equally-contributing" | 17 | 350 Hz a 5800 Hz | 300 Hz a 6400 Hz | Tabla 2 | entre los límites de banda tabulados |
"one-third-octave" | 18 | 160 Hz a 8000 Hz | 143 Hz a 8980 Hz (calculados) | Tabla 3 | entre las frecuencias centrales de banda |
"octave" | 6 | 250 Hz a 8000 Hz | 177 Hz a 11314 Hz | Tabla 4 | ninguna |
Las dos columnas son sii_procedure(method).frequencies y .band_edges; solo
los límites de tercio de octava se calculan a partir de los centros en vez de
estar tabulados.
Todos los procedimientos recorren la misma cadena del apartado 2: el autoenmascaramiento del habla, la propagación ascendente del enmascaramiento, el ruido interno equivalente y la perturbación, el factor de distorsión de nivel y la función de audibilidad de banda, ponderada por la función de importancia de banda propia de cada procedimiento. La pendiente de enmascaramiento es una sola fórmula en todos ellos, , con el ancho de banda en hercios. Los procedimientos por bandas críticas y de contribución equitativa propagan el enmascaramiento desde el límite superior de la banda enmascarante hasta la frecuencia central de la banda enmascarada; el de tercios de octava escribe esa misma geometría en función de las frecuencias centrales, de donde salen su y su dB impresos. El procedimiento por bandas de octava no tiene propagación del enmascaramiento: una banda de octava ya es más ancha que la propagación que se modela, así que su nivel espectral de enmascaramiento equivalente es el propio nivel espectral de ruido equivalente.
Las cuatro funciones de importancia de banda son una sola distribución
subyacente muestreada a cuatro resoluciones, así que cuanto más anchas son las
bandas, mayor es cada . Cada función suma uno, salvo la de la Tabla 2, que
imprime 0,0588 en cada una de sus 17 bandas y por tanto suma 0,9996.
Ver el código de esta figura
import numpy as npimport matplotlib.pyplot as pltfrom phonometry import SII_METHODS, sii_procedure
# Una línea: el .plot() de cada procedimiento escalona su Ii sobre sus límites.fig, ax = plt.subplots(figsize=(10, 6))for method in SII_METHODS: sii_procedure(method).plot(ax=ax, linewidth=1.8)plt.show()
# A mano, replicando lo que dibuja SIIProcedure.plot():fig, ax = plt.subplots()for method in SII_METHODS: proc = sii_procedure(method) ii = proc.band_importance ax.plot(proc.band_edges, np.append(ii, ii[-1]), drawstyle="steps-post", label=method)ax.set_xscale("log")ax.set_xlabel("Frecuencia [Hz]")ax.set_ylabel(r"Importancia de banda $I_i$")ax.set_ylim(bottom=0.0)ax.legend()plt.show()Como el nivel espectral equivalente es una magnitud por hercio, un ruido blanco tiene el mismo nivel espectral de ruido equivalente en todas las bandas de todos los procedimientos, lo que hace que los cuatro sean directamente comparables:
import numpy as npfrom phonometry import speech
for method in speech.SII_METHODS: n_bands = speech.sii_procedure(method).frequencies.size result = speech.speech_intelligibility_index( "normal", np.full(n_bands, 25.0), method=method ) print(method, n_bands, round(result.sii, 3))# critical-band 21 0.343# equally-contributing 17 0.333# one-third-octave 18 0.350# octave 6 0.369Los cuatro coinciden dentro de unas 0,04 unidades en la misma situación de escucha. El de octava es el que lee más alto porque prescinde de la propagación del enmascaramiento, que es justo el riesgo que arrastra: si se le da un ruido fuerte en baja frecuencia, no verá ese ruido alcanzando las bandas que portan el habla.
La coincidencia anterior es una propiedad del estímulo, no de los procedimientos. Sobre ruido blanco los cuatro se siguen entre sí; sobre un enmascarador que vive por debajo de 450 Hz, los tres procedimientos que llevan la propagación ascendente del enmascaramiento se desploman juntos mientras que el de octava no se mueve en absoluto, 0,81 unidades de índice de separación en el punto más ruidoso, que es casi toda la escala. Un SII en bandas de octava bajo un ruido dominado por la baja frecuencia es una cota superior, no una estimación.
Mostrar el código de esta figura
levels = np.arange(45.0, 80.1, 1.0)for method in ("critical-band", "equally-contributing", "one-third-octave", "octave"): proc = speech.sii_procedure(method) curve = [speech.speech_intelligibility_index( proc.speech_spectrum, np.where(np.asarray(proc.frequencies) <= 450.0, x, 0.0), method=method).sii for x in levels] print(method, round(curve[0], 3), round(curve[-1], 3))# critical-band 0.736 0.03# equally-contributing 0.753 0.026# one-third-octave 0.777 0.067# octave 0.882 0.872Qué procedimiento usar.
"one-third-octave"es el valor por omisión de trabajo: la resolución más fina que ofrece la norma, la única tabla que trae los cuatro espectros de voz por esfuerzo vocal y la resolución en la que suelen llegar los datos de medición."critical-band"sigue el filtro auditivo. Sus 21 bandas son las bandas críticas clásicas, por lo que es el procedimiento a emparejar con modelos de enmascaramiento o sonoridad por bandas críticas, y el único que baja hasta los 100 Hz."equally-contributing"da a sus 17 bandas la misma importancia entre 300 Hz y 6400 Hz, así que el índice se lee directamente como la fracción de bandas igualmente importantes que son audibles. Eso lo hace rápido de comprobar a mano, y es la presentación más cercana a la tradición del índice de articulación de la que nació el SII."octave"es para datos por bandas de octava, que es lo que dan de forma rutinaria los sonómetros, la selección de equipos de climatización y los informes de acústica de la edificación. Úsalo cuando sea todo lo que tengas, y léelo sabiendo que falta la propagación del enmascaramiento.
Una función de importancia de banda alternativa. band_importance=
sustituye la tabulada del procedimiento por otra propia, que es la forma
de aplicar las funciones del Anexo B de la norma para materiales de ensayo de
habla concretos (sílabas sin sentido, listas de palabras monosílabas, pasajes
cortos). Solo cambia la ponderación: la cadena de audibilidad, y por tanto
result.band_audibility, queda intacta.
res = speech.speech_intelligibility_index( "normal", np.full(6, 25.0), method="octave", band_importance=[0.0, 0.0, 1.0, 0.0, 0.0, 0.0], # todo el peso en 1 kHz)print(round(res.sii, 3)) # 0.5 (solo la banda de octava de 1 kHz)Las constantes tabuladas. sii_procedure(method) devuelve un SIIProcedure
con las frecuencias centrales de banda, los límites de banda, la función de
importancia de banda, el nivel espectral de ruido interno de referencia y el
nivel espectral de voz estándar de esfuerzo normal de ese procedimiento; su
.plot() dibuja la función de importancia de banda como escalón sobre los
límites de banda, que es la figura de arriba. Las Tablas 1, 2 y 4 imprimen en
la norma las cuatro columnas de esfuerzo vocal, pero aquí solo se incluye su
columna de esfuerzo normal, de modo que "raised", "loud" y "shout" están
disponibles únicamente en el procedimiento por tercios de octava.
octave = speech.sii_procedure("octave")print(octave.frequencies) # [ 250. 500. 1000. 2000. 4000. 8000.]print(octave.band_importance) # [0.0617 0.1671 0.2373 0.2648 0.2142 0.0549]
# La Tabla 2 son las bandas críticas 3 a 19 de la Tabla 1, ponderadas por igual.equal = speech.sii_procedure("equally-contributing")print(equal.band_edges[0], equal.band_edges[-1]) # 300.0 6400.0print(equal.band_importance.sum().round(4)) # 0.99966. ¿SII o STI?
Sección titulada «6. ¿SII o STI?»Las dos métricas del habla responden preguntas distintas a partir de mediciones distintas, y cada una es ciega a lo que la otra captura:
| SII (ANSI S3.5) | STI (IEC 60268-16) | |
|---|---|---|
| Pregunta que responde | ¿Es audible suficiente espectro del habla en el oído de quien escucha? | ¿Cuánta de la envolvente del habla conserva el canal de transmisión? |
| Entradas | Espectros de habla, ruido y umbral de audición (18 niveles espectrales equivalentes de tercio de octava) | Una respuesta al impulso (indirecto) o una grabación STIPA a través del canal (directo) |
| Maquinaria de bandas | Ponderación por importancia de banda aplicada a la audibilidad de banda | Función de transferencia de modulación por banda de octava, convertida en una SNR efectiva |
| Captura | Ruido estacionario, propagación ascendente del enmascaramiento, pérdida auditiva, esfuerzo vocal, distorsión de nivel | Reverberación, ecos, ruido y (medido en directo) procesado no lineal |
| Ciega a | La reverberación y cualquier emborronamiento temporal: un canal totalmente audible pero irremediablemente reverberante sigue puntuando alto | El estado auditivo individual: los oyentes con pérdida auditiva requieren correcciones específicas |
| Uso típico | Audiología, audífonos y protectores, objetivos de control de ruido en una posición de escucha | Sistemas de megafonía, interfonos y salas: valorar un canal de transmisión de extremo a extremo |
El mismo espacio puede aprobar una y suspender la otra. Un atrio silencioso y
muy reverberante es un SII cercano a 1 con un STI pobre; una oficina seca
inundada de ruido de ventilación puede dar un STI aceptable desde su respuesta
al impulso mientras el SII (y el STI consciente del ruido, vía snr= o
level=) revela que poco del espectro del habla supera el ruido. Cuando ambos
mecanismos están en juego, calcula ambos; las entradas son baratas una vez
medidas la sala y el ruido. Consulta la
guía del índice de transmisión del habla
para el lado del STI.
7. Informe ANSI S3.5-1997 (.report())
Sección titulada «7. Informe ANSI S3.5-1997 (.report())»SIIResult.report(path) genera una ficha PDF de una página dispuesta como un
informe de audibilidad del habla: una línea de base normativa, un bloque de
metadatos opcional, una tabla por bandas de tercio de octava del espectro del
habla equivalente , la función de importancia de banda de la Tabla 3
y la función de audibilidad de banda junto a las barras de audibilidad y
de aportación ponderada por importancia (el .plot() del propio resultado), el
número único enmarcado SII = X, una fila de veredicto opcional y un pie con el
descargo fijo. Usa el mismo contenedor ReportMetadata y el mismo motor que la
ficha de aislamiento de ISO
717;
un requirement indicado se interpreta como el SII mínimo exigido (un SII mayor
cumple). verbose=True añade la columna del nivel de espectro de perturbación
equivalente . La generación necesita reportlab y, para la figura que
incrusta la ficha, matplotlib (pip install "phonometry[report,plot]"); solo se
admite engine="reportlab". Pasa language="es" para la ficha en español.
from phonometry import ReportMetadata, speech
res = speech.speech_intelligibility_index(speech_spectrum, noise, threshold=threshold)res.report( "sii_fiche.pdf", metadata=ReportMetadata( specimen="Habla conversacional en ruido ambiente de baja frecuencia", measurement_standard="ANSI S3.5-1997", laboratory="Laboratorio de referencia Phonometry", requirement=0.75, # SII mínimo exigido (un SII mayor cumple) ), language="es",)La ficha de ejemplo se regenera con make reports y se mantiene renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

Ficha de índice de inteligibilidad del habla de una página: cabecera de metadatos, tabla por bandas de tercio de octava del espectro del habla equivalente, la importancia de banda y la audibilidad de banda, las barras de audibilidad, el número único enmarcado SII = 0,851 y un veredicto CUMPLE frente a un mínimo de 0,75.
Qué cubre esta guía
Sección titulada «Qué cubre esta guía»Cubierto
Los cuatro procedimientos por bandas de ANSI S3.5-1997 (R2017): el método por bandas críticas (21 bandas, Tabla 1), el de bandas críticas de contribución equitativa (17 bandas, Tabla 2), el de bandas de tercio de octava (18 bandas, Tabla 3, el valor por omisión) y el de bandas de octava (6 bandas, Tabla 4). Para cada uno: los niveles espectrales equivalentes de habla, ruido y umbral de audición, la función de importancia de banda y el nivel espectral de voz estándar, el autoenmascaramiento del habla, la propagación ascendente del enmascaramiento, el factor de distorsión de nivel y la función de audibilidad de banda del apartado 5, y el índice del apartado 6.
speech_intelligibility_index(conmethod=yband_importance=),sii_procedure,standard_speech_spectrumystandard_speech_spectraimplementan esto, ySIIResult.report(path)genera la ficha de ANSI S3.5-1997 para el procedimiento que se haya usado.No cubierto
Los espectros de voz estándar de esfuerzo vocal elevado, fuerte y de grito solo se incluyen para el procedimiento por tercios de octava; las Tablas 1, 2 y 4 se implementan con su columna de esfuerzo normal, que es la que necesita el factor de distorsión de nivel del apartado 5.7. Las funciones de importancia de banda tabuladas son el compromiso de habla promedio de cada tabla; las funciones de importancia alternativas del Anexo B para materiales de ensayo concretos (sílabas sin sentido, listas de palabras monosílabas, pasajes cortos) no se distribuyen como constantes, pero cualquier función de importancia puede aplicarse con
band_importance=. No se ofrece remuestreo entre los cuatro conjuntos de bandas: cada procedimiento se alimenta con espectros en sus propias bandas. El índice de transmisión del habla, una métrica distinta para un canal de transmisión en vez de la audibilidad de quien escucha, se cubre aparte en la guía del índice de transmisión del habla.
Véase también
Sección titulada «Véase también»- Índice de transmisión del habla: el índice de transmisión STI/STIPA que el SII complementa.
- Sonoridad y Métricas de calidad sonora: la sonoridad, la agudeza y las métricas de percepción de lo que oye quien escucha.
- Bancos de filtros: las bandas de tercio de octava sobre las que se evalúa el SII.
- Niveles: los niveles espectrales y de banda que sustentan las entradas de nivel espectral equivalente.
- Referencia de la API:
speech.sii. - Teoría: Índice de inteligibilidad del habla (ANSI S3.5): la ponderación por importancia de banda de ANSI S3.5 y la función de audibilidad que multiplica.
Respuestas rápidas
Sección titulada «Respuestas rápidas»¿Qué bandas de frecuencia importan más para la inteligibilidad del habla?
Sección titulada «¿Qué bandas de frecuencia importan más para la inteligibilidad del habla?»En el método por bandas de tercio de octava de ANSI S3.5-1997, la función de importancia de banda (Tabla 3, material de habla promedio) suma uno sobre las 18 bandas de 160 Hz a 8000 Hz. Las cinco bandas de 1250 Hz a 3150 Hz transportan en torno al 43 % de la inteligibilidad (las claves consonánticas), mientras que las cinco bandas más bajas, de 160 Hz a 400 Hz, transportan en torno al 11 % aunque contienen casi la mitad de la potencia del habla.
¿Cómo se calcula el índice de inteligibilidad del habla?
Sección titulada «¿Cómo se calcula el índice de inteligibilidad del habla?»El SII del apartado 6 de ANSI S3.5-1997 es la suma de las audibilidades de banda ponderada por la importancia de banda, , sobre las 18 bandas de tercio de octava. Cada audibilidad de banda es (apartado 5.8), donde es el nivel espectral del habla equivalente y la perturbación equivalente, que combina el ruido externo, la propagación ascendente del enmascaramiento y el ruido interno equivalente. El índice queda en .
¿Cuál de los cuatro procedimientos por bandas de ANSI S3.5 debo usar?
Sección titulada «¿Cuál de los cuatro procedimientos por bandas de ANSI S3.5 debo usar?»ANSI S3.5-1997 define cuatro, citados aquí por el centro de banda: bandas
críticas (21 bandas, centros de 150 Hz a 8500 Hz), bandas críticas de
contribución equitativa (17 bandas, centros de 350 Hz a 5800 Hz), tercio de
octava (18 bandas, centros de 160 Hz a 8000 Hz) y octava (6 bandas, centros de
250 Hz a 8000 Hz). Usa method="one-third-octave" por omisión: es la resolución más
fina y el único procedimiento cuya tabla trae los espectros de voz elevado,
fuerte y de grito. Usa method="critical-band" para alinear el índice con un modelo de
enmascaramiento o sonoridad por bandas críticas (Bark),
method="equally-contributing" cuando el índice deba leerse como la fracción de
bandas igualmente importantes que son audibles, y method="octave" cuando solo
se hayan medido datos por bandas de octava, recordando que el procedimiento de
octava no incluye la propagación ascendente del enmascaramiento y por tanto lee
alto con ruido fuerte en baja frecuencia.
¿Cuándo debo usar el SII en vez del STI?
Sección titulada «¿Cuándo debo usar el SII en vez del STI?»Usa el SII (ANSI S3.5) cuando la pregunta es si suficiente espectro del habla es audible en el oído de quien escucha: captura el ruido estacionario, la propagación ascendente del enmascaramiento, la pérdida auditiva y el esfuerzo vocal, pero es ciego a la reverberación. El STI (IEC 60268-16) valora un canal de transmisión, cuánta de la modulación del habla conserva una sala o un sistema de sonido. Cuando ambos mecanismos están en juego, calcula ambos.
Referencias
Sección titulada «Referencias»- American National Standards Institute. (1997). American National Standard Methods for the Calculation of the Speech Intelligibility Index (ANSI S3.5-1997 (R2017)). Acoustical Society of America. Los cuatro procedimientos por bandas: bandas críticas (21 bandas, Tabla 1), bandas críticas de contribución equitativa (17 bandas, Tabla 2), tercio de octava (18 bandas, Tabla 3) y octava (6 bandas, Tabla 4), cada uno con su función de importancia de banda, nivel espectral del habla estándar y ruido interno de referencia; el procedimiento de enmascaramiento, perturbación y audibilidad de banda (apartado 5) y el índice (apartado 6).
- French, N. R. y Steinberg, J. C. (1947). Factors governing the intelligibility of speech sounds. The Journal of the Acoustical Society of America, 19(1), 90-119. https://doi.org/10.1121/1.1916407Los experimentos por bandas de articulación de los que desciende la función de importancia de banda de la sección 1.