Simulazione dell’accelerazione in virgola fissa
Questo esempio illustra come accelerare gli algoritmi in virgola fissa utilizzando la funzione fiaccel
. L’accelerazione del codice fornisce delle ottimizzazioni per accelerare gli algoritmi in virgola fissa, tramite la generazione di file MEX. Fixed-Point Designer™ fornisce un'appropriata funzione fiaccel
per convertire il codice MATLAB® in una funzione MEX, che può accelerare notevolmente la velocità di esecuzione degli algoritmi in virgola fissa. In questo esempio, si genera una funzione MEX dal codice MATLAB, si esegue la funzione MEX generata e si confronta la velocità di esecuzione con la simulazione del codice MATLAB.
Descrizione dell’esempio
Questo esempio utilizza un loop di feedback del primo ordine. La conversione nel tipo di segnale di output impedisce la crescita infinita dei bit. Il segnale di output è ritardato di un campione e restituito per smorzare il segnale di input.
Controllo del codice della funzione di feedback di MATLAB
La funzione MATLAB che esegue il loop di feedback si trova nel file fiaccelFeedback.m
. L'assegnazione con pedice nell'output y
esegue la conversione nel tipo y
e impedisce la crescita infinita dei bit.
function [y,z] = fiaccelFeedback(x,a,y,z) for n = 1:length(x) y(n) = x(n) - a*z; z(:) = y(n); end end
In questa funzione sono utilizzate le seguenti variabili:
x
è il vettore del segnale di input.y
è il vettore del segnale di output.a
è il guadagno di feedback.z
è il segnale di output dell’unità di ritardo.
Creazione del segnale di input e inizializzazione delle variabili
clearvars
Riportare le impostazioni del generatore di numeri al valore predefinito.
rng('default');
Segnale di input.
x = fi(2*rand(1000,1)-1,true,16,15);
Gain di feedback.
a = fi(0.9,true,16,15);
Inizializzare l'output. La lunghezza della frazione viene scelta per evitare l'overflow.
y = fi(zeros(size(x)),true,16,12);
Inizializzare l'output ritardato.
z = cast(0,'like',y);
Esecuzione di MATLAB interpretato e temporizzazione
tic y1 = fiaccelFeedback(x,a,y,z); t1 = toc;
Costruzione della versione MEX del codice di feedback
Dichiarare il parametro del gain di feedback a
costante per la generazione di codice.
fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex
Esecuzione della versione MEX e temporizzazione
Eseguire una volta per caricare il file MEX in memoria.
fiaccelFeedback_mex(x,a,y1,z);
Eseguire nuovamente per temporizzare.
tic y2 = fiaccelFeedback_mex(x,a,y,z); t2 = toc;
Rapporto di accelerazione
Confrontare la velocità di esecuzione di MEX con la simulazione del codice MATLAB.
ratio_of_speed_up = t1/t2
ratio_of_speed_up = 208.5636
Verifica dell'uguaglianza tra gli output di MATLAB interpretato in virgola fissa e gli output di MEX
isequal(y1,y2)
ans = logical 1
Sopprimere gli avvisi dell'analizzatore di codice.
%#ok<*NOPTS>