Skip to main content
En este tema, se explica el uso de la reducción de la respuesta al impulso como parte de la realización de la convolución en dispositivos XBOX Series X mediante XDSP. Este mecanismo se desarrolló como un método flexible para que los desarrolladores puedan encontrar el equilibrio adecuado entre una pequeña pérdida de calidad de audio y grandes mejoras de rendimiento, sin dejar de aprovechar la aceleración de hardware que ofrece XDSP.

Herramienta de ejemplo y código fuente

La herramienta de transformación de IR incluida para ayudarle a transformar sus respuestas al impulso del dominio del tiempo al dominio de la frecuencia se ha actualizado para incluir compatibilidad con el mecanismo de reducción. La herramienta se puede configurar para generar esta tabla pasando un parámetro de línea de comandos para especificar la calidad (entre 0.0 y 99.9, donde 0.0 significa que se conservará el 99,9 % de la energía de la respuesta al impulso, y 99.9 significa que se conservará el 99,99 % de la potencia). Con esto habilitado, XDSP no procesará las muestras de potencia extremadamente baja de la respuesta al impulso (valores de cero o casi cero) para mejorar la velocidad de procesamiento. El código para establecer y escribir la tabla de reducción está en una clase llamada ImpulseResponseReduction en el archivo main.cpp, y la función que escribe la tabla de reducción es ImpulseResponseReduction::SetReductionBlock. Esto se puede personalizar para adaptarse a sus necesidades, siempre que el formato de la tabla de reducción sea el que se especifica a continuación, lo que le permite indicar cuántas muestras desea procesar para cada bloque de la respuesta al impulso.

Formato de la tabla de reducción

El mecanismo de reducción de la respuesta al impulso funciona sobre la base de un bloque de reducción agregado al final del búfer de la respuesta al impulso en el dominio de la frecuencia. El bloque de reducción tiene el tamaño de un bloque de respuesta al impulso y comienza con una firma de 4 bytes igual a 0xFFFFACE1, seguida de hasta 15 entradas de estructuras de 4 bytes. El resto del bloque debe rellenarse con ceros. La estructura de 4 bytes contiene dos valores sin signo de 16 bits: la frecuencia de corte y el índice de bloque. A continuación se muestra un ejemplo:
Este ejemplo está codificado en little-endian y se traduce en la tabla siguiente: Cuando XDSP procesa un bloque de reducción de este tipo, ocurre lo siguiente:
  • El hardware procesará el bloque de respuesta al impulso completo hasta el bloque 8 (es decir, los primeros 8 bloques, ya que los bloques se indexan desde 0).
  • Desde el bloque 8 hasta el bloque 86, el hardware solo procesará las primeras 384 muestras de cada bloque, descartando el resto de las muestras, ya que se considera que tienen muy poco impacto en la salida.
  • Desde el bloque 86 hasta el bloque 102, el hardware solo procesará las primeras 128 muestras de cada bloque, descartando el resto de las muestras.
  • Desde el bloque 102 hasta el bloque 159, el hardware solo procesará las primeras 16 muestras de cada bloque, descartando el resto de las muestras. Como la respuesta al impulso de este ejemplo solo tiene 158 bloques, esto representa la última entrada válida de la tabla.
  • El hardware solo considera válida la siguiente entrada si tiene un índice de bloque mayor que la entrada actual; por lo tanto, el resto de la tabla se rellena con la última entrada válida para indicar que no son válidas y que deben ignorarse.
Este esquema permite al hardware realizar menos procesamiento y, por lo tanto, completar la operación solicitada a mayor velocidad, a la vez que ofrece flexibilidad a los desarrolladores para crear sus propios algoritmos con los que optimizar sus respuestas al impulso.

Notas

Hay varios aspectos que se deben tener en cuenta al implementar un algoritmo personalizado para generar una tabla de reducción de impulso válida:
  • El índice de bloque debe tener un valor de al menos 8; en otras palabras, los primeros 8 bloques de la respuesta al impulso nunca deben reducirse.
  • La frecuencia de corte debe ser un múltiplo de 16 y debe ser de al menos 16.
  • La frecuencia de corte no debe superar el tamaño del bloque; esto sería una entrada no válida.
  • El bloque de reducción de la respuesta al impulso debe tener el tamaño de un bloque completo de respuesta al impulso. Se espera que el espacio posterior a la tabla se rellene con ceros.
  • Al usar una respuesta al impulso estéreo con el mecanismo de reducción, se espera un bloque de reducción al final de cada canal.
  • Recuerde tener en cuenta el espacio adicional del bloque de reducción de la respuesta al impulso al especificar el parámetro impulseResponseLengthInFloats en XDspActivationParameters.

Documentación de referencia de la API

Consulte también

Información general de XDSP
Última modificación el 28 de agosto de 2026