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