Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia CAPÍTULO 3. MODELADO DE COMPORTAMIENTO DEL AMPLIFICADOR DE POTENCIA DE RADIOFRECUENCIA 3.1 MODELOS DE COMPORTAMIENTO Y SERIES DE VOLTERRA 3.1.1 INTRODUCCIÓN A LOS MODELOS DE COMPORTAMIENTO Los modelos de comportamiento son a menudo usados para describir fenómenos donde puede que no se conozcan completamente los procesos físicos involucrados, o al menos resulte demasiado difícil capturarlos. Estos modelos son construidos usualmente a partir de los datos empíricos obtenidos, y relacionan los resultados de un proceso con sus estímulos mediante una relación puramente matemática. Los sistemas de comunicaciones modernos de microondas y wireless son a menudo demasiado complejos para permitir su completa simulación. El gran número de ecuaciones no lineales que se deben resolver es un serio problema, tanto en lo que respecta al tiempo de simulación como a la memoria. La solución más eficiente es reemplazar los circuitos completos y bloques funcionales no lineales de sistemas completos por simplificados, pero suficientemente precisos, modelos de comportamiento. El modelado de comportamiento es generalmente propuesto para caracterizar un sistema no lineal completo, o una sección de dicho sistema, en términos de señales de entrada y salida usando expresiones matemáticas relativamente simples. En este tipo de modelo a nivel de sistema, el dispositivo modelado es considerado como una caja negra, y en principio no se requiere conocimiento de su estructura interna, conteniéndose la información del modelo completamente en las respuestas externas del dispositivo. Debido a esta característica, los parámetros del modelo pueden ser estimados a partir de las respuestas medidas. Los modelos de comportamiento permiten la simulación completa a un nivel superior de abstracción a la vez que siguen representando de manera precisa el efecto de los bloques no lineales dentro de la totalidad del sistema. De la misma manera, proporcionan una forma clave de proteger la propiedad intelectual asociada con un circuito o bloque funcional, a la vez que siguen encapsulando sus características. Es una seguridad mucho mayor que la encriptación, esto es, ocultar los detalles del modelo a nivel de circuito. La propiedad intelectual se 69 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia puede compartir libremente y combinarse con el fin de obtener un beneficio mutuo sin riesgo de compromiso. Por otro lado, un diseñador de sistemas puede que no tenga todos los componentes de hardware necesarios para obtener un prototipo de un diseño completo. Los modelos de comportamiento ofrecen la posibilidad de diseñar un sistema incluso antes de que los componentes estén disponibles. También, un modelo que represente un dispositivo se puede usar para determinar si éste es una buena opción para usarse en un diseño de sistema. De hecho un buen modelo de comportamiento es quizás la mejor especificación de las características del dispositivo. Los modelos de comportamiento pueden constituir por tanto una ventaja clave tanto para las empresas dedicadas al diseño de circuitos como para las dedicadas al diseño de sistemas. Un modelo de comportamiento de un circuito se puede enviar a una empresa dedicada al diseño de sistemas para que ésta lo evalúe en lugar del componente real. Las empresas dedicadas al diseño de circuitos que ofrecen buenos modelos de comportamiento hacen que sea más fácil que sus productos se diseñen dentro de una estructura de sistemas, de manera que presentan una ventaja respecto a otras empresas de diseño con tecnología hardware comparable. Además, una empresa diseñadora de sistemas con la capacidad de crear sus propios modelos de comportamiento puede diseñar sistemas con más facilidad que otras que deben esperar a tener el hardware adecuado, evitando así construir prototipos muy costosos y que consumen mucho tiempo. 3.1.2 MÉTODOS DE VOLTERRA PARA EL MODELADO DE COMPORTAMIENTO Los estudios del matemático italiano Vito Volterra (1860-1940) fueron pioneros y desarrolló la rama de las matemáticas conocida como análisis funcional. Su primer artículo sobre el tema de los parámetros funcionales se publicó en 1887 y su colección de trabajos fue publicado en el volumen titulado Theory of Functionals and of Integro-Differential Equations en 1936. El uso común de la teoría de Volterra en la ingeniería de sistemas se debe a Norbert Wiener, quien desarrolló la hipótesis de que un sistema no lineal invariante en el tiempo se podía llevar a cabo a través de una serie de parámetros funcionales de Volterra, siempre y cuando las no linealidades del sistema no fuesen demasiado fuertes. Wiener también propuso un método para identificar los coeficientes de las funciones de Volterra utilizando ruido blanco. La teoría de Volterra se retomó y se aplicó a los circuitos no lineales y sistemas de comunicaciones por el centro de desarrollo aéreo de Roma en los años 60. El desarrollo y aplicación de estas teorías en los años 70 decayó debido al hecho de que los avances producidos en dispositivos y tecnología de dispositivos implicaron mejoras en la linealidad de 70 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia los circuitos y sistemas. La teoría de Volterra se redescubrió en los años 80 cuando la distorsión en los circuitos de comunicaciones volvió a convertirse en un problema serio: los dispositivos de bajo ruido y alta frecuencia no son de por sí muy lineales, y la complejidad de los sistemas de comunicaciones conllevan que la distorsión tenga que ir encaminada a nivel de circuito. Ahora, con el reciente interés por los modelos de comportamiento de sistemas no lineales, la aplicación de las series de Volterra al análisis del sistema ha alcanzado una gran dimensión. Las series de Volterra son similares a las series de Taylor, se pueden considerar como una serie de Taylor con memoria. Las no linealidades descritas por las series deben satisfacer algún criterio de suavidad para que las series sean convergentes. Esto es otra forma de decir que las series aproximarán el valor concreto en un intervalo situado dentro de una tolerancia especificada (por ejemplo, el error de truncamiento llegue a ser menor que el valor de tolerancia). En la práctica, el número de términos requeridos en las series para cumplir este criterio puede ser muy grande. Cuando el grado del sistema polinomial aumenta, la exigencia computacional requerida para calcular los coeficientes de Volterra también aumenta en gran cantidad. Por lo tanto, en la práctica, limitamos el grado de la simulación a N = 3 o 5, aunque en nuestro proyecto lo ampliaremos a N = 7. Los sistemas que modelamos usando los métodos de Volterra son cuasilineales: las no linealidades son débiles, las no linealidades de mayor orden son muy pequeñas y por tanto una aproximación de nivel bajo es la apropiada. Los métodos de Volterra se han usado durante mucho tiempo y tienen una gran cantidad de base teórica. Representan un enfoque viable para el modelado de comportamiento con el handicap de que están limitados a los sistemas con una no linealidad de carácter débil; esto puede no ser una desventaja en el caso de que se trate de sistemas de comunicaciones modernos en los que el comportamiento no lineal que nos interesa se encuentra en niveles bajos de señal de distorsión, para modelar el recrecimiento espectral por ejemplo. La desventaja de usar los métodos de Volterra reside en la complejidad computacional, lo que los hace poco atractivos para el análisis de los sistemas multicomponente, en los que muchos bloques no lineales están colocados en cascada. Sin embargo, los métodos de Volterra tienen una base argumentativa teórica mucho más fuerte que la de otras técnicas de modelado de comportamiento. Las series de Volterra representan una relación entrada-salida explícita para sistemas no lineales y constan de series infinitas con la forma de integrales de convolución que se muestra a continuación: 71 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia En esta expresión en el dominio del tiempo, x(t) es la señal de entrada al sistema, y(t) es la señal de salida, h1(τ1) es el kernel o coeficiente de primer orden que contiene las propiedades lineales del sistema, h2(τ1,τ2) es el kernel de segundo orden que contiene las propiedades cuadráticas del sistema y hn(τ1,…,τn) es el kernel de orden n. Sustituyendo en la ecuación de arriba las integrales por sumatorios, en el dominio del tiempo discreto las series de Volterra se pueden escribir de la forma siguiente: donde yp(n) representa la contribución de la no linealidad de orden p, y su expresión es la que sigue: donde x(n) e y(n) representa la entrada y la salida respectivamente, y hp(i1,…ip) el kernel de Volterra de orden p. En aplicaciones reales, la serie de Volterra es normalmente truncada a una no linealidad finita de orden p y una longitud de memoria finita M, tal como queda plasmado en las dos últimas ecuaciones. Debido a que en la serie de Volterra general, el número de coeficientes necesarios para lograr la estimación del modelo se incrementa exponencialmente con el grado de la no linealidad y longitud de memoria del sistema, se han propuesto varios enfoques que permitan simplificar la serie general de Volterra y el número de coeficientes. Entre ellos, se encuentra el enfoque de restricción estructural que usamos en nuestro modelo y que será comentado en detalle en las líneas siguientes. Por último, comentar que en el diseño y análisis a nivel de sistema, la mayoría de los simuladores usan señales envolventes complejas paso de banda para evaluar las características del sistema. Para manejar estas señales, el modelo discreto anterior tiene que ser transformado al formato envolvente complejo. Así, las señales de entrada y salida serán representadas por medio de su envolvente compleja y las combinaciones de entrada correspondientes a los distintos coeficientes de Volterra transformados al formato complejo; por ej. al kernel de orden 3 le corresponde el conjunto de entradas x(n-i1)·x(n-i2)·x(٭n-i3), y así sucesivamente para el resto de órdenes. 72 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia 3.2 MODELO DE REFERENCIA Para implementar nuestro modelo de comportamiento nos hemos basado en el modelo que se propone en el artículo siguiente: Anding Zhu y Thomas J. Brazil, Behavioral Modeling of RF Power Amplifiers Based on Pruned Volterra Series, IEEE Microwave and Wireless Components Letters, Vol. 14, No. 12, pp. 563-565, Dec. 2004. En él se presenta un enfoque de restricción estructural para truncar algunos coeficientes que tienen una menor influencia en la salida del sistema no lineal en el modelo general basado en series de Volterra. Con este método, el número de coeficientes del modelo de Volterra puede ser reducido drásticamente y la estructura del modelo simplificada significativamente, sin comprometer sustancialmente la exactitud del modelo. Las series de Volterra truncadas pueden ser usadas para representar una amplia gama de sistemas no lineales invariantes en el tiempo con efectos de memoria. Consideramos las señales de entrada y salida de un amplificador como: , ; donde ωo es la frecuencia de portadora y x(t) e ỹ(t) representan la envolvente compleja de la entrada y salida respectivamente. Usando conversión A/D, el modelo de Volterra complejo en banda base con memoria finita y en tiempo discreto de un amplificador de potencia tiene la forma siguiente: donde hl(i1,i2,…,il) es el kernel de Volterra de orden l, ml representa la “memoria” de la correspondiente no linealidad y (.)* el conjugado. En la ecuación (1), se han eliminado los términos redundantes asociados con la simetría kernel, y también los kernels de orden par, cuyos efectos pueden ser omitidos en sistemas limitados en banda. En situaciones prácticas, truncaremos el modelo a un orden finito N. Más concretamente, las funciones implementadas en nuestro proyecto llegan hasta orden 7. El modelo propuesto en (1) es la base fundamental para enfocar nuestra programación; el modelo implementado que se obtiene partiendo de (1) es el que denominamos como modelo completo sin restricción. Para modelar un amplificador con no linealidades fuertes y efectos de memoria de larga duración, este modelo todavía implica un gran número de coeficientes. 73 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia Lo que se persigue es una simplificación de esta estructura con la consiguiente mejora en la velocidad de simulación. Un método para reducir coeficientes en el modelo es forzar coeficientes individuales a cero y evaluar el cambio producido en el error. Si éste se incrementa inaceptablemente, entonces el coeficiente es restaurado, sino es eliminado. Algunos autores proponen un enfoque de restricción de la manera |im-in| = 0 para 1≤m, n≤j, donde im,in representan la longitud de memoria de la señal de entrada y j es la longitud de la memoria máxima. Éste sería el modelo de Volterra reducido no trivial más simple, el llamado modelo de Volterra diagonal, también llamado modelo polinomial. Aunque esta restricción reduce el número de parámetros enormemente, también decrementa la fidelidad o precisión del modelo. Los autores Zhu y Brazil propusieron una relajación de esta condición de restricción de la forma |im-in|≤l, donde l es un número entero pequeño. Nuestro modelo de comportamiento con restricción implementado se basa en esta propuesta, que recibe el nombre de restricción estructural de diagonalidad cercana. Esta condición produce un incremento de la precisión del modelo respecto al caso diagonal, a la vez que un correspondiente incremento en el número de coeficientes. Esta restricción nos permite modelar un amplificador de potencia con no linealidades fuertes y efectos de memoria de larga duración. El modelo general de Volterra está limitado para modelar sistemas con no linealidades débiles o moderadas, sólo llegando a quinto orden en la mayoría de los casos. Cuando el orden del modelo es siete, el sistema no siempre converge debido al gran número de coeficientes requerido. Sin embargo, si nosotros eliminamos muchos coeficientes en cada orden con la restricción anterior, el número de coeficientes total se reducirá de forma que nos permita modelar distorsiones de orden más alto. 74 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia 3.3 PROGRAMACIÓN EN SCILAB A continuación vamos a describir el procedimiento seguido para programar las funciones que conforman nuestro modelo de comportamiento. En primer lugar, señalar que existen dos pasos para conseguir un modelo: 1) Estimar los parámetros del modelo. Nuestro punto de partida serán las medidas obtenidas empíricamente correspondientes a la excitación y respuesta del dispositivo que queremos modelar. En nuestro caso, trabajaremos con medidas para una señal de entrada correspondiente a una modulación 16-QAM con pulso raíz de coseno alzado con una tasa de muestreo de 15 Mmuestras/s. Mediante programación, ajustaremos el modelo propuesto en (1) de forma que ỹmed=xmed*θ, siendo θ los parámetros del modelo que queremos estimar. Realizando un ajuste por mínimos cuadrados mediante la función pseudoinversa, obtendremos θ, teniendo así estimado nuestro modelo. 2) Emplear el modelo para predecir. Una vez tenemos estimados los parámetros del modelo, construiremos una función que nos permita, partiendo de la excitación, realizar una predicción sobre la respuesta, consiguiendo así predecir las salidas correspondientes a las distintas entradas. Lo primero que haremos será la realización de un guión en Scilab llamado Generamedidas, que se encargará de conseguir unas medidas aleatorias, basándonos para ello en la estructura propuesta en (1). En él, fijamos los retardos m1, m3 y m5 y los coeficientes de Volterra a un valor determinado. Nuestro objetivo es, partiendo de un vector x aleatorio de entrada, generar un vector de salida que cumpla la estructura propuesta en (1). Este guión lo hacemos para comprobar posteriormente que la función de estimación que implementemos realmente funcione correctamente para después comenzar a realizar pruebas con las medidas reales obtenidas del dispositivo. Pasamos a detallar la función que realiza la estimación del modelo completo sin restricción que se presenta en (1). Esta función, denominada VolterraEstima, tiene como parámetros de entrada los vectores x, y correspondientes a la entrada y salida medidas y un vector llamado retardos que contiene los valores de m1, m3, m5 y m7. El único parámetro de salida será el vector theta, que contendrá los parámetros estimados del modelo. El procedimiento seguido es construir una matriz X que contenga todas las combinaciones del vector de entrada x que se presentan en (1), dependiendo 75 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia claro está del valor de los retardos. Así, la estructura (1) quedará representada de forma matricial de la manera y=X*θ. Para ilustrarlo mejor, ponemos un ejemplo sencillo que contemple sólo hasta orden 3, con valores de retardo m1 = m3 = 3. Si desarrollamos la ecuación (1) obtenemos: ỹ(0)= h1(0)·x(0) + h1(1)·x(-1) + h1(2)·x(-2) + h3(0,0,0)·x(0)·x(0)·x(٭0) + h3(0,0,1)·x(0)·x(0)·x(٭-1) + h3(0,0,2)·x(0)·x(0)·x(٭-2) + h3(0,1,0)·x(0)·x(-1)·x(٭0) +… ỹ(1)= h1(0)·x(1) + h1(1)·x(0) + h1(2)·x(-1) + h3(0,0,0)·x(1)·x(1)·x(٭1) + h3(0,0,1)·x(1)·x(1)·x(٭0) + h3(0,0,2)·x(1)·x(1)·x(٭-1) + h3(0,1,0)·x(1)·x(0)·x(٭1) +… . . . Expresando estas ecuaciones en forma matricial: Para construir la matriz X, necesitamos calcular el número de coeficientes de orden 1, 3, 5 y 7 que se generan dependiendo del valor de los retardos m1, m3, m5 y m7. El número de coeficientes de orden 1 es trivial e igual al valor m1. Para los demás, hemos realizado unas funciones llamadas numcolumnasorden3, numcolumnasorden5 y numcolumnasorden7 que generan el número de coeficientes asociado a cada orden de Volterra. Sólo disponen de un parámetro de entrada que sería m3, m5 y m7 respectivamente y un único parámetro de salida, el número de coeficientes. La matriz X tendrá tantas columnas como la suma de los coeficientes de Volterra de orden 1, 3, 5 y 7 para cada caso, y el número de filas será N-mmax+1, donde N = tamaño(x) y mmax es el retardo máximo que existe. 76 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia Esto es así porque se manejan índices para la entrada x negativos, por ejemplo, x(-1), x(-2)…, y para poder implementarlo en Scilab es necesario “desechar” mmax muestras al comienzo del vector x. Para cada orden, vamos anidando bucles for e introduciendo vectores columna con su valor correspondiente hasta completar la matriz X. Una vez tenemos representada la ecuación (1) como y=X*θ, los parámetros del modelo (θ) se obtienen mediante un ajuste con mínimos cuadrados con la función pseudoinversa, que minimiza el error. De esta manera: theta=pinv(X)*y. A continuación, vamos a describir la función que realiza la labor de predecir respuestas una vez tenemos estimados los parámetros del modelo. Esta función, denominada VolterraPredice, es similar a la anterior salvo que ahora los parámetros de entrada serán el vector x de excitación, el vector retardos y el vector theta. El vector y también se considera parámetro de entrada, pero únicamente se usa para generar un vector al que denominamos ymed que tenga en cuenta el hecho de “desechar” mmax muestras al comienzo del vector para que coincidan las dimensiones de los vectores ymed e ypred, que serán los dos parámetros de salida que presenta esta función. El procedimiento para obtener la matriz X es aquí análogo al descrito anteriormente, y una vez construida ésta, se obtiene el vector predicho mediante la orden: ypred=X*theta. De las dos funciones comentadas, VolterraEstima y VolterraPredice, la que consume más recursos computacionales es la función de estimación. Esto es debido al uso de la función pinv, además del gran número de coeficientes que implica un valor alto de los retardos. La función pinv trabaja calculando los autovectores y autovalores de la matriz X, y ésta tiene unas dimensiones muy grandes, de ahí que la estimación sea más lenta que la predicción. Relacionado con lo comentado anteriormente, puede que aparezcan también durante la ejecución de la función VolterraEstima problemas de memoria, que el programa Scilab refleja con el mensaje: “stack size exceeded!” (Use stacksize function to increase it). Scilab dispone de una función, stacksize, que permite aumentar el tamaño de memoria disponible. Podemos aumentar mucho el tamaño de la memoria disponible con una orden del tipo “stacksize(90000000)”, y así el programa nos dejará hacer pruebas con tamaños grandes de las variables. Por otro lado, el parámetro de referencia que usaremos para ir midiendo el grado de exactitud alcanzado en cada modelo implementado va a ser el NMSE (Normalized Mean Square Error) expresado en dB, que es como se presentan los resultados en los artículos disponibles sobre modelos de comportamiento. 77 Capítulo 3. Modelado de comportamiento del amplificador de potencia de radiofrecuencia El objetivo es obtener modelos óptimos para las potencias de entrada de interés, de forma que un modelo será mejor cuánto más bajo sea el valor de este error. Para ello, hemos implementado una función llamada CalculoError, cuyos parámetros de entrada serán los vectores correspondientes a las respuestas medida y predicha, y el parámetro de salida el valor del error NMSE en dB. Para conseguir modelos con el enfoque de restricción estructural, también se han programado las funciones de estimación y predicción oportunas, que llamaremos VolterraRestriccionEstima y VolterraRestriccionPredice. En la primera de ellas, los parámetros de entrada serán los mismos que en la función VolterraEstima, con la inclusión del parámetro l. El parámetro de salida sigue siendo el vector theta que contendrá los parámetros del modelo. En la segunda, los parámetros de entrada son idénticos a los de la función VolterraPredice con la nueva inclusión del parámetro l, y los parámetros de salida son los mismos. El procedimiento seguido para realizar ambas funciones es el siguiente: 1) Generar las combinaciones de índices. Para ello, hacemos uso de unas funciones auxiliares llamadas numcolumnasorden3restriccionl, numcolumnasorden5restriccionl, numcolumnasorden7restriccionl, que reciben como parámetros de entrada el valor del retardo correspondiente y l. El valor de salida será el número de coeficientes que se generan para cada orden. 2) Comprobar que se cumple la restricción |im-in|≤l. Sólo con los coeficientes que cumplan la restricción anterior, creamos las combinaciones del vector de entrada para construir la matriz X. El resto de coeficientes los igualo a cero. Esto lo conseguimos mediante la inclusión de condiciones if en la anidación de bucles for que se realiza para los distintos órdenes. 3) Para estimar, usamos la función pinv para obtener los parámetros del modelo, theta=pinv(X)*y. Para predecir, obtenemos la respuesta predicha de la forma: ypred=X*theta. Para reducir la complejidad a la hora de extraer el modelo en cuestión, podemos optar por elegir un valor diferente para l en los distintos órdenes de Volterra, por ejemplo, un valor l más pequeño para órdenes más altos. Cómo seleccionar l depende de las características prácticas de los amplificadores y de la exactitud requerida para el modelo, por lo que hemos implementado unas funciones que modifican el código de las anteriores en lo necesario para incluir la posibilidad de escoger el valor de l para cada orden. Estas funciones se llaman VREvariosl y VRPvariosl. 78