# Procesador de señales digitales

Un procesador de señales digitales o DSP (en inglés de digital signal processor) es un sistema basado en un procesador o microprocesador que posee un conjunto de instrucciones, un hardware y un software optimizados para aplicaciones que requieran operaciones numéricas a muy alta velocidad. Debido a esto es especialmente útil para el procesado de señales y representación de señales analógicas en tiempo real: en un sistema que trabaje de esta forma (tiempo real) se reciben muestras normalmente provenientes de un conversor analógico/digital (ADC).

## Historia

En 1978, INTEL lanzó el 2920 como un procesador de señales analógicas. Este poseía un chip ADC/DAC con un procesador de señales interno, pero no poseía un multiplicador de hardware, el 2920 no tuvo éxito en el mercado.
En 1979, AMI lanza el S2811, fue diseñado como un microprocesador periférico, al igual que el 2920 no tuvo gran éxito en el mercado. En el mismo año, Bell Labs introduce el primer chip procesador digital de señales (DSP), The Mac 4 Microprocessor. Luego en 1980 fueron presentados en el ISSCC’80 los primeros DSP completos: el PD7710 de NEC y el DSP1 de AT&T, ambos procesadores fueron inspirados en las investigaciones de PSTN Telecomunicaciones. En ese mismo año NEC comenzó la producción del PD7710, la primera producción de DSP completos en el mundo.
El primer DSP producido por Texas Instruments, el TMS32010, probó ser un gran éxito. Actualmente el TMS320C4X diseñado y producido por TEXAS INSTRUMENTS, surge con ciertas ventajas frente al resto de los procesadores, ya que este se diseña para ser escalable; es decir, para que pueda trabajar en paralelo con otros dispositivos similares. Muchos de los procesadores se engloban dentro de la filosofía CISC (computación con conjunto complejo de instrucciones) Aunque se pueden encontrar en el mercado algunos que operen bajo la filosofía RISC (computación con conjunto reducido de instrucciones); estos últimos dedicados para aplicaciones concretas como la telefonía móvil.

## Funcionamiento

Se ha dicho que puede trabajar con señales analógicas, pero el DSP es un sistema digital, por lo tanto necesitará un conversor analógico/digital a su entrada y digital/analógico en la salida. Como todo sistema basado en procesador programable necesita una memoria donde almacenar los datos con los que trabajará y el programa que ejecuta.
Si se tiene en cuenta que un DSP puede trabajar con varios datos en paralelo y un diseño e instrucciones específicas para el procesado digital, se puede dar una idea de su enorme potencia para este tipo de aplicaciones. Estas características constituyen la principal diferencia de un DSP y otros tipos de procesadores.
Para adentrar en su funcionamiento se pondrá el ejemplo de un filtro: el DSP recibirá valores digitales o samples procedentes de la señal de entrada, calcula qué salida se obtendrá para esos valores con el filtro que se le ha programado y saca esa salida. Un posible sistema basado en un DSP puede ser el siguiente:
La señal entrante entra directamente en un filtro antialiasing para evitar frecuencias superiores a la muestreada del conversor analógico-digital. Después se lleva a cabo el procesado digital en el módulo DSP, para después volverse a convertir en analógico y dar paso a la salida.

## Arquitectura

Un DSP está diseñado teniendo en cuenta las tareas más habituales del procesado digital: sumas, multiplicaciones y retrasos (almacenar en memoria).
Los DSP abandonan la arquitectura clásica de Von Neumann, en la que datos y programas están en la misma zona de memoria, y apuestan por la denominada Arquitectura Harvard. En una arquitectura Harvard existen bloques de memoria físicamente separados para datos y programas. Cada uno de estos bloques de memoria se direcciona mediante buses separados (tanto de direcciones como de datos), e incluso es posible que la memoria de datos tenga distinta anchura de palabra que la memoria de programa (como ocurre en ciertos microcontroladores).
Los elementos básicos que componen un DSP son:
* Conversores en las entradas y salidas
* Memoria de datos, memoria de programa y DMA.
* MACs: multiplicadores y acumuladores.
* ALU: unidad aritmético-lógica.
* Registros.
* PLL: bucles enganchados en fase.
* PWM: módulos de control de ancho de pulso.

## Programación

Un DSP se puede programar tanto en ensamblador como en C. Cada familia de DSP tiene su propio lenguaje ensamblador y sus propias herramientas suministradas por el fabricante. Gracias a la colaboración entre fabricantes, existen lenguajes de más alto nivel (y por lo tanto, más sencillos y rápidos de usar) que incorporan la capacidad de programar los DSP, en general pasando por un precompilado automático en C. Son los casos de LabVIEW y Matlab.

### Ejemplo de un filtro con script m compatible con LabVIEW MathScript y con Matlab

En el siguiente ejemplo se presenta la programación de un filtro digital en script m. El parámetro "entrada" es un valor que hay que darle al programa. Cabe destacar que los coeficientes del filtro están en los arrays den y num. Nótese que todas las operaciones son sumas (o restas), multiplicaciones y almacenamiento en memoria (variable w).

## Aplicaciones

Las aplicaciones más habituales en las que se emplean DSP son el procesado de audio y vídeo; y cualquier otra aplicación que requiera el procesado en tiempo real. Con estas aplicaciones se puede eliminar el eco en las líneas de comunicaciones, lograr hacer más claras imágenes de órganos internos en los equipos de diagnóstico médico, cifrar conversaciones en teléfonos celulares para mantener privacidad, analizar datos sísmicos para encontrar nuevas reservas de petróleo, hace posible las comunicaciones wireless LAN, el reconocimiento de voz, los reproductores digitales de audio, los módems inalámbricos, las cámaras digitales, y una larga lista de elementos que pueden ser relacionados con el proceso de señales.