我如何找到一个传递函数在输入和输出之间以不同速率采样



我知道通常我会在使用iddata()准备数据后使用ftest()。然而,为了iddata()正确工作,我需要以相同的速率对输入和输出数据进行采样。有没有一种速率无关的iddata()变体或者其他方法可以让我完成我需要完成的?

我正在研究同样的问题(https://dsp.stackexchange.com/questions/19458/how-to-compute-transfer-function-from-experimental-data),我不确定我找到了做这件事的方法,但我与你分享我的想法,所以我们可能会找到一个适合我们俩的解决方案(如果你已经找到了一种方法,请分享它)。

方法1

如果你的信号在时域,你可以同步它们,然后使用tfestimate函数。

% Define timeseries 
ts_output = timeseries(x,time1,'Name','output');
ts_input = timeseries(y,time2,'Name','input');
% Synchronization
[ts_output,ts_input] = synchronize(ts_output,ts_input,'uniform',...
'interval',delta_t);
% Compute transfer function
Fs = 1/delta_t;
[Txy,W] = tfestimate(ts_input.data,ts_output.data,[],[],[],Fs);

方法2

代替同步,你可以重新采样在较低频率采样的信号:假设Fs1 > Fs2

[P,Q] = rat(Fs1/Fs2);
y2 = resample(y2,P,Q);

最新更新