Clear Filters
Clear Filters

Meine Variablengröße ist scheinbar nicht fest, obwohl sie dies sein sollte

2 views (last 30 days)
Ich habe einen fcn-Block in Simulink, der mir diesen Fehler ausgibt:
Error:'y' is inferred as a variable-size matrix, but its size is specified as inherited or fixed. Verify 'y' is defined in terms of non-tunable parameters, or select the 'Variable Size' check box and specify the upper bounds in the Size box.
Folgender Code ist im Block:
function y = fcn(u)
n=4.096; %Anzahl Perioden
f=1; %Signalfrequenz
radToGrad = 180/pi;
gradToRad = 1/radToGrad;
T=1/f; %Periodendauer
ts=0.001; %Abtastdauer aus solver
t=0:ts:(T*n - ts);
tCorr = [fliplr(-t(2:end)) t]; %Zeitvektor fuer Faltung
maxCorrAmp = max(abs(u)); %Absoluter Maximalwert der Kreuzkorrelation
j = find(abs(u) == maxCorrAmp); %Verschiebung suchen
y = tCorr(j+1); %Verschiebung berechnen
meinem Verständnis nach, ist y ein 1x1 double. Dies habe ich auch so bei den Eigenschaften angegeben, bekomme aber trotzdem die Fehlermeldung.
Ja, der Fehler geht weg, wenn ich die "variable size" checkbox aktiviere. Dann kann ich aber mit dem Wert in Simulink nicht weiterarbeiten.

Accepted Answer

Harald
Harald on 17 Jul 2023
Hallo Matthias,
generell bitte möglichst das Modell (gerne soweit wie möglich vereinfacht) anhängen, damit man Vorschläge direkt ausprobieren kann. Zwei Dinge, die ich versuchen würde:
  1. MATLAB klarmachen, dass ich Falle mehrerer Treffer (selbst wenn du weißt, dass er nicht eintreten kann) der erste genommen werden soll: j = find(abs(u) == maxCorrAmp, 1);
  2. Vorab y definieren, z.B. mit y = 0; Dann sollte MATLAB verstehen, dass y ein skalarer Double sein wird.
Viele Grüße,
Harald
  1 Comment
Matthias von der Heyde
Matthias von der Heyde on 18 Jul 2023
Hallo Harald,
habe das Modell jetzt angehängt.
Deine Vorschläge habe ich ausprobiert, sie haben einen anderen Fehler kreiert:
Dimension 2 is fixed on the left-hand side but varies on the right ([1 x 1] ~= [1 x :?]).
Da wurde dann aber der function report vorgeschlagen (kannte ich vorher nicht). Und mit dessen Hilfe bin auf diese Lösung gestossen, ich nehme einfach "nur" den ersten Wert des Vektors:
dummy = tCorr(j+1); %Verschiebung berechnen
y = dummy(:,1);
Vielen Dank,
viele Grüße,
Matthias

Sign in to comment.

More Answers (0)

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!