![](https://jhalfmoon.com/dbc/wp-content/uploads/2018/11/JH-2-150x150.png)
柄にもなくアナログ素人老人が信号に「ノイズ」などちょっと乗せてみようなどと思って、ちょいとハマリました。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ファイルから以下引用させていただきます。
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個?)の値が生成されます。信号(ノイズ)に応じてテキトーな定数を考える必要がありますな。
ということで実験
左上のV1電源が「フツーの」電圧源です。ここではオフセット0V、振幅1V、440Hzの正弦波V440を生成してます。一方、右側にならんでいるB1からB4まではいずれもビヘイビア電源です。
-
- Vnoise0、V440の振幅に0.5かけて500mV振幅とし、white関数使って生成した100mV振幅のノイズを加えたもの。
- Vnoise1、white関数使って生成した100mV振幅のノイズのみ。
- Vnoise2、rand関数使って生成した0~100mVのノイズのみ。
- Vnoise3、random関数使って生成した0~100mVのノイズのみ。
シミュレーション時間は1秒としました。まずは各波形にFFTかけた結果が以下に。最初は電圧源生成による「ピュア」440Hz。
440Hzにピークが立ったあとは、期待どおりの高調波の周波数のところにピークが立ってるみたいです。
つづいて上記にwhite関数でノイズをのせたもの。こんな感じ。
ノイズのったら、2次高調波以外のところは埋もれてしまっている?
つづいてrandom()関数使って生成したノイズのFFT波形。
ううむ、素人老人が上記のFFT波形を眺めてもな~、どれがどれだか分からんぜよ、などと思っていたら「素の時間波形」で気づいてしまいました。虚心坦懐?に信号は眺めてみるもんだな。ホントか?
赤のnoise1波形(white関数)とピンクのnoise3波形(random関数)、オフセットこそ異なれど、よく見るとまったく同じ波形じゃね。オフセットはhelpファイルの記述どおり異なるけど、同じ乱数アルゴリズムに同じ「種」を食わせて生成しているんじゃないかと。。。お惚け老人の気の迷いではあるまい。ノイズ生成関数の闇?