<!-- canonical: https://jmrplens.github.io/phonometry/es/guides/speech-intelligibility/ -->
Source: https://jmrplens.github.io/phonometry/es/guides/speech-intelligibility/

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 el
**método por bandas de tercio de octava** de **ANSI S3.5-1997 (R2017)**: 18
bandas de 160 Hz a 8000 Hz.

:::note
**SII frente a STI.** El SII predice la inteligibilidad desde la
*audibilidad* (cuánto del espectro del habla supera el ruido y el umbral de
audición en el oído de quien escucha), mientras que el STI caracteriza un
*canal de transmisión*: cuánta de la modulación del habla conserva una sala o
un sistema de sonido. Para esto último, consulta la
[guía del índice de transmisión del habla](/phonometry/es/guides/speech-transmission/).
:::

## 1. Entradas y la función de importancia de banda

Las tres entradas son **niveles espectrales equivalentes** (ANSI S3.5-1997,
cláusulas 3.11 y 3.55) muestreados en los 18 centros de banda de tercio de
octava: el nivel espectral del habla $E_i'$, el nivel espectral del ruido $N_i'$
(ambos en dB SPL) y el umbral de audición $T_i'$ (en dB HL). Cada banda $i$
contribuye a la inteligibilidad en proporción a su **función de importancia de
banda** $I_i$ (ANSI S3.5-1997 Tabla 3, material de habla promedio), que suma uno
sobre las 18 bandas.

```python
from phonometry import hearing

# El espectro de habla estándar de esfuerzo normal (Tabla 3) en silencio, audición normal.
result = hearing.speech_intelligibility_index("normal")
print(round(result.sii, 3))          # 0.996  (casi todo audible)
print(round(hearing.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
la propia **automáscara 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 `Ii` 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.

## 2. Enmascaramiento y la función de audibilidad de banda

El procedimiento (ANSI S3.5-1997, cláusula 5) convierte las entradas en una
audibilidad por banda. El habla se enmascara a sí misma hacia abajo desde cada
banda ($V_i = E_i' - 24$); el mayor entre eso y el ruido externo, $B_i$, se
propaga **hacia arriba** en frecuencia con una pendiente dependiente del nivel
para dar el nivel espectral de enmascaramiento equivalente $Z_i$ (cláusula 5.4):

$$
Z_i = 10\log_{10}\!\left(10^{0{,}1 N_i'} + \sum_{k<i}
      10^{0{,}1\left(B_k + 3{,}32\,C_k\,\log_{10}(0{,}89\,f_i/f_k)\right)}\right).
$$

El enmascaramiento se combina con el ruido interno equivalente
($X_i' = X_i + T_i'$, el ruido interno de referencia desplazado por la pérdida
auditiva) en la **perturbación equivalente** $D_i$ (cláusula 5.6), y la
**función de audibilidad de banda** es la razón habla-perturbación escalada a
$[0, 1]$ (cláusula 5.8):

$$
A_i = \operatorname{clip}\!\left(\frac{E_i' - D_i + 15}{30},\; 0,\; 1\right).
$$

A niveles de habla muy por encima del esfuerzo normal, un **factor de distorsión
de nivel** de la cláusula 5.7 (la unidad para los espectros estándar usados en
esta página) reduce aún más $A_i$; phonometry lo aplica automáticamente.

## 3. El índice 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, cláusula 6):

$$
\text{SII} = \sum_{i} I_i\, A_i .
$$

```python

from phonometry import hearing

speech = hearing.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 = hearing.speech_intelligibility_index(speech, noise)
print(round(result.sii, 2))                # 0.46
print(result.band_audibility.round(2))     # Ai por banda

result.plot()   # la figura de abajo: Ai y la contribución ponderada por banda
```

<details>
<summary>Ver el código de esta figura</summary>

```python

from phonometry import hearing

speech = hearing.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 = hearing.speech_intelligibility_index(speech, 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_importance
fig, 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()
```

</details>

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. El
`SIIResult` también lleva el enmascaramiento por banda $Z_i$, la perturbación
$D_i$, la audibilidad $A_i$ y la importancia $I_i$, 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:

<details>
<summary>Ver el código de esta figura</summary>

```python

from phonometry import hearing

# 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 = hearing.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 = hearing.speech_intelligibility_index(speech, 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()
```

</details>

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. Los umbrales por edad de ISO 7029 son una entrada
poblacional cómoda, véase la
[guía del umbral de audición](/phonometry/es/guides/hearing-threshold/).

## 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*, *elevada*, *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.

```python

from phonometry import hearing

# 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 hearing.sii.VOCAL_EFFORTS:
    print(effort, round(hearing.speech_intelligibility_index(effort, noise).sii, 2))
# normal 0.12 | raised 0.36 | loud 0.59 | shout 0.79

print(hearing.standard_speech_spectrum("loud")[8])  # 42.16 dB SPL a 1 kHz
```

Los 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.

<details>
<summary>Mostrar el código de esta figura</summary>

```python

from phonometry import hearing

# Una línea: toda la familia de la Tabla 3 de ANSI S3.5-1997.
hearing.standard_speech_spectra().plot(language="es")
plt.show()

# A mano, reproduciendo lo que dibuja StandardSpeechSpectrum.plot():
res = hearing.standard_speech_spectra()
pos = np.arange(res.frequencies.size)
fig, ax = plt.subplots()
for effort, levels in zip(res.vocal_efforts, res.levels):
    ax.plot(pos, levels, "o-", label=effort.capitalize())
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 espectral del habla [dB SPL]")
ax.legend()
plt.show()
```

</details>

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.

<details>
<summary>Mostrar el código de esta figura</summary>

```python

from matplotlib.ticker import NullFormatter
from phonometry import hearing

# 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 = hearing.sii.VOCAL_EFFORTS         # ("normal", "raised", "loud", "shout")
freqs = hearing.sii.BAND_CENTERS            # los 18 centros de banda de tercio de octava
nombres = {"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, hearing.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 espectral del habla [dB SPL]")
ax_s.legend()

# Derecha: el SII que alcanza cada espectro en el ruido fijo.
sii = [hearing.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()
```

</details>

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. ¿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 `Ii` aplicada a la audibilidad de banda `Ai` | Función de transferencia de modulación m(F) 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: calificar 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](/phonometry/es/guides/speech-transmission/)
para el lado del STI.

## 6. 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 norma base, un bloque de
metadatos opcional, una tabla por bandas de tercio de octava del espectro del
habla equivalente $E_i'$, la función de importancia de banda $I_i$ de la Tabla 3
y la función de audibilidad de banda $A_i$ 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](/phonometry/es/guides/insulation-field/#informe-de-iso-717-report);
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 $D_i$. La generación necesita reportlab
(`pip install phonometry[report]`); solo se admite `engine="reportlab"`. Pasa
`language="es"` para la ficha en español.

```python
from phonometry import hearing, ReportMetadata

res = hearing.speech_intelligibility_index(speech, 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.

## Qué cubre esta guía

**Cubierto.** El método por bandas de tercio de octava de ANSI S3.5-1997
(R2017) (18 bandas, 160 Hz a 8000 Hz): los niveles espectrales equivalentes de
habla, ruido y umbral de audición, la función de importancia de banda de la
Tabla 3 y los espectros de voz estándar por esfuerzo vocal, la automáscara del
habla, la propagación ascendente de la máscara, el factor de distorsión de
nivel y la función de audibilidad de banda de la cláusula 5, y el índice de la
cláusula 6. `speech_intelligibility_index`, `standard_speech_spectrum` y
`standard_speech_spectra` implementan esto, y `SIIResult.report(path)` genera
la ficha de ANSI S3.5-1997.

**No cubierto.** El título de la norma está en plural ("Methods for the
Calculation of the Speech Intelligibility Index"): phonometry implementa solo
el procedimiento por bandas de tercio de octava, no los demás métodos de
resolución de banda de la norma. La función de importancia de banda usada es
siempre el compromiso de habla promedio de la Tabla 3; 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 están
implementadas. 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](/phonometry/es/guides/speech-transmission/).

## Véase también

- [Índice de transmisión del habla](/phonometry/es/guides/speech-transmission/): el
  índice de transmisión STI/STIPA que el SII complementa.
- [Sonoridad](/phonometry/es/guides/loudness/) y
  [Métricas de calidad sonora](/phonometry/es/guides/sound-quality/): la sonoridad, el
  sharpness y las métricas de percepción de lo que oye quien escucha.
- [Bancos de filtros](/phonometry/es/guides/filter-banks/): las bandas de tercio de octava
  sobre las que se evalúa el SII.
- [Niveles](/phonometry/es/guides/levels/): los niveles espectrales y de banda que sustentan las
  entradas de nivel espectral equivalente.
- Referencia de la API: [`hearing.sii`](/phonometry/es/reference/api/speech/sii/).

## Respuestas rápidas

### ¿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 $I_i$ (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?

El SII de la cláusula 6 de ANSI S3.5-1997 es la suma de las audibilidades de
banda ponderada por la importancia de banda,
$\text{SII} = \sum_i I_i A_i$, sobre las 18 bandas de tercio de octava. Cada
audibilidad de banda es
$A_i = \operatorname{clip}\!\left((E_i' - D_i + 15)/30,\; 0,\; 1\right)$
(cláusula 5.8), donde $E_i'$ es el nivel espectral del habla equivalente y
$D_i$ la perturbación equivalente, que combina el ruido externo, la
propagación ascendente del enmascaramiento y el ruido interno equivalente. El
índice queda en $[0, 1]$.

### ¿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) califica 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.
