Use un microcontrolador (si se siente cómodo con el software de escritura) o un FPGA (si se siente cómodo con el diseño de hardware VHDL / Verilog). La misma idea básica en ambos sentidos:
Organice la memoria utilizando la fase de 0 a 360 grados como la dirección de la memoria y almacene una o más formas de onda completas en ese espacio. Los datos se deben escalar para llenar el rango dinámico disponible.
Designe un contador (lo suficientemente ancho para dirigirse a la memoria) como el "acumulador de fase". Este contador se ejecutará de 0 a 360 grados. Utilice la aritmética de módulo para manejar el desbordamiento, por ej. 355 grados más 10 grados = 5 grados.
Use una base de tiempo (como un oscilador de reloj o una interrupción de tic del temporizador) para leer periódicamente la memoria, en la ubicación indicada por el acumulador de fase. Escale los datos antes de enviarlos al DAC: aquí es donde puede agregar una compensación o ajustar la ganancia. Asegúrese de manejar la saturación de rango superior / inferior de los códigos DAC.
Después de escribir el DAC, incremente el acumulador de fase para apuntar a la siguiente muestra. La frecuencia de salida depende del incremento de fase y la frecuencia de la base de tiempo.
Para obtener mejores resultados, asegúrese de que cada ciclo de salida obtenga al menos 10 puntos por ciclo. Aunque 2 puntos por ciclo es apenas suficiente para evitar el alias de frecuencia (límite de Nyquist), esta condición también tiene un error del 100% en amplitud y fase, por lo que no es realmente suficiente para la reconstrucción de la señal. Alrededor de 10 puntos, una onda sinusoidal reconstruida comienza a parecerse a una onda sinusoidal real.
Nunca he visto una única solución de IC para la generación de funciones arbitrarias. El DAC generalmente es solo un DAC sin ningún backend de procesamiento de señal. Participé en el diseño del kit de evaluación Maxim Integrated MAX5318, que utiliza un Xilinx Spartan 3 FPGA para implementar la generación de funciones arbitrarias.
Creo que la razón por la que no encontrará un generador de funciones arbitrarias DAC más integrado en un solo paquete IC, es porque el DAC de precisión es bastante caro de diseñar y probar, mientras que la RAM es un producto básico. Cada año, los diseños de RAM se comprimen y se vuelven más baratos, mientras que las soluciones de precisión DAC se diseñan para aplicaciones industriales y ATE a largo plazo. En otras palabras, la base de clientes de DAC y la base de clientes de RAM tiran en direcciones opuestas. No hay una forma económica de integrar las dos funciones en un solo IC. Si desea financiar un proyecto de IC personalizado, estoy seguro de que podría ser técnicamente viable por un precio. Pero te garantizo que no te va a gustar el precio, especialmente a un volumen bajo.