'iddata' 类型的输入参数的未定义函数 'minus'
Undefined function 'minus' for input argument of type 'iddata'
这是 的跟进。
我想给信号一个偏移量,然后在其中添加一些延迟并为此计算 RMSE,但是当取差时我遇到以下问题:
我想请教以下问题:
- 如何解决上述问题?
- 谁能用简单的语言解释一下
iddata
的作用 - 因为我研究了包括 MATLAB 在内的不同门户网站,但仍然无法获得一个好的概念。
- 如何在代码的最后部分将类型为
iddata
的数据存储在单元格中以进行减法?
有问题的代码:
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
您很可能需要 iddata
对象的 OutputData
属性,它是问题的输出或 y
信号:
sig_diff = angle(1)-afterDelay1.OutputData;
另请注意,这将为您提供一个 列 向量,但稍后您的代码假定它是一个行向量。在执行上述计算之后,您可能需要转置此数据,然后再继续:
sig_diff = angle(1)-afterDelay1.OutputData;
sig_diff = sig_diff.';
一般来说,iddata
是一个创建表示输入和输出时域或频域数据的对象的函数。请注意,当您创建一个 iddata
对象时,输入矩阵可能有多个源,因此每个 列 指示一个源。对于每个 列 指示输出的输出也是如此。因此,在使用此函数之前转置数据非常重要,以确保每个信号位于单独的列中,或者仅使用单个列来表示一个输入/输出。
对象内部有多种属性,包括采样时间或采样频率、函数所承担的有效域和范围以及最终访问输入和输出数据。 OutputData
是这些字段之一。我建议您查看讨论您可以使用 iddata
访问的所有属性的文档。 OutputData
在这里明确定义:https://www.mathworks.com/help/ident/ref/iddata.html
这是
我想给信号一个偏移量,然后在其中添加一些延迟并为此计算 RMSE,但是当取差时我遇到以下问题:
我想请教以下问题:
- 如何解决上述问题?
- 谁能用简单的语言解释一下
iddata
的作用 - 因为我研究了包括 MATLAB 在内的不同门户网站,但仍然无法获得一个好的概念。 - 如何在代码的最后部分将类型为
iddata
的数据存储在单元格中以进行减法?
有问题的代码:
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
您很可能需要 iddata
对象的 OutputData
属性,它是问题的输出或 y
信号:
sig_diff = angle(1)-afterDelay1.OutputData;
另请注意,这将为您提供一个 列 向量,但稍后您的代码假定它是一个行向量。在执行上述计算之后,您可能需要转置此数据,然后再继续:
sig_diff = angle(1)-afterDelay1.OutputData;
sig_diff = sig_diff.';
一般来说,iddata
是一个创建表示输入和输出时域或频域数据的对象的函数。请注意,当您创建一个 iddata
对象时,输入矩阵可能有多个源,因此每个 列 指示一个源。对于每个 列 指示输出的输出也是如此。因此,在使用此函数之前转置数据非常重要,以确保每个信号位于单独的列中,或者仅使用单个列来表示一个输入/输出。
对象内部有多种属性,包括采样时间或采样频率、函数所承担的有效域和范围以及最终访问输入和输出数据。 OutputData
是这些字段之一。我建议您查看讨论您可以使用 iddata
访问的所有属性的文档。 OutputData
在这里明确定义:https://www.mathworks.com/help/ident/ref/iddata.html