---
title: "Primeros pasos"
description: "Instala phonometry y ejecuta tu primer análisis de octava fraccional."
---

## Instalación

**Opción 1: Desde PyPI (recomendada)**

```bash
pip install phonometry
```

Extras opcionales:

```bash
pip install phonometry[plot]   # matplotlib, para gráficas de respuesta y métodos .plot() de resultados
pip install phonometry[perf]  # numba, ponderación temporal 'impulse' más rápida
pip install phonometry[full]  # ambos
```

**Opción 2: Clonar e instalar**

```bash
git clone https://github.com/jmrplens/phonometry.git
cd phonometry
pip install .
```

**Opción 3: Submódulo de git**

```bash
git submodule add https://github.com/jmrplens/phonometry.git
# Después, instálalo en modo editable para usarlo desde tu proyecto
pip install -e ./phonometry
```

## La cadena de procesado de un vistazo

Todo análisis con phonometry es un subconjunto de una misma cadena: tomar la
señal cruda, convertirla a unidades físicas, ponderarla en frecuencia, dividirla
en bandas normalizadas, suavizarla en el tiempo y reducirla a métricas:

<img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/diagram_signal_chain_es.svg" alt="Cadena de procesado de phonometry: señal, calibración, ponderación frecuencial, banco de filtros de octava, ponderación temporal y métricas, con la norma verificada en cada etapa" style="width:92%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/diagram_signal_chain_es_dark.svg" alt="Cadena de procesado de phonometry: señal, calibración, ponderación frecuencial, banco de filtros de octava, ponderación temporal y métricas, con la norma verificada en cada etapa" style="width:92%">

Cada etapa es una función o clase independiente que puedes usar por separado;
las guías las recorren de izquierda a derecha ([Calibración](/phonometry/es/guides/calibration/) →
[Ponderación frecuencial](/phonometry/es/guides/weighting/) → [Bancos de filtros](/phonometry/es/guides/filter-banks/) →
[Ponderación temporal](/phonometry/es/guides/time-weighting/) → [Niveles](/phonometry/es/guides/levels/)).

## Uso básico: análisis en tercios de octava

Analiza una señal y obtén el nivel de presión sonora (SPL) por banda de frecuencia.

```python
import numpy as np
from phonometry import octave_filter

fs = 48000
t = np.linspace(0, 1, fs, endpoint=False)
# Señal compuesta: 100 Hz + 1000 Hz
signal = np.sin(2 * np.pi * 100 * t) + np.sin(2 * np.pi * 1000 * t)

# Aplicar el banco de filtros de 1/3 de octava
spl, freq = octave_filter(signal, fs=fs, fraction=3)

print(f"Bandas: {freq}")
# Bandas: [12.589254117941678, 15.848931924611138, ..., 19952.623149688785]  (33 bandas)
print(f"SPL [dB]: {spl}")
# SPL [dB]: [46.88395351 47.96774897 49.04991279 ...]  — ~90.7 dB en 100 Hz y ~90.9 dB en 1 kHz
```

<img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/signal_response_fraction_3_es.png" alt="Análisis en tercios de octava de una señal multitono con la PSD cruda de fondo" style="width:80%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/signal_response_fraction_3_es_dark.png" alt="Análisis en tercios de octava de una señal multitono con la PSD cruda de fondo" style="width:80%">

*Ejemplo de análisis espectral en tercios de octava de una señal compleja.*

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

```python
import matplotlib.pyplot as plt
import scipy.signal

# Usa `signal`, `fs`, `spl` y `freq` del snippet anterior.
# Fondo gris: la PSD de la señal cruda (Welch), desplazada justo por debajo
# de los SPL de banda para comparar ambas formas espectrales en un mismo eje.
f_psd, psd = scipy.signal.welch(signal, fs, nperseg=8192)
psd_db = 10 * np.log10(psd + 1e-12)
psd_db += np.max(spl) - np.max(psd_db) - 5

fig, ax = plt.subplots()
ax.semilogx(f_psd, psd_db, color="gray", alpha=0.6, label="PSD de la señal cruda")
ax.semilogx(freq, spl, marker="o", markerfacecolor="white",
            label="Bandas de 1/3 de octava")
ax.set_xlabel("Frecuencia [Hz]")
ax.set_ylabel("SPL [dB]")
ax.legend()
plt.show()
```

</details>

## Analizar un archivo de audio

```python
from scipy.io import wavfile
from phonometry import octave_filter

# Cargar un archivo WAV estándar
fs, signal = wavfile.read("measurement.wav")

# Analizar
# Nota: para obtener valores SPL reales debes calibrar la entrada.
# Consulta la guía de calibración.
spl, freq = octave_filter(signal, fs=fs, fraction=3)
```

El audio entero (por ejemplo, datos int16 de un WAV) se convierte internamente a
float64, así que es seguro pasar directamente la salida de `wavfile.read`.

## Siguientes pasos

- [Bancos de filtros](/phonometry/es/guides/filter-banks/) — elige una arquitectura e inspecciona sus respuestas
- [Calibración y dBFS](/phonometry/es/guides/calibration/) — obtén valores SPL reales
- [Referencia de la API](/phonometry/es/reference/api/) — todos los parámetros de cada función
