Saltar al contenido principal
LibreTexts Español

12.6: Tema extendido - Procesamiento de señales digitales

  • Page ID
    87832
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Mucho se ha dicho en este capítulo sobre la capacidad de las computadoras personales para almacenar y manipular datos en el dominio digital. Este proceso se denomina procesamiento de señal digital (DSP). Los datos muestreados generalmente se almacenan en RAM como una gran matriz de valores. Normalmente, los datos están en forma entera. Esto se debe a que los microprocesadores son generalmente más rápidos en la realización de cálculos enteros que los cálculos de punto flotante Además, los convertidores AD producen valores enteros, por lo que esto es doblemente conveniente. Como ejemplo, si se usa una resolución de 8 bits, cada punto de muestreo requerirá un byte (8 bits). El byte es la unidad fundamental del almacenamiento de memoria de computadora, y por lo tanto el almacenamiento como un simple múltiplo de bytes (8 bits, 16 bits, 32 bits) es sencillo. Los datos pueden almacenarse en formatos unipolares (sin signo) o bipolares (firmados). Para sistemas sin signo, el valor de datos “0” significa “pico más negativo”. En los sistemas firmados, normalmente se utiliza un formulario de cumplido de dos. Aquí, un valor de datos de “0” significa “0 V”. Todos los valores negativos tienen su conjunto de bits más significativos (para una representación de 8 bits,\(−1 = 11111111, −2 = 11111110,\) etc.). Las señales de entrada suelen ser AC, por lo que las representaciones firmadas son bastante comunes.

    En BASIC, la matriz de datos podría llamarse data (), y se accede a los elementos individuales estableciendo correctamente el índice de matriz. El primer elemento son datos (1), el segundo son datos (2) y el elemento N-ésimo son datos (N). Aunque BASIC es útil, no es tan potente como lenguajes como C, que ofrecen manipulación directa de direcciones de memoria a través de punteros. En C, la dirección inicial, o base, de los datos podría recibir el nombre data\ _ptr. Para acceder a diferentes elementos de la matriz, se agrega un desplazamiento a la base. La dirección del segundo elemento es data\ _ptr + 1, la tercera es data\ _ptr + 2, y así sucesivamente. Como alternativa, podríamos simplemente incrementar el puntero continuamente, como en data\ _ptr++. La manipulación directa de punteros es generalmente más rápida para el microprocesador que la indexación de matrices. Para encontrar el valor almacenado en una dirección dada, C utiliza el operador de indirección, *. Para asignar el segundo valor de datos a la variable x, dirías x = * (data\ _ptr + 1) o simplemente x = *data\ _ptr++ si el puntero se incrementa continuamente. El equivalente BASIC es x = data (2).

    No importa cómo se acceda a los datos, cualquier función matemática puede ser aplicada a los elementos de datos. En los ejemplos siguientes, se utiliza C para ilustrar los conceptos. Solo se muestra la parte de procesamiento del código. La matriz de origen se llama src () y tiene un número TOTAL de elementos. La matriz de destino se llama dest (). Además, las preguntas relativas a la representación de entero versus coma flotante se pasan por alto para mantener los ejemplos lo más sencillos posible. En el mundo real, no se pueden ignorar problemas como la velocidad de ejecución, el error de redondeo y el desbordamiento.

    Empecemos con algo sencillo. Supongamos que nos gustaría simular la operación de un búfer inversor. Un búfer de inversión simplemente multiplica la señal de entrada por −1. Así es como lo hacemos en el dominio digital: cada punto se multiplica por −1.

    for( i=0; i<TOTAL; i++ )
    {
        *dest++ = -1 * (*src++);
    }
    

    Podemos extender este concepto un poco más allá reemplazando “−1” por una variable llamada “ganancia”. De esta manera, podemos alterar la amplitud de la señal digitalmente.

    Otro cálculo útil es el valor promedio. Para los datos firmados, el valor promedio es igual al componente de desplazamiento de CC.

    sum = 0;
    for( i=0; i<TOTAL; i++ )
    {
         sum += *src++;
    }
    average = sum / TOTAL;
    

    Para agregar un desplazamiento de CC, se agrega una constante a cada elemento de datos a su vez.

    for( i=0; i<TOTAL; i++ )
    {
        *dest++ = offset + (*src++);
    }
    

    Podríamos desear combinar dos formas de onda diferentes en una tercera forma de onda. La adición simple es todo lo que se requiere. (El ejemplo asume que ambas matrices son del mismo tamaño).

    for( i=0; i<TOTAL; i++ )
    {
        *dest++ = (*src++) + (*src2++);
    }
    

    Si las dos matrices de fuentes se multiplican en lugar de agregarse, se puede producir modulación de señal.

    Estos ejemplos son relativamente simples. Con una programación adecuada, se pueden simular una amplia variedad de funciones, incluido el análisis espectral, la traducción a nuevas velocidades de muestreo y la realización de funciones de filtro complejas que no son prácticas de implementación en el dominio analógico. El principal inconveniente de las técnicas DSP es la potencia informática inherente requerida. Por lo tanto, la aplicación en tiempo real de principios DSP complejos no es posible sin usar computadoras potentes. Los CI especializados han sido diseñados para implementar subfunciones DSP muy rápidamente. Estos chips hacen que el DSP en tiempo real sea práctico y ecológico. Los CI DSP son programables, por lo que ofrecen la clara ventaja de poder producir diferentes funciones en diferentes momentos cargando nuevos programas. De esta manera, son mucho más flexibles que los circuitos analógicos dedicados. Por ejemplo, se puede diseñar una unidad de efectos de guitarra totalmente DSP que abarca una amplia gama de funciones como ecualización, cambio de tono, chorusing, reverberación y otros efectos. La amplitud y la conformación espectral se realizan directamente en el dominio digital en lugar de usar circuitos analógicos dedicados.


    This page titled 12.6: Tema extendido - Procesamiento de señales digitales is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.