[KEKB Bunch Feedback Group]

FFTWを使ったaSubレコード(Japanese)


by とびやま まこと(Makoto Tobiyama)/KEKB ビームモニターグループ

警告
以下の記述に関しては、意図する、しないに関わらず多くの誤り、誤解が含まれていると思われますので、 決して信用してはいけません。これを信じて起きた損害に関しては、当方は一切責任を持ちません。


If you want to contact with the author, please E-mail makoto.tobiyama@kek.jp.
目次

1.はじめに

EPICSで取得したwaveformをFFTするaSubレコードを作ってみました。FFTのルーチンは 有名なFFTWを使いました。

2.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に入るようです。

3.EPICS環境

本aSubレコードは、EPICS R314.12.3-CSAのもとで開発したものです。もはや3.14系列は 過去の遺物かも知れませんが、そう簡単にはversion7系統に移行出来ないので。。 EPICSそのものに対する説明、入門出家入道については徳の高い専門家に帰依するなり、 古今東西の古文書、Wikiなどを調べるなどの厳しい修行が求められるかもしれません。動作はLinux (CentOS 7/CentOS 6)上の EPICS R314.12.3-CSAで検証しています。

4.コードの概要

コードを以下に示します。 FFTWはちゃんと実部虚部のデータを出しますが、このaSubレコードではamplitudeしか 興味がないのでそれ以外の位相項などは無視しています。必要に応じて変更してください。 データ点数はもととものwaveformレコードのNELM等は使わず、外から与える仕様としています。

5.EPICSデータベースサンプル

サンプルファイルは以下を参照してください。

6.スタートアップファイルサンプル

スタートアップの必要部分は以下の通りです。(単なるデータベースだけ)
## Load record instances
dbLoadRecords "db/DRFFT.db"

7.まとめ

実行結果例を以下に示します。まず、ビームがダンピングリングに入射直後は、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...