2016-07-27 17 views
0

Ich bekomme den oben genannten Fehler beim Durchlaufen mehrerer Schleifen. Ich weiß wirklich nicht, wie das Problem zu erklären, aber ich werde versuchen, mein BestesMatlab: Zellinhaltszuweisung zu einem Nicht-Zellen-Array-Objekt

Code:

function this = tempaddfilt(this,varargin) 
 
      fc = linspace(1,200,(200/0.5)); 
 
      main = struct('seg_err',{},'sig_err',{},'filt_err',{},'fc',{}); 
 
      for a = 1:length(fc) % fc 
 
       q = 0; 
 
       w = 0 
 
       for i = 1:length(this.segments) % total number signal 
 
        for k = 1:length(this.segments{i}) % total number of segments 
 
         filt_sig = eval(this.segments{i}(k).signal,this.segments{i}(k).signal(1)); % apply filter to the ith singal and kth segemnt 
 
         filt_sig = filt_sig'; 
 
         main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref); % calculate the standard divitation of the filtered signal and previously calculated signal. 
 
         q = q+main{i}(k).seg_err(a); add all the error of the segments for the same FC 
 
         
 
        end 
 
        
 
        main{i}(1).sig_err(a) = q; % assign the sum of all error of the all segemnts of the same signal 
 
        w = w+main{i}(1).sig_err(a); % add all the error of the signals 
 
       end 
 
       main.filt_err = w; % assign the sum of all error of the all signals 
 
      end 
 
      this.error_norm = [this.error_norm ;main]; 
 
     end 
 
     
 
    end

Grundsätzlich Ich habe 3 Schleifen, 1. Schleife ist für fc, 2. Schleife ist für Signal und 3. Schleife ist für Segmente des Singals. Programm funktioniert gut, wenn fc = 1.

Aber wenn fc 2 ist, erhalte ich folgende Fehlermeldung:

Cell contents assignment to a non-cell array object. 

in der Zeile:

main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref); 

, das ist, wenn i =1, k=1, a = 2

+0

der Fehler Referenz sagt Sie sind Versuchen, den Inhalt von Zellen einem Array zuzuordnen, wie A = Cell (1, :); Sie können versuchen, 'std (cell2double (filt_sig-this.segments {i} (k) .ref))' und sehen, was passiert. – GameOfThrows

+0

@GameOfThrows, ich habe nichts namens cell2double gefunden. – user5603723

+0

@CaptainFuture, ich debuggte, ich stoppte das Programm in dieser Zeile und berechnete den Wert im Befehlsfenster. In beiden Fällen gibt es einen Wert zurück. – user5603723

Antwort

1

Das Problem scheint mit der Art und Weise zu sein, wie Sie dynamisch auf die Mitglieder der Hauptstruktur zugreifen möchten. Sie haben main als Struktur deklariert, mit

ABER Strukturelemente können nicht mithilfe geschweifter Klammern {} zugegriffen werden. Hier ist eine reference zu einer vorherigen Diskussion im Zusammenhang mit der dynamischen Indexierung von Struct-Arrays. Im Grunde ist das Problem mit "main {i}", was keine gültige Möglichkeit ist, Mitglieder einer Struktur dynamisch zu indizieren.

Versuchen Sie Folgendes. die Deklaration struct ändern zu explanation

main = struct('seg_err',[],'sig_err',[],'filt_err',[],'fc',[]); 

die Feldnamen Dann extrahieren, indem

FieldNames = fieldnames(main); 

Dann können Sie die Strukturkomponenten wie in

for 
loopIndex = 1:numel(FieldNames) 
main.(FieldNames{loopIndex})(1).seg_err(1) = 1; 
end