2016-08-01 24 views
1

これは、データ構造について非常に複雑な問題であり、私は試してみて、私は配列signalsで複数の信号を持っている非スカラー構造体配列

それをできるだけ簡単な説明します、これのすべての要素は、複数のセグメントを持つ構造であり、信号とその属性。

今私はこの信号をフィルタリングし、カットオフ周波数に応じた計算をします。

この関数が呼び出されるたびに、すべてfcをループし、すべての信号とすべてのセグメントを通じてループします。しかし、問題はfcが信号のみで計算されているので、私はこのようなものがあります:

classdef datHandle < handle 
    properties 
     error_norm = {}; 
     final_error = {}; 
     signals = {}; 
    end 
    methods 

     function this = addsignal(this, varargin) 
      %signal segmentation is done here 
     end 

     function this = addfilter(this, varargin) 
      for i = 1:length(this.signals)% for each signal 
       this.error_norm = {}; 
       fn = 1/((mean(diff(this.signals{i}(1).time)))*2); 
       fc = linspace(1,fn,(fn/0.5)); %calculate fc 
       this.tempaddfilt(fc,i) 
      end 
      this.final_error = [this.final_error;this.error_norm]; 
     end 

     function this = tempaddfilt(this,varargin) 
      s = []; 
      f = ltiFilter.PT1(); % initiate filter class 
      fc = varargin{1}; % take fc 
      i = varargin{2}; % the exact signal 
      for a = 1:length(fc) % fc 
       q = 0; 
       w = 0; 
       for k = 1:length(this.segments{i}) % segment of ith signal 
        f.fc = fc(a); 
        filt_sig = f.eval(this.segments{i}(k).signal,this.segments{i}(k).signal(1)); %signal and the initial value of the signal 
        filt_sig = filt_sig'; 
        s(1,i).main(k).seg_err(a) = std((filt_sig-this.segments{i}(k).ref)); % calculate the standard diviation of the signal 
        q = q+s(1,i).main(k).seg_err(a); 
        s(1,i).main(k).fc(a) = fc(a); 
       end 
       s(1,i).main(i).sig_err(a) = q; 
       w = w+s(1,i).main(i).sig_err(a); 
      end 
      s(1,1).main(1).filt_err(a) = w; 
      this.error_norm = [this.error_norm s]; 
     end 
    end 
end 

テストスクリプト:

clear all 
close all 
filname = load('file'); 
signal1 = filname.signal; % current value 
time1 = filname.time; 
signal2 = filname.signal2; % current value 
time2 = filname.time2; 

f = ltiFilter.datHandle(); 

f.addsignal(signal1,time1,93); 
f.addfilter() 

が、私はこのようなものであることを final_normを計画します final norm

しかし、2番目の信号を追加すると、私のアルゴリズムは機能しません。誰かがより良いアルゴリズムを持っているなら、どんな提案も歓迎です。

答えて

-1

私は完全に理解していませんが、あなたのデータ構造は何ですか?また、各信号がセグメントに分割される理由は何ですか?フレームベースの信号処理(チャンクでチャンク)をしているのですか、信号の分割アルゴリズムがありますか?

信号、フィルタ、セグメントに沿ってオブジェクトのベクトル化を行う複数のクラスを作成する必要があると思います。