FFT分析ツールとしてLTspiceがどこまで有効かをエクセルと比較してみました
色々なデータ解析でFFT処理をエクセルで行っていましたがLTspiceにあるFFTでどこまでできるか比較してみました。
今回はデータとして以下の式で生成した300ポイント分のデータ
sin(2π*N/7)+0.5*sin(2π*N/7.3)+0.25*sin(2π*N/33)
但し 0 <= N <= 299
エクセルでこのデータの最初から「0~255」分だけをFFT分析ツールで処理してみましょう。エクセルではデータ数を必ず「2」のべき数になるようにしないと計算できません。
3周期の三角関数のうち、周期の近い2種類は重なり合っていますが何となく存在しそうなことがわかります。
エクセルの場合、出力は複素数形式で出力されるのでパワースペクトルを計算するにはIMABS( )関数で変換する必要があります。
同じデータを使ってLTspiceでFFT分析をしてみましょう。
先ずデータを読み込む必要があります。先程、使用したデータをテキストファイルで出力します。
0 0
1 1.208297198
2 1.562182321
3 0.834408968
4 -0.409720396
5 -1.230075737
6 -1.004238918
7 0.115276245
8 1.314899195
9 1.719492226
10 1.034912721
11 -0.238888505
12 -1.178815446
13 -1.117944971
14 -0.132331145
15 1.021026071
16 1.465610537
17 0.85012583
18 -0.397556421
19 -1.390296574
20 -1.435329809
21 -0.538666557
22 0.608307531
23 1.144447237
24 0.672487477
25 -0.455647227
26 -1.406734787
27 -1.483420271
28 -0.633025967
29 0.523665158
30 1.157483858
31 0.840852376
32 -0.147164618
33 -1.039302001
34 -1.152481411
35 -0.387649278
36 0.708394886
37 1.356044466
38 1.118092619
39 0.211486999
40 -0.667600931
41 -0.86614658
42 -0.252428891
43 0.700365537
44 1.277080835
45 1.052203112
46 0.194836797
47 -0.671517299
48 -0.93935169
49 -0.462295087
50 0.352297942
51 0.861512374
52 0.669056272
53 -0.089464905
54 -0.863053274
55 -1.105098291
56 -0.676256307
57 0.067457508
58 0.556449628
59 0.437818622
60 -0.170638503
61 -0.785746973
62 -0.932840119
63 -0.499938981
64 0.191806915
65 0.644264223
66 0.561560387
67 0.063244507
68 -0.423220485
69 -0.498314868
70 -0.092845271
71 0.491136675
72 0.823183007
73 0.676836631
74 0.194986
75 -0.233133757
76 -0.280216254
77 0.068149941
78 0.511977063
79 0.679652224
80 0.420763722
・・・・・・・
こんな感じのファイルが出てきます。エクセルの場合、時間データはなくても問題なくFFT処理できますが、LTspiceの場合、一度、過渡解析するため必ず時間データが必要です。しかし、実際の時間データではなくて、等間隔の数値が付いていればOKです。
今回の例では0,1,2,3,・・・と言う数列にしたのでこれをそのまま、「秒」単位として扱いました。結果として299秒分のデータを読み込むことになります。
LTspiceで電圧電源を下図のように回路図に書き、PWL電源としてファイルを読み込みます。
.tran 256
.param F=1/256
.four {F} 128 V(out)
エクセルと同じ処理をするため読み込んだデータの最初の256ポイントを使うために過渡時間としては256秒、数値データとして出力させるためにFFT分解周波数としてF=1/256を設定し、その高調波成分として128倍の高調波まで計算します(後半の2行は数値データが不要なら省略可能です)。
メニュー「View」のところにある「SPICE Error Log」をクリックすると上記の内容が表示されます。勿論、ログファイルのテキストデータとしてファイルも同時に保存されています。
このデータはエクセルと違って複素数の極形式で出力されます。ピークを確認するとエクセルと同じ位置にあります(エクセルの直流部分を除くため数値は一つ小さい)
振幅の絶対値を無視すれば同じ結果を得ることが確認できました。次にグラフと確認してみましょう。
グラフは電気回路として扱っているので横軸の周波数はデータ間隔をいくつで扱ったかによって変わるので余り気にしないでください。また縦軸も係数だけの問題なので無視してください。当たり前ですが、結果としてはエクセルと同じ結果になります。
ここまでなら、わざわざLTspiceを使う必要はない気がします。しかし、ここからがLTspiceの面白いところです。
まず最初にエクセルではFFTの性質上、「2」のべき数でデータを処理しないといけませんでした。折角300ポイントあるデータも一度で処理することができません。分解能は落ちるけど小分けにして複数回FFT処理するか、足りない分は「0」を追加して512のFFTを行うしか方法がありませんでした。
LTspiceの場合、(自動でサンプリング変換等しているのかもしれませんが)300ポイントまとめてFFT処理できます。
最初に試したときは解析時間256秒でしたが、これを300秒に変更してFFT処理します。ピークがある位置は大体同じように出てきます。
ピークの位置やレベルが変わるのは評価対象の周期がFFT区間と同期していないためで、ある程度はズレてしまうのはしょうがないことだと思います。
もう一つ優れているのは、FFT処理用窓関数が準備されていることです。エクセルでは処理前に自分で計算しないといけないので、いろいろな窓関数を試すのは大変です。
窓関数は時間軸でのフィルタ処理ですが、取り込んだPWLデータ出力にLPF、BPFなどを接続してFFT分析も簡単にできます。エクセルで周波数フィルタ処理も大変だと思います。
その点、LTspiceではいろいろ試せます。これは便利です。流石にIFFT処理はできなさそうですが、一般的なFFT処理は意外と便利な気がします。
FFT処理については余り説明しませんでしたが、興味のある方はこちらの記事を参考にしてください。
今回はアナログコンピュータ的なLTspiceの使い方の実験でした。
最後まで読んでいただいて有難うございます。 コメントは今後の参考に、フォローやサポートは今後の励みになります。