Acelerar la simulación de punto fijo
Este ejemplo muestra cómo acelerar algoritmos de punto fijo utilizando la función fiaccel
. La aceleración de código ofrece optimizaciones para acelerar algoritmos de punto fijo mediante la generación de archivos MEX. Fixed-Point Designer™ ofrece una práctica función fiaccel
para convertir código de MATLAB en una función MEX, que puede acelerar enormemente la velocidad de ejecución de los algoritmos de punto fijo. En este ejemplo, se genera una función MEX a partir de código de MATLAB®, se ejecuta la función MEX generada y se compara la velocidad de ejecución con la simulación de código de MATLAB.
Descripción del ejemplo
Este ejemplo utiliza un bucle de retroalimentación de primer orden. La conversión al tipo de señal de salida evita el crecimiento infinito de bits. La señal de salida se retrasa una muestra y se retroalimenta para amortiguar la señal de entrada.
Inspeccionar el código de la función de retroalimentación de MATLAB®
La función de MATLAB que realiza el bucle de retroalimentación se encuentra en el archivo fiaccelFeedback.m
. La asignación con subíndice en la salida y
se convierte al tipo y
y evita el crecimiento infinito de bits.
function [y,z] = fiaccelFeedback(x,a,y,z) for n = 1:length(x) y(n) = x(n) - a*z; z(:) = y(n); end end
En esta función se utilizan las siguientes variables:
x
es el vector de la señal de entrada.y
es el vector de la señal de salida.a
es la ganancia de retroalimentación.z
es la señal de salida con retraso unitario.
Crear la señal de entrada e inicializar las variables
clearvars
Restablezca el generador de números aleatorios a su valor predeterminado.
rng('default');
Señal de entrada.
x = fi(2*rand(1000,1)-1,true,16,15);
Ganancia de retroalimentación.
a = fi(0.9,true,16,15);
Inicialice la salida. La longitud de fracción se elige para evitar el desbordamiento.
y = fi(zeros(size(x)),true,16,12);
Inicialice la salida retrasada.
z = cast(0,'like',y);
Ejecutar Interpreted MATLAB y el tiempo
tic y1 = fiaccelFeedback(x,a,y,z); t1 = toc;
Crear la versión MEX del código de retroalimentación
Declare el parámetro de ganancia de retroalimentación a
constante para la generación de código.
fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex
Ejecutar el tiempo y la versión de MEX
Realice la ejecución una vez para cargar el archivo MEX en la memoria.
fiaccelFeedback_mex(x,a,y1,z);
Realice la ejecución de nuevo para el tiempo.
tic y2 = fiaccelFeedback_mex(x,a,y,z); t2 = toc;
Índice de aceleración
Compare la velocidad de ejecución de MEX con la simulación de código de MATLAB.
ratio_of_speed_up = t1/t2
ratio_of_speed_up = 235.2984
Verificar que las salidas de MEX e Interpreted MATLAB en punto fijo son idénticas
isequal(y1,y2)
ans = logical 1
Suprima las advertencias del analizador de código.
%#ok<*NOPTS>