未定义的函数'减'用于'iddata'类型的输入参数

时间:2017-08-29 13:57:58

标签: matlab methods time-series signal-processing sampling

这是a previous issue I was having的后续内容。

我想给信号一个偏移,然后在其中添加一些延迟并为此计算RMSE但是当得到差异时我遇到以下问题:

enter image description here

我想问下列事项:

  1. 如何解决上述问题?
  2. 请问任何人请用简单的词语解释iddata做了什么 - 因为我研究了不同的门户网站,包括MATLAB,但仍然无法得到一个好的概念。
  3. 如何在代码的最后一部分中将iddata类型的数据存储在单元格中以进行减法?
  4. 代码有问题:

     drv(1)=load('123.mat');
    
     t = drv(1).x;
     ref = drv(1).y;
     angle = drv(1).z;
     Fs = 1000;              
     t1 =t';
     ref1= ref';
     d_data = iddata(ref1, t1, 1/Fs);
    
     %% Add offset:
     x = 1;
     afterOffset1= {};
     for i = 100:10:130 
     T = getTrend(d_data); 
     % <detrend data if needed>
     T.InputOffset = i;
     T.OutputOffset = i;
     afterOffset = retrend(d_data,T);
     afterOffset1{x,1}= afterOffset;
     x= x+1 ;
     end 
    
     %% Add delay:
     y=20;
     afterDelay1= {};
     for i = 1:1:4
     % delaySamples = i; % Must be a non-negative value
     % afterDelay = iddata([NaN(delaySamples,1); d_data.OutputData],...
     %                     [d_data.InputData; NaN(delaySamples,1)], 1/Fs);
     afterOffset1{i}.Tstart = y;
     afterDelay1{i,1}= afterOffset1{i};
     y= y+10;
     end 
     %% Plot:
     n = size(afterDelay1,1);
     figure();
     for i=1:1:n
     subplot(2,2,i);
    
     plot(d_data);
     hold all
     plot(afterDelay1{i});
     end
    
     sig_diff = angle(1)-afterDelay1;
     square_error(i,:) = (sig_diff(i)).^2;
     mse(i,:)=  mean(square_error(i));
     rmse(i,:) = sqrt(mse(i));
    
    
     sig_diff = d_data_1 - afterDelay; %        <<<<<<<<<<<<<<<<<<<<<< Problem is here
     %     square_error = (sig_diff).^2;
     %     mse=  mean(square_error);
     %     rmse = sqrt(mse);
     end
    

1 个答案:

答案 0 :(得分:1)

您很可能希望OutputData对象中的iddata属性是您问题的输出或y信号:

sig_diff = angle(1)-afterDelay1.OutputData;

另请注意,这会为您提供向量,但稍后您的代码会假定它是行向量。在继续执行上述计算之后,您可能希望转置此数据:

sig_diff = angle(1)-afterDelay1.OutputData;
sig_diff = sig_diff.';

通常,iddata是一个创建表示输入和输出时间或频域数据的对象的函数。请注意,当您创建iddata对象时,输入矩阵可能有多个来源,因此每个都会指定一个来源。对于每个指示输出的输出,也可以这样说。因此,在使用此函数之前转置数据以确保每个信号位于单独的列中,或仅使用单个列表示一个输入/输出非常重要。

对象内部具有各种属性,包括采样时间或采样频率,函数所采用的有效域和范围以及最终访问输入和输出数据。 OutputData是其中一个字段。我建议查看有关您可以使用iddata访问的所有属性的文档。这里明确定义OutputDatahttps://www.mathworks.com/help/ident/ref/iddata.html