uSimmicsを使ってFETの小信号等価回路パラメータを抽出する手順

## 概要
トランジスタのs2pファイルを表現する等価回路モデルのパラメータを抽出するときのOptimizationのコツを紹介します。

## 1. S-parameter測定データ(s2p)の取得
今回の例題として、有名なGaN HEMT，CGHV1J006D-GP4のS-parameter（以下、測定データと呼びます）をMACOM(※1)のwebsiteからダウンロードしました。
## 2. schematic（回路図）の設定
### Simulationの条件設定
（Components>simulations>SP(s-parameter simulation))
測定データに合わせてSweep typeはlinear, tart=0.5GHz, Stop=18GHz, Points＝71としました。
### 回路要素を配置する
信号源
（Components>sources>AC Power Source)
電圧駆動電流源
（Components>sources>Voltage Controlled current Source)
C,L,R
（Components>sources>lumped Components)
パラメータは変数とし、初期値をequationに列記します(Eqn1)。

![uSimmics_sch01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/d5340626-31d4-4a26-a9fd-d9037bb9987a.jpeg)

この状態で一度プロットするとこんな感じです。
反射特性はSmith-chart、透過特性はPolar-chartにプロットすると位相情報も表れるので、特性のフィッティング状態を確認することに適していると思います。

![result_init.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/2459c823-5fc8-4df7-98a4-8eafbf809bf3.jpeg)

## 3. Optimization
### Optimizationの設定
測定データと等価回路による計算値の差を如何に表現するかによって、抽出結果が変わってきます。測定周波数ごとに測定データと計算値のreal partとimagnary partについて差異の絶対値をとり、その全周波数の総和を計算します(Eqn3)。対数ではなく、真数のまま扱います。差異の状態を確認するために測定周波数ごとの差異を計算しておきます(Eqn2)。
![Eqn2_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/4a8b5084-3607-45ad-bd54-028e8c14998b.jpeg)


（Components>simulations>Opt(Optimization))
「Properties」のMethodはNelder-Mead（ネルダー・ミード法）を選択しています 。この方法は関数の勾配（微分値）を利用せず、「シンプルックス」という多面体を用いて最適解を探すので、動作が安定します。
「Variables」にて変数の最小値、初期値、最大値を設定します。初期値は収束性に大きく影響するのですが、初めてのデバイスの場合は手掛かりもないので範囲を調整しながらOptimizationを繰り返していくことになります。
「Goal」は測定データと計算値のreal partとimagnary partについて差異の絶対値の全周波数の総和が小さくなるようにOptimizationを設定します。Weightはすべて１にしておきます。S11、S22は最大値が１ですが、S21は20近い値をもつ一方、S12は0.02程度と小さいので、fittingがある程度の精度になってきたら、絶対値の違いを考慮して重みづけをしてもいいと思います（今回は重みづけなしです）。

![opt_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/b3cd1e3c-38db-4ecb-afdd-1b92beb82bf7.jpeg)

### Optimizationの実行
「Optimization」をactive、「Eqn1」をnon-activeにして、simulationを走らせます。

![uSimmics_sch02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/59b66491-5049-4867-972b-34bee3b2db41.jpeg)

結果を確認するとまだまだ差異が大きいです。
![result_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/b4ecc44d-c9fb-418e-a691-12f22b8766a4.jpeg)

2度目のOptimizationに入る前に、ここで変数の状態を確認します。
「Optimization」を右クリックし、「Work on variables」＞「adopt optimized variables from dataset」だけを選びます。これをしないとOptimizationの結果が反映されません（値の確認をしてから反映させたいのですが、確認もできないので仕方がないです）。

![opt_setting01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/fa0be1ca-aa7e-4dd7-aa34-5ec7bc08a659.jpeg)

1度目のOptimizationの結果、gm、Cgs、Cds、Rds、Loutは最大値に達してしまっているので、最大値を2倍程度に広げます。Rs、Ls、Rin、Routは最大値からかけ離れているので、最大値を縮めます。


![result_param01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/c010b250-5aef-4972-b989-0d97d6403e5b.jpeg)

変数の可変範囲を調整しながら何度かOptimizationをした結果、S12以外はfittingできました。S12は値がちいさいことや、今回の等価回路では想定していないものの影響を受けている可能性もあるので、これ以上合わせ込むことは諦めました。
![result_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/76b8fd36-4c12-4719-a3f4-11c13566d794.jpeg)

最終的な変数の値と可変範囲です。未知の変数のため初期値がかけ離れていても、それらしい値にたどり着けました。
![opt_setting02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/e65e2a2b-2bc8-474a-bd96-6f949c3205c0.jpeg)

### Optimizationの結果の適用
Optimizationにより得た値をequationの変数の値として確定するために
「Optimization」、「Eqn1」ともactiveにして
「equation(eqn1)」を右クリックし、「Work on variables」＞「adopt optimizer variables」だけを選びます。

![opt_setting03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4053385/f71653d0-116e-414c-a1c5-3a09695f3141.jpeg)

最後に「Optimization」をnon-active、「Eqn1」をactiveにして、ファイル保存して終了です

## 4. 未解決なこと
Optimizationにより得た値をequationの変数の値に反映させることはできるのですが、その逆にequationの変数の値をOptimizationの初期値に反映させたいこともあるのですが、まだ方法が見つかっていません。

## 注記
※1 Cree、WolfSpeedと社名を変え最終的にはRF部門だけMACOMに売却されました。