目次
EPICSで取得したwaveformをFFTするaSubレコードを作ってみました。FFTのルーチンは
有名なFFTWを使いました。
FFTWはCのライブラリで、2の累乗だけでないDFTをうまくやってくれるルーチンです。
現時点では
こちら
からダウンロードが出来ます。
利用したのは最新のFFTW 3.3.9です。ダウンロード後
zcat fftw-3.3.9.tar.gz |gar -xvf -
で展開し、
cd fftw-3.3.9
./configure
gmake
sudo gmake install
でインストールします。ライブラリは/usr/local/libに入るようです。
本aSubレコードは、EPICS R314.12.3-CSAのもとで開発したものです。もはや3.14系列は
過去の遺物かも知れませんが、そう簡単にはversion7系統に移行出来ないので。。
EPICSそのものに対する説明、入門出家入道については徳の高い専門家に帰依するなり、
古今東西の古文書、Wikiなどを調べるなどの厳しい修行が求められるかもしれません。動作はLinux
(CentOS 7/CentOS 6)上の
EPICS R314.12.3-CSAで検証しています。
コードを以下に示します。
FFTWはちゃんと実部虚部のデータを出しますが、このaSubレコードではamplitudeしか
興味がないのでそれ以外の位相項などは無視しています。必要に応じて変更してください。
データ点数はもととものwaveformレコードのNELM等は使わず、外から与える仕様としています。
サンプルファイルは以下を参照してください。
スタートアップの必要部分は以下の通りです。(単なるデータベースだけ)
## Load record instances
dbLoadRecords "db/DRFFT.db"
実行結果例を以下に示します。まず、ビームがダンピングリングに入射直後は、X(青)は大きなベータトロン
振動とシンクロトロン振動をしており、いずれも減衰しつつあります(上)。

FFTした結果(下)には、シンクロトロン振動(50よりちょっと下のピーク)とベータトロン振動
(350付近のピーク)が見えています。
Y(赤)はベータトロン振動だけが減衰していっており、FFTした結果も570付近にピークを
持つbroadなピーク構造が見えます。
10ms後には、ベータトロン振動は消え、X(青)にのみシンクロトロン振動が残っている
(かつ中々減衰しない)のが見えます。

FFTした結果(下)には、X方向のみシャープなシンクロトロン振動のピークのみ
見えています。
なお、このデータベースサンプルでは、もとのデータをscan 1秒でとってきていますが、
本来はFLNKあるいは何かのeventレコード経由で同期してデータをとった方が良いことは
言うまでもありません(実際は、IOCが違うのでどっちもちょい面倒)。
Makoto Tobiyama
12/Mar/2021
Return to FB Home Page...