A discrete transfer function can be described like this:

$$ y[k] = \frac{B(q^{-1})}{F(q^{-1})}u[k]$$

Where can be a polynomal expression: $$B(q^{-1}) = b_0+ b_1q^{-1} + b_2q^{-2} + b_3q^{-3} + \dots + b_nq^{-n}$$ $$F(q^{-1}) = 1+ f_1q^{-1} + f_2q^{-2} + f_3q^{-3} + \dots + f_nq^{-n}$$

Also the shift operator $q^{-1}$ can be rewritten as: $$q^{-1}y(k) = y(k-1), q^{-2}y(k) = y(k-2), q^{-3}y(k) = y(k-3), \dots , q^{-n}y(k) = y(k-n)$$

I hope you understand this. So to do a curve fitting for this transfer function. We can rewrite this:

$$ y[k] = \frac{B(q^{-1})}{F(q^{-1})}u[k] = \frac{b_0+ b_1q^{-1} + b_2q^{-2} + b_3q^{-3} + \dots + b_nq^{-n}}{1+ f_1q^{-1} + f_2q^{-2} + f_3q^{-3} + \dots + f_nq^{-n}}u[k]$$

To this:

$$y[k] = [-yq^{-1} - yq^{-2} - yq^{-3} - \dots - yq^{-n} +u+ uq^{-1} + uq^{-2} + uq^{-3} + \dots + uq^{-n}]\begin{bmatrix} f_1\\ f_2\\ f_3\\ \vdots\\ f_n\\ b_0\\ b_1\\ b_2\\ b_3\\ \vdots\\ b_n \end{bmatrix}$$

And even more:

$$y[k] = [-y[k-1] - y[k-2] - y[k-3] - \dots - y[k-n] +u[k]+ u[k-1] + u[k-2] + u[k-3] + \dots + u[k-n]]\begin{bmatrix} f_1\\ f_2\\ f_3\\ \vdots\\ f_n\\ b_0\\ b_1\\ b_2\\ b_3\\ \vdots\\ b_n \end{bmatrix}$$

Now we can solve this by simple MATLAB/Octave command

>> x = A\b

Assumed that $b$ is the $y[k]$ vector and $A$ is the $[-y[k-1] - y[k-2] - y[k-3] - \dots + u[k-n]]$ matrix. Then $x$ will be $f_1, f_2 \dots b_n$.

This is how to estimate a transfer function from know input $u[k]$ and known output $y[k]$. All you need to do is to choose the amount of parameters in the numerator and denominator.

So. Now to my question:

What if I have a ARMAX model insted of a classical transfer function?

$$y[k] = \frac{B(q^{-1})}{A(q^{-1})}u[k] + \frac{C(q^{-1})}{A(q^{-1})}e[k]$$

Where the white noise is $e[k] \sim GWN(0, \sigma^2)$

Here I got to choose three different parameters for $B(q^{-1}), A(q^{-1}), C(q^{-1})$. When I mean parameter, I mean the amount of zeros and poles.

Now to my question:

How do I find $e[k]$? If I know the noise $e[k]$. I can do the same curve fitting again. Just a little bit larger matrix. But Octave handle it!


If you have an offline y(k) and u(k) sequence (say from test data), first find y'(k) = (B[z]/A[z])u(k) signal, then write A[z][y(k)-y'(k)] = C[z]e(k). This is an input-output transfer function. Then you can solve (LS or RLS) for e(k) = (A[z]/C[z])*[y(k)-y'(k)] to reconstruct the noise signal.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.