Hauptinhalt

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>

Siehe auch