This is essentially a system identification problem. You have non-parametric (tfestimate, spa, spafdr, etfe) techniques and parametric techniques (ssest, tfest). MODALFRF implements both approaches. When the 'Estimator' is H1 or H2, it is doing something similar to tfestimate and producing a non-parametric estimate of frequency response using correlation analysis (e.g., H = Syy/Sxy, where Syy is output spectrum = fft(Ryy), where Ryy is auto-correlation sequence, etc). When you use 'Estimator'/'subspace', it implements a parametric subspace identification (n4sid) algorithm to first estimate a state-space model and then compute its frequency response using FREQRESP.
If input signal is periodic, you will get much better speed by using a non-parametric technique. But the results are going to be sensitive to choice of technique (H1 or H2), frame-size, window shape and amount of overlapping. Parametric methods are much slower but less sensitive to tuning parameters (such as model order) and are more reliable IMO. You also get the additional insights into system dynamics in terms of poles/zeros, damping, I/O delays and feedthrough.
If you have system identification toolbox, I would recommend the following:
- If data is transient (that is, the input is a step or impulse, or a pulse) and is not very long:
data = iddata(outputsignal, inputsignal, sampletime);
model = tfest(data, np);
w = linspace(0,pi/sampletime,100);
G = freqresp(model,w);
- If data has periodic inputs:
data = iddata(outputsignal, inputsignal, sampletime)
data2 = fft(data)
model = tfest(data2, np);
w = linspace(0,pi/sampletime,100);
G = freqresp(model,w);
If you have MIMO data, you could replace TFEST with SSEST (state-space estimator) and follow the steps similar to the above.