Bitácora · DCSS · Unidad 2

Reordenar no cambia la señal: cambia la factura

Unidad 2 · Conversores

El apunte de la cátedra abre este tema acusando al decimador de la nota anterior de un desperdicio: filtra las N muestras de entrada como si todas fueran a sobrevivir, y después tira M−1 de cada M salidas. El interpolador es peor —multiplica por los ceros que él mismo insertó, a granel—. La descomposición polifásica no cambia una sola cosa de lo que el filtro hace: cambia el orden en que lo hace. Con un h[n] de 128 coeficientes y M=32 eso no es una mejora cosmética: son 128 multiplicaciones por tick de entrada contra 4 —32 veces menos, exacto, porque 128/32 no tiene resto— y la señal que sale es la misma, al piso del punto flotante.

Medido sobre un FIR de 128 coeficientes —el generador de retardo fraccionario de esta unidad, con δ=0,3; no importa qué filtro sea, la descomposición no sabe ni le pregunta qué hace— y una señal de prueba de 400 muestras (tres senoidales sin relación armónica entre sí, para no esconder un error de índices detrás de una periodicidad conveniente), la diferencia máxima entre calcular la salida filtrando-y-diezmando de una sola vez y calcularla por el banco polifásico es 1,11×10−15 en M=32, y se queda en ese piso para cualquier M que divida a 128. Sólo en M=1 —sin descomposición, cero ahorro— la diferencia da exactamente cero: con una sola rama las dos cuentas son, literalmente, la misma cuenta. Para M>1 no lo son: suman los mismos 128 productos en otro orden, y ese reordenamiento es justo lo que deja una huella de 10−15 en vez de un cero perfecto.

01 · El decimador calcula lo que va a tirar

El apunte lo plantea como una pregunta: ¿cuándo se puede cruzar un filtro al otro lado de un cambio de tasa sin tocar lo que calcula? La respuesta son las identidades nobles, y piden una condición estructural sobre el filtro: que sus coeficientes estén separados por múltiplos de N, o sea que sea función de zM y no de z a secas. Cuando lo es, filtrar con H(zM) y diezmar por N después da exactamente lo mismo que diezmar por N primero y filtrar con el H(z) «compacto» después —el mismo filtro, escrito sin los ceros que hoy separan sus coeficientes—. La ventaja apunta siempre para el mismo lado: filtrar donde el reloj es más lento.

Un h[n] cualquiera no cumple esa condición —sus coeficientes están pegados uno al lado del otro, no separados por M ceros—. La descomposición polifásica es la maniobra que arma, a partir de ese h[n] cualquiera, los M subfiltros que sí la cumplen.

Figura 1 La identidad noble — dos cadenas, la misma cuenta. La de abajo diezma primero: el filtro que sigue corre a una tasa M veces más lenta.

02 · Repartir cartas: la descomposición polifásica

Repartí los N coeficientes de h[n] entre M jugadores, en ronda, como cartas: la componente k se queda con h[k],h[k+M],h[k+2M],… —cada M-ésimo coeficiente, arrancando en k—.

ek[n]=h[nM+k], para k=0,…,M−1

Es sólo un reordenamiento. Intercalar las M componentes de vuelta, coeficiente por coeficiente, reconstruye h exacto: no es una aproximación, es la misma suma agrupada distinto —H(z)=∑kz−k·Hk(zM), con cada Hk la respuesta en frecuencia de la componente ek—. Cada Hk evaluado en zM es exactamente la forma que pide la identidad noble de arriba: no es casualidad, es el objetivo de la maniobra.

Sobre el ejemplo de la filmina, h = [1, 2, 3, 4, 5, 6]: con M=2 las componentes son [1, 3, 5] y [2, 4, 6]; con M=3 son [1, 4], [2, 5] y [3, 6]. Lo único que cambia es cómo se agrupan los seis números. Ninguno se pierde ni se inventa.

Figura 2 El banco polifásico decimador — cada rama retarda, diezma y filtra con su componente eₖ, a la tasa baja. Las M salidas se suman.

03 · La factura: N multiplicaciones contra N/M

Aplicar la identidad noble a un decimador reparte el filtro entre las M ramas del banco: la rama k retarda la entrada k muestras, diezma por M —elige x[mM−k], sin gastar una sola multiplicación en las M−1 muestras que de todos modos iba a descartar— y filtra recién ahí, con ek, que tiene N/M coeficientes. Las M salidas, ya a la tasa baja, se suman.

Por muestra de entrada, el filtro directo hace N multiplicaciones y tira la mayoría: diezmar N−1 de cada N salidas ya calculadas es plata quemada, salvo la que sobrevive. La forma polifásica hace N/M multiplicaciones por muestra de entrada, repartidas entre las M ramas: con N=128 y M=32 eso es 4. No «cerca de 4»: 128/32=4 exacto, porque M divide a N. El costo cae linealmente con M —duplicar M vuelve a partir el costo al medio— mientras la salida, medida arriba, no se mueve del piso del punto flotante.

Del otro lado —el interpolador insertando L−1 ceros por cada muestra que entra, de la nota anterior— la misma maniobra da la misma ganancia con el nombre cambiado: L en vez de M, y por la misma razón, no multiplicar por lo que ya se sabe que es cero. El apunte lo resume en una frase, y vale para los dos lados del cambio de tasa: reordenar para filtrar a la tasa baja.

Simulación 1 Subí M — la curva gris es la salida filtrando y diezmando de una sola vez; la azul punteada, la del banco polifásico. Se dibujan una encima de la otra a propósito: si en algún M llegás a ver dos curvas separadas, algo en la descomposición está mal.
multiplicaciones/tick 128 ahorro 1× directo − polifásico (máximo) 0,00

Esa es la nota entera, y es toda la unidad resumida en una sola imagen: el contador de multiplicaciones se desploma —128, 64, 32, …, hasta 1 por tick— y la curva azul nunca se despega de la gris. Reordenar una suma no sale gratis por magia: sale gratis porque la suma, agrupada de cualquier forma, sigue siendo la misma suma. Lo único que cambia es la factura.

Para tener a mano

  1. La descomposición polifásica reparte h[n] en M componentes, ek[n]=h[nM+k] —una identidad, no una aproximación: intercalarlas reconstruye h exacto.
  2. La identidad noble cruza un filtro función de zM al otro lado de un cambio de tasa: H(z^M) → ↓M ≡ ↓M → H(z), filtrando siempre del lado de la tasa baja.
  3. El decimador polifásico diezma la entrada primero y filtra después, con N/M coeficientes por rama: el costo cae de N a N/M multiplicaciones por tick.
  4. Con N=128 y M=32: de 128 a 4 multiplicaciones por tick —32×, exacto— y la salida coincide con la del camino directo al piso del punto flotante (1,11×10−15 medido).
  5. La interpolación polifásica es la misma maniobra del otro lado del cambio de tasa: filtra antes de insertar los ceros, y no multiplica nunca por ellos.
← Anterior Siguiente → Inicio