Ich versuche gerade, einen sehr groben, aber funktionierenden Ringspeicher für die Echtzeit-Signalverarbeitung zu entwerfen. Aus Gründen der Übersichtlichkeit habe ich keine DSP Toolbox-Lizenz.Ringpuffer in Simulink implementiert als MATLAB-Funktion
Jetzt ist die Idee, einen Teil des Signals innerhalb eines 1xN Fensters zu puffern und dann weiter zu verarbeiten. Um dies zu erreichen, habe ich mir einen Simulink-Block wie in der folgenden Abbildung ausgedacht.
Das Problem ist folgendes: wenn die MATLAB-Funktion
istfunction y = fcn(Signal,DelayedBuffer,BufferSize)
%#codegen
% y = zeros(1,BufferSize);
persistent Buffer;
Buffer = [Signal DelayedBuffer(1:59-1)];
y = Buffer;
end
alles gut funktioniert. jedoch beim Schreiben der Funktion als
function y = fcn(Signal,DelayedBuffer,BufferSize)
%#codegen
% y = zeros(1,BufferSize);
persistent Buffer;
Buffer = [Signal DelayedBuffer(1:BufferSize-1)];
y = Buffer;
end
Ich erhalte die folgenden Fehler:
Data 'y' (#32) is inferred as a variable size matrix, while its specified type is something else.
Haben Sie einen wertvollen Tipp, wie man diese Fehler zu unterdrücken?
Nun, die Größe des Puffers bleibt über die Simulationslänge konstant, aber ich möchte dem Benutzer erlauben, die Größe des Puffers einzustellen, um herauszufinden, welche Größen die besten Ergebnisse erzielen. Ich habe versucht, die 'BufferSize' als Parameter zuzuweisen, aber ich verstehe nicht klar, wie man es an die Funktion weitergibt, da der Port nicht mehr mit der Funktion verbunden ist. – fpe
Sobald Sie einige Eingaben als Parameter eingegeben haben, können Sie sie unter demselben Namen in einem Modellarbeitsbereich oder MATLAB-Basisarbeitsbereich definieren. Sie können einfach BufferSize = 59; in der Befehlszeile. Sie sollten dies nicht tunbar machen, da Sie es nicht innerhalb einer Simulation ändern müssen. Sie können es zwischen Simulationen ändern. – Navan