Adding offset and delay

2019-09-19 11:10发布

问题:

I have a signal into which I want to introduce several offsets and delays, where offsets range from 0.5 to 5 and delays range from 1 to 7.

I'm providing an example signal here to demonstrate the problem I'm having, but the size of my real data is 1x1666520.

How do I introduce these changes to the signal?

Example code:

t  = [ 0 : 1 : 50];           % Time Samples
f  = 45;                      % Input Signal Frequency
Fs = 440;                     % Sampling Frequency
data = sin(2*pi*f/Fs*t)'; 

T.InputOffset = 5;
T.OutputOffset = 5;

addoffset = retrend(data);
Y = step(delay,data);

figure(); plot(t,addoffset,t,Y);

回答1:

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: