GoToTheFuture D言語とかやってます

非線形自己干渉キャンセラの理論解析


このページでは,非線形自己干渉キャンセラの自己干渉除去性能を理論解析します. どのような実装になっているか知りたい場合は,ブラウザでこのページのソースを表示してscriptタグの中身を眺めるか,Excelによる簡易版もあります. 本ページの結果を論文等で利用される場合は,以下の論文[1][2]と,また本ページのURLと作者である小松和暉の名前を以下のような形で論文中に明記して宣伝していただけると助かります.

信号モデル

送信信号$x$を平均$0$,分散$1$の複素ガウス分布$\mathcal{CN}(0, 1)$に従う信号とします. この信号を,電力増幅器に入力して,以下の受信信号$y$を得るとします. ただし,$f(x)$はキャンセラで除去をする対象の非線形伝達関数(たとえば電力増幅器の伝達関数)です. $$ y = f(x) $$ この受信信号に対して,次の非線形自己干渉キャンセラを考えます. $$ c(x) = \sum_{p=1,3,\cdots}^{N_c} c_p x|x|^{p-1} $$ ここで,$c_p$は以下の残留自己干渉電力$I^\mathrm{R}$が最小になるように推定されるとします. $$ I^\mathrm{R} = \mathbb{E}\left[\left| f(x) - c(x) \right|^2\right] $$ このときの非線形自己干渉キャンセラの除去性能や帯域内全二重が達成するSIDNR(所望信号電力/(残留SI+所望信号のひずみ+雑音電力))などを計算できます. このページを読み込んだ際の初期値では,論文[1]のFig. 6の結果と等価なパラメータや評価指標で理論解析した結果(LNAの効果を省略しているなど,一部異なります)が表示されます.

使い方

下のフォームに増幅器の伝達関数$f(x)$をJavascriptの関数として記述してください. 引数のxmathjsの複素数オブジェクトであり,vは任意に設定できるパラメータです. 入力信号xは平均$0$,分散$1$の複素ガウス分布$\mathcal{CN}(0, 1)$に従う信号です. また,実数パラメータvと離散パラメータkを振ることができますので,例えばvはIBOやRappモデルのスムースネスファクタとして振ったり,kは整数にしてキャンセラの次数にするなどしてください. 注意として,構文エラーなどは画面上には出ませんので,必ず開発者モードでコンソールにエラーが出ていないか確認しながらコードを書いてください.
function f(x, v, k) { }
下のフォームにはSICRやSIDNR,もしくは達成可能レートなどの評価指標を計算するための関数を記述してください. 引数のvkは掃引するパラメータ(グラフの横軸の値と系列ラベル), fは上で記述した非線形伝達関数 Ptotは$f(x)$の出力電力の期待値, PNLlistは$f(x)$の出力に現れる非線形電力のリスト(0番目は線形成分,1番目は3次成分,..で最大次数は$P_\mathrm{max}$で指定)です.
function (v, k, f, Ptot, PNLlist) { }
本プログラムではDE公式という数値積分公式を用いています. デフォルトの値($t_a=-4$, $t_b=4$, 分割数101)では87次ひずみの計算がギリギリの精度です. これ以上の次数のひずみを計算したい用途はないと思いますが,もしより精度がほしい場合には$t_a$と$t_b$の範囲を広げたり,分割数を増やしてください.

以下の描画開始ボタンを押すと,下に評価結果が出力されます.

もし記述がわからなければ以下のプリセットリストから例を選択することも可能です.

コピペ用

参考:SIDNR最適化関数$f(x)$(論文[2]のFig. 6)※DE公式の分割数を1001くらいまで増やすこと
参考:SICR最適化関数$f(x)$(論文[2]のFig. 7)※DE公式の分割数を1001くらいまで増やすこと
Content