TNJ-004:抵抗のサーマル(熱)ノイズをSPICEでシミュレーションしてみる
2013年9月10日 公開
はじめに
ここでは、なかなか理解が難しい「ノイズ」(ホワイト・ノイズ)の振る舞いについて、その基礎的なことと、NI Multisimでシミュレーションしたようすについて、それぞれの関係を考えてみます。
抵抗からサーマル・ノイズが発生する
抵抗からノイズが発生します。電源を接続していなくてもです。これをサーマル(熱)ノイズとかJohnsonノイズとか言います。これ以外にも、PN接合をキャリアが通過するときにショット・ノイズという電流性ノイズが発生します。また1/fノイズというものもあります。これらについては、ここでは深く取り扱わないことにします。
さてここでは、抵抗から発生するノイズをどう考えるかを、まず示します。そしてそれがOPアンプと、電子回路として組み合わされることで、OPアンプの内部ノイズと合成されたものとして、どのようにノイズがOPアンプ出力に現れるかを考えてみたいと思います。

OPアンプ内部ノイズも外部ノイズ源で表せる
OPアンプ内部にも電圧性/電流性ノイズがあります。電流性ショット・ノイズもその一部に変換されます。そしてそれらは、外部接続されたノイズ源として、等価的に表すことができます。結果的にそれらはすべて、この技術ノートで説明することと結びつけることができます。
参考になるApplication Notes
この技術ノートに関連したものとしては、以下のApplication Notesが参考になると思います。
- AN-358 ノイズとOPアンプ回路
- AN-940 最適ノイズ性能を得るための低ノイズ・アンプ選択の手引き
ここでの「ノイズ」とは「ホワイト・ノイズ」
ノイズはいろんなノイズがあります。デジタル回路からの混入ノイズ、スイッチによるノイズなどもあります。
ここでは、周波数に依存しない「ホワイト・ノイズ」というものを考えます。これはローノイズ・システムでは重要な概念です。
白色光はプリズムで見てみると、広い帯域のスペクトルを均一に持っています。これから説明するノイズが「ホワイト・ノイズ」と言われるゆえんは、「周波数に依存せず同じレベル」であるものなので、白色光(ホワイト)に合わせてそのように呼ばれます。
いろいろな呼ばれ方があるが同じもの
ノイズで主に使われる用語(種類)には、サーマル(熱)ノイズとか、ジョンソン・ノイズとか、ナイキスト・ノイズと呼ばれるものがあります。しかし実際はすべてホワイト・ノイズで、同じものです。「なんでJohnson, Nyquistのふたりの別名なのか?」と改めてWikipediaで見てみると、Bell研でJohnsonが見つけて、それを情報通信の父のNyquistが理論だてたということのようです。
ホワイト・ノイズの電力
このノイズの電力は
P = k T B [W]
で示されます。面白いもので、抵抗の大きさRによらず、ボルツマン定数kと絶対温度Tと、取り扱う帯域幅Bの積になっています。以降ではB = 1Hzとして単位帯域で考えていきます。全体のノイズ量は(電力で計算すると)B [Hz]倍すればいいだけです(電圧なら√B倍)。
上記の式が実際は何者かというと、図2のようにRsourceという抵抗(純粋な抵抗成分)があり、これがサーマル・ノイズという電圧信号源を(図中のように)持っており、その電圧源がRloadという(Rsource = Rload = Rとマッチングした)、ノイズレスの負荷R [Ω]に発生する電力として規定されているものです。
なんでこんな風に定義するのか、そしてこのような簡単な関係で表されるかは、それこそJohonsonやNyquistの研究成果である、物理的振る舞いに基づいていますが、あいにくご紹介できるレベルに至っておりません…。

図2. 抵抗のサーマル・ノイズ・モデル
「ノイズ源」と言っても「電圧源」
さて、ノイズ源と言っても電圧源ですから、電力はP = V2/Rで計算できます。Rsource = Rload = Rで、図2の電圧源Vから見ると、Rload側でP = k T B [W]が生じているわけですから、単純な直流回路計算で、電圧源の大きさV [V]は
V = SQRT(4 k T B R) [V]
と計算できます(√=SQRT()です)。これが抵抗Rから生じる電圧ノイズです(抵抗Rsourceの両端を解放した電圧と同じ)。
B = 1Hzとして正規化してみますと、
V = SQRT(4 k T R) [V/√Hz]
になります。√Hzでルートがついているのは、あとで説明しますが、今のところ無視していただいて「1Hzで正規化しているのだ」と思ってください。
並列抵抗のノイズはどうなる?
先の例ではRloadはノイズ・フリーの理想抵抗としましたが、図3のように、本来の抵抗素子が二つ並列に接続された場合はどうなるでしょうか。
V1 + V2
でしょうか…。ところがこれがそうはならないのです。これも単純な抵抗網の計算となるのですが…。
① V1により、R1とR2の接続点Vcに生じる電圧Vc1は、
Vc1 = V1・R2 /(R1 + R2)
② V2により、R1とR2の接続点Vcに生じる電圧Vc2は、
Vc2 = V2 ・R1 /(R1 + R2)
というように、それぞれの抵抗分圧になります。このように各電圧は抵抗分圧で「まずは」求められます。これは単純 な話です。

図3. 抵抗の並列接続ノイズ・モデル
ところが、合成の電圧は、単純に(重ね合わせの定理での)Vc = Vc1 + Vc2にはなりません。ノイズの合成の場合は、電力による足し算…「電力による重ね合わせの定理」になり、Root Sum Square, RSSとして計算されます。つまり
Vc = SQRT(Vc12 + Vc22)
となります。電力はP = V2/Rですから、これと似ているわけです(似ているというより、ノイズ同士は無相関信号なので、電力の和になる)。
1kΩの抵抗の並列接続で考えてみる
たとえば一本の抵抗R1 = 1kΩがあった場合、B = 1Hzとして正規化したとき、このノイズ電圧は
V = SQRT(4 k T R1) [V/√Hz]
ここで
k = 1.38E-23 J/K
T = 273K + 27°= 300K(周囲温度27°として考えます)
R1 = 1 kΩ
で、4.07nV/√Hzになります。
「これが並列に接続されたら?」というのが先の話なわけで、8nVにはならず(R1 = R2 = Rとすれば)、
Vc1 = 4.07/2 = 2.03nV/√Hz
Vc2 = 2.03nV/√Hz
Vall = SQRT[(2.03)2 + (2.03)2] = 2.87nV/√Hz
と計算できます。
結局は500Ωの抵抗と同じノイズ電圧になる
1kΩを2個の並列接続抵抗値は、当然500Ωですが、500Ωのノイズ電圧をSQRT(4 k T R)で計算すると、2.88nV/√Hzになります。
結果的に1kΩを2個の並列接続でも、500Ω1個でも(有効数字の問題で、ここでの説明上では誤差が出ていますが)同じノイズ電圧になります。
おもしろいものですね。
NI Multisimでシミュレーション
ここまでの説明をもとに、NI Multisim Analog Devices Editionを用いて簡単なシステムを構成し、これをシミュレーションで計算させてみます。
シミュレーション回路図
図4はシミュレーション用の回路図です。信号源V1はノイズ解析には「動作」としては関係ないものです。シミュレータはシミュレーション結果として、「出力端のノイズ」を入力信号源部分に相当するレベル(入力換算量)に変換して表示してくれます。この信号源V1は、その入力信号源(入力換算量)に相当する部分を明示的に示すものです。「明示的に示す」だけですから、電圧レベルはいくらでも良く、ここではゼロにしています。
図4. ノイズ・シミュレーション用回路図
入力換算ノイズの考え方
繰り返しますが、シミュレーションは基本的に「出力端」のノイズ・レベルを表示します。回路全体を増幅器として考えれば、(仮に存在すると仮定する)仮想ノイズ信号源から、その回路の増幅度で、その信号源からのノイズ信号が出力に現れると考えることもできます。
そこで、実際に出力に現れているノイズすべてが(回路全体がノイズ・フリーだとして)仮想ノイズ信号源から発生したと考え、その大きさを表したものが「入力換算ノイズ」です。「入力信号源に相当するレベルに変換したもの」ということもできます。
SPICEシミュレータは、出力端のノイズ・レベルからシステムの増幅度を差し引いて、「入力換算ノイズ」も表示してくれます。
ノイズ・シミュレーションの設定画面
図5はノイズ・シミュレーションの設定画面です。これはどの端子を測定するか、どの端子を基準電位とするかを設定するもので、上から入力換算ノイズとして変換される信号源、次がノイズ量として測定される出力端(V(3))、最後が基準電位(通常はグラウンド, V(0))です。一番下のチェックボックスはオンしてください。これをチェックして範囲を入力しないと、結果をグラフ表示してくれません。そのために確実にここを設定してください(Ver. 10での場合)。
図6はシミュレーションする周波数範囲の設定で、ここでは1Hz~100MHzまでとしています。

図5. ノイズ・シミュレーションの設定画面
図6. シミュレーションする周波数の設定画面
図7はどのノイズを表示させるかの設定です。onoise_spectrumは、出力端(3)に実際に現れるノイズ・レベル、inoise_spectrumは入力信号源V1に換算されたノイズ・レベル、onoise_rr1はR1から生じるノイズが出力端(3)に現れるノイズ分になります。onoise_rr2は同じくR2から生じるノイズ分です。

図7. 表示するノイズ・ソースの設定画面
回路図上のコンポーネント
図4の回路との関係も説明しておきます。入力側のV1は(先に説明したように)入力換算ノイズ源に相当する部分を明示的に示すものです。
R1は実際のジョンソン・ノイズ発生源(4.07nV/√Hz)となります。V1は電圧源(ここでは電圧はゼロですが)なので「電圧源の内部抵抗はゼロ」として考えるので、R1は直接グラウンドに接続されていることになります。
このように接続することで、R1から発生しているジョンソン・ノイズを測定できることになります。
A1は理想増幅器(ノイズ・フリー)です。ここでは増幅度A = 10倍としてあります。理想増幅器ですからA = 10で計算するだけでノイズを発生させるものではありません。こうすればA1の入力はハイ・インピーダンス、出力インピーダンスがゼロになりますので、A1を電圧バッファとして考えることができます。
出力(3)にはR2が接続されています。これ自体も本来ジョンソン・ノイズ(4.07nV/√Hz)を発生するものではありますが、この回路構成でどのように振舞うかは、シミュレーションで見てみましょう。
シミュレーション結果
シミュレーション結果を図8に示します。ここではGrapherをMarker ON, Color non reverse, Legend (凡例) ON, Grid ONにしています。マーカは1kHzを指しています。
「図がやけに縦長だなあ…」というのは、気にしないでくださいませ(笑)。
詳しい話は以降に改めて示しますが、まずは少なくとも「周波数によらずノイズ・レベルが一定」であることが判ると思います。一定のスペクトル・レベルがホワイト・ノイズです。

図8. シミュレーション結果
マーカで値を読み出してみる
図9のマーカ・リードアウトで、inoise_spectrumのリードアウト(y1)が1.6576e-17という大きさです…。図8の左の縦軸を見てみると、これはV^2/Hz(つまりここまで説明してきたV/√Hzの2乗)で表示されているのですね。
でもA^2/Hzという文字も見えますね…。これはどういうことでしょうか。V2/Hz = 4kTBRであり、A2/Hz = 4kTB/Rで、同じ単位にはなりませんね。
まあまずは、今のところは「この単位はV2/Hzなのね」と思ってください。
SPICE恐るべし…
まだまだ続くのですが、ホントに「SPICE恐るべし…」です。このノイズ解析の体系についても、完全にきちんと、表示の考え方まで、全て整合が取れているのです。これが素子モデルから伝送線路まで、複数のシミュレーション計算方法で、きちんとSPICEシミュレーションとして、全て成りたっているのですから…。たいしたものだと思います。

図9. マーカ・リードアウトの画面

図10. マーカ・リードアウト画面をよく見てみる
マーカと計算値を比較してみる
図10は図9の大切なところをハイライトしたものです。
onoise_rr1, onoise_rr2の値
一番左の赤シカクはonoise_rr1で、2乗された大きさに相当します。マーカ周波数 = 1kHzで、出力(3)に現れるR1のノイズ量として1.6576e-15です。次のonoise_rr2も同じ意味ですが、R2としてはゼロですね…(あとで説明します)。
またonoise_rr1の値がonoise_spectrumの値と同じということも気がつきます。つまり少なくともここで判ることは、出力ノイズはR1によるものが全てで、R2は関与していないということです。
inoise_spectrumを理論値と比較してみる
一番右の赤シカクinoise_spectrumの値を見てみましょう。これもV^2で、2乗された大きさに相当します。これまでの説明、また図4からこれはR1により発生しているノイズだけに影響されるとみることができます。
それではこのinoise_spectrumの値を、1kΩの理論値SQRT(4kTB) = 4.07nV/√Hzと比較してみましょう。1kΩの理論値を2乗してみると(4.07nV/√Hz)^2 = 1.65749E-17になり、inoise_spectrumの値と同じですね!
温度は摂氏27℃で計算している
理論式のとおりノイズ量は、絶対温度T [K]のルートに比例します。SPICEの計算では、温度TについてはデフォルトでT = 300K、つまり室温27°で計算しています。
onoise_spectrumの値
onoise_spectrum = onoise_rr1 = 1.6576e-15
になっています。ここではR1相当分のノイズだけが出力ノイズに関与しています。
A1の増幅度が10倍、またR1から発生するノイズは説明のとおりinoise_ spectrumとイコールであり、このinoise_spectrumが10倍、2乗で100倍になり、onoise_spectrumはinoise_ spectrumと値が同じで、係数がe-15となっているわけです。
なぜR2からのノイズがゼロになるのか
R2から出力(3)に現れるノイズはゼロです。これは抵抗並列接続の説明のとおりで、A1の出力インピーダンスRoutA1 = 0ですから、A1の出力ノイズV(3)は
V(3) = Vr2・RoutA1/(RoutA1 + R2) = Vr2・0/(0 + 1kΩ) = 0
となるわけです。ここでVr2は抵抗R2で発生するノイズです。
入力回路に並列に1kΩを接続してみる
図11をご覧ください。こんどは「少しひねって」、入力回路に並列に1kΩのR3を接続してみます。この場合もこれまでの説明のように、入力回路全体で500Ωの抵抗になり、それから生じるノイズ量がA1の入力に加わっていることになります。

図11. 入力回路に並列に1kΩを接続してみる
つまり入力回路では V2 = 4kTR (500Ω) = 8.284E-18 V2/Hz になります。これがA1で10倍に増幅されますが、SPICE上の表示としてはV2なので、10倍の2乗で100倍となり、図12の赤いシカクのようにonoise_spectrumとして8.2879E-16になります。
inoise_spectrumはどう考えるか
図12のinoise_spectrumは、回路全体をノイズ・フリーとしたとき、出力(3)でonoise_spectrumを生じる大きさ全てが、仮想ノイズ信号源V1から発生していると仮定したときの、V1の大きさに相当します。
そのためV1から出力(3)にかけての増幅率は、A1の増幅率10ではなく、R1とR3の分圧で増幅率が1/2になり、V1からA1出力(3)の端子間で5倍の増幅率になります。つまり計算上の増幅率はV2なので2乗で25倍になりますから、onoise_spectrum/25 = 3.3152e-17がinoise_spectrumになっているわけです。
onoise_rr1はonoise_spectrumの1/2
また図10と比べて、図12のonoise_rr1が異なる値になっていることがわかります。これはonoise_spectrumの1/2です。
これはR1とR3がノイズ源として出力に現れているためで、R1とR3が相互に分圧として影響した結果として、R1から本来生じるノイズがその半分の量で(V2として考えると)出力に現れているということです。これはこれまでの「V2の足し算、電力での足し算、RSSである」という説明のとおりです。

図12. 図11のマーカ・リードアウト画面
電圧ノイズ源を等価電流ノイズ源に変換してみる
「A^2/Hzという文字も見えますね…」のお話を説明したいと思います。ここまで図13のように、ジョンソン・ノイズは「電圧ノイズ」であるとして、ノイズ・フリー抵抗と直列でペアになる「電圧ノイズ」というモデルで考えてきました。
それを「電流ノイズ」として、等価電流源とノイズ・フリー抵抗でどうモデル化されるか考えてみます。それが「A^2/Hzという文字も見えますね…」の答えでもあるわけです。
等価電圧源の場合(これまでの場合)
「電圧ノイズ」だとして入力換算表記で「等価入力換算ノイズ源」としてモデル化してみると、図14のようになります。図14の等価電圧源の場合は、RsourceとRloadにそれぞれVN = SQRT(kTR) [V/√Hz]が加わりますから、等価電圧源はVNの2倍で(ここまでの説明のように)V = SQRT(4kTR) [V/√Hz]でした。
等価電流源に変換してみた場合
これを図15のように、等価電流ノイズ源にした場合は、RsourceとRloadにそれぞれINが流れるようになります。IN によりそれぞれVN = SQRT(kTR) [V/√Hz](抵抗1本分なので"4"はありません)と同じ量が生じるとすれば、その等価電流源(図15)は図14の等価電圧源と「等価」になるわけです。
計算は省略しますが、この電流量は
I = SQRT(4kT/R) [A/√Hz], I2 = 4kT/R [A2/Hz]
となります。
図13. 抵抗のサーマル・ノイズ・モデル

図14. これまでの入力換算ノイズ源(電圧源)

図15. 電圧源を電流源に変換してみる
A^2で答えが得られる場合というのは
これまでシミュレーション回路には、入力換算のため電圧源を挿入していました。それを図15のように電流源として挿入すれば、inoise_spectrumは電流量の2乗になり、I2の大きさとして、単位が[A2/Hz]として表される、マーカ読みが電流量になる、ということになります(onoise_spectrumなどは依然として電圧量)。
Grapherで得られる答えが2乗である理由
Grapherで見られる結果としてV^2やI^2になっているのは、それぞれ足し算(や掛け算や割り算)で計算すれば求まる(RSSで計算することなく)ということです。さらに帯域B [Hz]での全体のノイズ量も、ルート計算を用いることなく、単純にB倍すればいいということです。
結果のルートを取れば、1Hzあたりのノイズ量や、帯域幅B [Hz]のノイズ電圧/電流が求まるわけです。
ホント「何か変じゃない?」と感じても、実際はよく考えられて出来ていますね。
最後に
1Hzに換算された電圧ノイズの単位がV/√Hzである理由を説明しておきます。
ここまでの説明のように、帯域幅B [Hz]は電力(V2, I2)に比例する項ですから、電圧Vはこの平方根量になり、これに合わせて、単位がV/√Hzになっているのです。
OPアンプのデータシートでノイズ電圧/電流の単位がV/√Hz, A/√Hzでルートなのは、これが理由です。
この技術ノートはこれで最後にして、もう一度別の技術ノートで、こんどは本当のOPアンプを使ってノイズ解析をしてみます。著者について
デジタル回路(FPGAやASIC)からアナログ、高周波回路まで多...
この記事に関して
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}