Как я могу найти передаточную функцию между входом и выходом, выбранными с разной скоростью?
Я понимаю, что обычно я бы использовал ftest()
после подготовки моих данных с iddata()
, Однако для iddata()
для правильной работы мне нужно, чтобы мои входные и выходные данные были дискретизированы с одинаковой частотой. Есть ли независимый от курса вариант iddata()
или любым другим способом, который позволит мне выполнить то, что мне нужно сделать?
1 ответ
Я работаю над той же проблемой ( 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);