Adam Cooman

Previous

Testing the Large-Signal Small-Signal
simulator in ADS

Next

3. Calculating the HTFs in Matlab

For this simple differential equation, the HTFs can also be computed in Matlab using the methods described in [1]. To do so, first, we describe the time-variation of the a(t)a(t)-coefficient as a Fourier series:

a(t)=k=kmaxkmaxAkejkωexta\left(t\right)=\sum_{k=-k_\mathrm{max}}^{k_\mathrm{max}}A_{k}e^{jk\omega_{\mathrm{ex}} t}

To obtain the HTFs at a frequency ff, we construct the following large matrix

A(s)=A+sΩ\boldsymbol{\mathcal{A}} \left(s\right) = \mathbf{A} + s \mathbf{\Omega}

with

A=[A0A1A2A1A0A1A2A2A1A0A1A2A2A1A0A1A2A1A0]\mathbf{A} = \left[\begin{array}{ccccccc} \ddots & \ddots & \ddots & \ddots & \ddots & \ddots & \ddots\\ \ddots & A_{ 0} & A_{1} & A_{2} & \ddots & \ddots & \ddots\\ \ddots & A_{-1} & A_{0} & A_{1} & A_{2} & \ddots & \ddots\\ \ddots & A_{-2} & A_{-1} & A_{0} & A_{1} & A_{2} & \ddots\\ \ddots & \ddots & A_{-2} & A_{-1} & A_{0} & A_{1} & \ddots\\ \ddots & \ddots & \ddots & A_{-2} & A_{-1} & A_{0} & \ddots\\ \ddots & \ddots & \ddots & \ddots & \ddots & \ddots & \ddots \end{array}\right]

and

Ω=[2jωex000jωex000000000+jωex000+2jωex]\mathbf{\Omega} = \left[\begin{array}{ccccccc} \ddots & \ddots & \ddots & \ddots & \ddots & \ddots & \ddots\\ \ddots & -2j\omega_{\mathrm{ex}} & 0 & 0 & \ddots & \ddots & \ddots\\ \ddots & 0 & - j\omega_{\mathrm{ex}} & 0 & 0 & \ddots & \ddots\\ \ddots & 0 & 0 & 0 &0 & 0 & \ddots\\ \ddots & \ddots & 0 & 0 & + j\omega_{\mathrm{ex}} & 0 & \ddots\\ \ddots & \ddots & \ddots & 0 & 0 & +2j\omega_{\mathrm{ex}} & \ddots\\ \ddots & \ddots & \ddots & \ddots & \ddots & \ddots & \ddots \end{array}\right]

where s=j2πfs=j2\pi f. This A\boldsymbol{\mathcal{A}}-matrix is a band matrix. In our case, the multisine has 1010 excited frequency lines, so the A\boldsymbol{\mathcal{A}}-matrix has 1010 non-zero numbers above and below its diagonal. Every other number in the matrix is zero. Theoretically, the A\boldsymbol{\mathcal{A}}-matrix should be infinitely large, in practice, we will use a large square matrix of size N×NN\times N. When NN is significantly larger than the amount of HTFs that needs to be calculated, the error made by truncating A\boldsymbol{\mathcal{A}} is limited [1]. We need to calculate 201201 HTFs, so NN was set to 401401 to minimise errors.

The inverse of the A\boldsymbol{\mathcal{A}}-matrix is the Wereley matrix for this system [1] [2], which will be denoted as G(s)\boldsymbol{\mathcal{G}}\left(s\right)

G(s)=(A(s))1\boldsymbol{\mathcal{G}}\left(s\right)=\left(\boldsymbol{\mathcal{A}}\left(s\right)\right)^{-1}

The Wereley matrix contains the HTFs of the circuit in the following arrangement:

G(s)=[G[1](sjωex)G[0](sjωex)G[1](s)G[+1](sjωex)G[0](s)G[1](s+jωex)G[+1](s)G[0](s+jωex)G[+1](s+jωex)]\boldsymbol{\mathcal{G}}\left(s\right)= \left[\begin{array}{ccccc} \ddots & \ddots & \ddots & \ddots & \ddots\\ \ddots & G^{\left[ -1 \right]}\left(s-j\omega_{\mathrm{ex}}\right) & \ddots & \ddots & \ddots\\ \ddots & G^{\left[0\right]}\left(s-j\omega_{\mathrm{ex}}\right) & G^{\left[ -1 \right]}\left(s\right) & \ddots & \ddots\\ \ddots & G^{\left[ +1 \right]}\left(s-j\omega_{\mathrm{ex}}\right) & G^{\left[0\right]}\left(s\right) & G^{\left[ -1 \right]}\left(s+j\omega_{\mathrm{ex}}\right) & \ddots\\ \ddots & \ddots & G^{\left[ +1 \right]}\left(s\right) & G^{\left[0\right]}\left(s+j\omega_{\mathrm{ex}}\right) & \ddots\\ \ddots & \ddots & \ddots & G^{\left[ +1 \right]}\left(s+j\omega_{\mathrm{ex}}\right) & \ddots\\ \ddots & \ddots & \ddots & \ddots & \ddots \end{array}\right]

so by selecting the right column out of G(s)\boldsymbol{\mathcal{G}}\left(s\right), the HTFs of the system are obtained.

Previous
1 2 3 5 6 
Next