添加偏移和延迟

时间:2017-08-15 07:52:52

标签: matlab time-series signal-processing sampling

我有一个信号,我想引入几个偏移和延迟,其中偏移范围从0.55,延迟范围从17

我在这里提供一个示例信号来演示我遇到的问题,但我的实际数据大小是1x1666520。

如何将这些变化引入信号?

示例代码:

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 个答案:

答案 0 :(得分:1)

尝试运行示例代码时,我收到此错误:

  

类型为retrend的输入参数的未定义函数double

原因是retrend函数是System Identification Toolbox的一部分,需要data object (iddata)作为输入。

如果你有上述工具箱,你可以像example for retrend一样创建一个数据对象,然后添加一个趋势,类似于你已经尝试过的。

据我了解,添加延迟比较棘手,因为您需要保持相同的矢量长度。您可以使用一些虚拟值(例如NaN)以正确的方向填充向量。

适用于您的案例我们得到:

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);

产量:

After adding a trend + offset