Beschleunigen der Festkomma-Simulation
Dieses Beispiel demonstriert die Beschleunigung von Festkomma-Algorithmen mithilfe der fiaccel
-Funktion. Die Codebeschleunigung ermöglicht eine Optimierung zur Beschleunigung von Festkomma-Algorithmen über die MEX-Datei-Generierung. Der Fixed-Point Designer™ bietet eine praktische Funktion fiaccel
zur Konvertierung Ihres MATLAB®-Codes in eine MEX-Funktion, was die Ausführungsgeschwindigkeit Ihrer Festkomma-Algorithmen erheblich beschleunigen kann. In diesem Beispiel generieren Sie eine MEX-Funktion aus MATLAB Programmcode, führen die generierte MEX-Funktion aus und vergleichen die Ausführungsgeschwindigkeit mit der MATLAB Programmcode-Simulation.
Beschreibung des Beispiels
Dieses Beispiel verwendet eine Feedbackschleife erster Ordnung. Durch Typumwandlung ("type conversion" oder "casting") in den Ausgabesignaltyp wird unendliches Bitwachstum verhindert. Das Ausgabesignal wird um eine Abtastung verzögert und zurückgeführt, um das Eingangssignal zu dämpfen.
Untersuchen des MATLAB-Feedback-Funktionscodes
Die MATLAB-Funktion, die die Feedbackschleife ausführt, befindet sich in der Datei fiaccelFeedback.m
. Die indizierte Zuweisung zur Ausgabe y
wandelt in den Typ von y
um und verhindert ein unendliches Bitwachstum.
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 dieser Funktion werden die folgenden Variablen verwendet:
x
ist der Eingangssignal-Vektor.y
ist der Ausgangssignal-Vektor.a
ist die Feedback-Verstärkung.z
ist das einheitsverzögerte Ausgangssignal.
Erstellen des Eingangssignals und Initialisieren der Variablen
clearvars
Setzen Sie die Einstellungen des Zufallszahlengenerators auf den Standardwert.
rng('default');
Eingangssignal.
x = fi(2*rand(1000,1)-1,true,16,15);
Feedback-Verstärkung.
a = fi(0.9,true,16,15);
Initialisieren der Ausgabe. Die Fraktionslänge wird so gewählt, dass eine Überschreitung verhindert wird.
y = fi(zeros(size(x)),true,16,12);
Initalisieren der verzögerten Ausgabe.
z = cast(0,'like',y);
Ausführen von interpretiertem MATLAB und Zeitmessung
tic y1 = fiaccelFeedback(x,a,y,z); t1 = toc;
Erstellen der MEX-Version des Feedback-Codes
Legen Sie die Feedback-Verstärkungsparameter-Konstante a
für die Codegenerierung fest.
fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex
Ausführen von MEX-Version und Zeitmessung
Einmal ausführen, um die MEX-Datei in den Speicher zu laden.
fiaccelFeedback_mex(x,a,y1,z);
Zur Zeitmessung erneut ausführen.
tic y2 = fiaccelFeedback_mex(x,a,y,z); t2 = toc;
Beschleunigungsverhältnis
Vergleichen Sie die MEX-Ausführungsgeschwindigkeit mit der MATLAB Programmcode-Simulation.
ratio_of_speed_up = t1/t2
ratio_of_speed_up = 185.3829
Verifizieren, dass die interpretierte Festkomma-MATLAB-Ausgabe und MEX-Ausgabe identisch sind
isequal(y1,y2)
ans = logical 1
Unterdrücken Sie die Warnungen des Code Analyzers.
%#ok<*NOPTS>