When trying to run your example code, I'm getting this error:
Undefined function retrend
for input arguments of type double
.
The cause of this is that the retrend
function, which is part of the System Identification Toolbox, requires a data object (iddata
) as an input.
If you have the aforementioned toolbox, you can create a data object as in the example for retrend
, then add a trend similarly to what you already tried.
To my understanding, adding a delay is trickier, because you need to maintain the same vector length. You can pad your vectors with some dummy values (such as NaN
) in the correct direction.
Applied to your case we get:
function q45688607
%% Generate data:
t = (0 : 1 : 50).'; % Time Samples
f = 45; % Input Signal Frequency
Fs = 440; % Sampling Frequency
y = sin(2*pi*f/Fs*t);
d_data = iddata(y, t, 1/Fs);
%% Add offset:
T = getTrend(d_data);
% <detrend data if needed>
T.InputOffset = 5;
T.OutputOffset = 5;
afterOffset = retrend(d_data,T);
%% Add delay:
delaySamples = 8; % Must be a non-negative value
afterDelay = iddata([NaN(delaySamples,1); d_data.OutputData],...
[d_data.InputData; NaN(delaySamples,1)], 1/Fs);
%% Plot:
figure(); plot(d_data,afterOffset, afterDelay);
Yielding:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…