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

2 次查看(过去 30 天)
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.

采纳的回答

Harald
Harald 2023-7-17
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 个评论
Matthias von der Heyde
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

请先登录,再进行评论。

更多回答(0 个)

标签

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!