SPICEの小瓶(50) LTspice、ノイズ生成関数3種の闇?コマケー話だよ。

Joseph Halfmoon

柄にもなくアナログ素人老人が信号に「ノイズ」などちょっと乗せてみようなどと思って、ちょいとハマリました。LTspiceにはビヘイビア電源(BV)あり、そしてビヘイビア電源に使用できる関数の中にノイズ生成関数があるのです。それも3種も。どのノイズ関数使うのがよろしいの?悩み?は尽きませぬ。

※「SPICEの小瓶」投稿順インデックスはこちら

※ Analog Devices, Inc. LTspice を使用させていただいて動作確認しております。今回使用のバージョンは以下です。

XVII(x64) (17.0.37.0)

Arbitrary Behavioral Voltage or Current Sources

ビヘイビア電圧源は、よくつかう「Voltage Source(電圧源)」と回路図上のシンボルは同じです。〇の中に+-。しかしVoltage Sourceが頭文字「V」で始まるのに対して「B」です。そしてその電圧の定義に数式(多数の関数どもを駆使できる)を使えるところがミソです。

多数の関数ある中にノイズ関係は以下の3つが存在します。HELPファイルから以下引用させていただきます。HelpDescriptions

rand(x)、random(x)、white(x)とな。最後のwhite()はお名前からしてきっとホワイト・ノイズなのでしょう(断言してないケド。)

上のHelpにこちらで勝手に黄色のマーカ引いたところをみていただければ、rand(x)、random(x)とwhite(x)では値域が異なることは明白。上2つは値域0から1だけれども、下のwhiteはオフセット0で上下に幅0.5だと(どちらもそのままV読みで使える。)幅を変えたければ関数の外でテキトーに掛け算すればよろし、ということね。

一方、青色のマーカを勝手に引かせせてもらった部分を参照すれば、rand()が一番「スムースでなく」、randよりrandomがスムースで、randomよりさらにwhiteがスムースなのだと読めます(老人の拙い英語力にて。)それにしてもスムースってなんだ?

なお、各関数に与える引数 x には、(何かの定数)*time などを与えるとよろしいようです。引数x の整数部分が変わると、サイコロが振られて乱数値が定まるようです。time変数にはシミュレーション時間が入ります。たとえば1秒間のトランジェント解析だとtimeは0から1まで動きます。そのままではベタな値になってしまいます。例えば何かの定数=100としておくとtime値が100倍されるので100個(101個?)の値が生成されます。信号(ノイズ)に応じてテキトーな定数を考える必要がありますな。

ということで実験

実験用に作成した回路図が以下に。NoiseTestCircuit

左上のV1電源が「フツーの」電圧源です。ここではオフセット0V、振幅1V、440Hzの正弦波V440を生成してます。一方、右側にならんでいるB1からB4まではいずれもビヘイビア電源です。

    1. Vnoise0、V440の振幅に0.5かけて500mV振幅とし、white関数使って生成した100mV振幅のノイズを加えたもの。
    2. Vnoise1、white関数使って生成した100mV振幅のノイズのみ。
    3. Vnoise2、rand関数使って生成した0~100mVのノイズのみ。
    4. Vnoise3、random関数使って生成した0~100mVのノイズのみ。

シミュレーション時間は1秒としました。まずは各波形にFFTかけた結果が以下に。最初は電圧源生成による「ピュア」440Hz。FFT_440

440Hzにピークが立ったあとは、期待どおりの高調波の周波数のところにピークが立ってるみたいです。

つづいて上記にwhite関数でノイズをのせたもの。こんな感じ。FFT_noise0

ノイズのったら、2次高調波以外のところは埋もれてしまっている?

上記のノイズ成分のみの場合。FFT_noise1

つづいてrand()関数使って生成したノイズのFFT波形。FFT_noise2

つづいてrandom()関数使って生成したノイズのFFT波形。FFT_noise3

ううむ、素人老人が上記のFFT波形を眺めてもな~、どれがどれだか分からんぜよ、などと思っていたら「素の時間波形」で気づいてしまいました。虚心坦懐?に信号は眺めてみるもんだな。ホントか?

トランジェント解析波形の先頭部分を拡大したグラフが以下に。NoiseTestWave

赤のnoise1波形(white関数)とピンクのnoise3波形(random関数)、オフセットこそ異なれど、よく見るとまったく同じ波形じゃね。オフセットはhelpファイルの記述どおり異なるけど、同じ乱数アルゴリズムに同じ「種」を食わせて生成しているんじゃないかと。。。お惚け老人の気の迷いではあるまい。ノイズ生成関数の闇?

SPICEの小瓶(49) LTspice、ステートマシン記述言語を内蔵していた へ戻る