FAQ
FAMOS
シーケンス / 関数top
└シーケンス / 関数
ID.s030
Q. パルス波形を分周するためにはどうすればよいですか?
A.
パルス波形を分周する関数は存在しません。シーケンスで作成します。
下記サンプルを参考にしてください。
;************************************************************ ; パルス波形を分周するサンプル ;************************************************************ ;------------------------------------------------------------ ; サンプルデータを作成します ;------------------------------------------------------------ _xdelta = 0.01 _xpoint = 1000 _temp1 = Ramp( 0, _xdelta, _xpoint) _temp2 = Ramp( _xdelta, _xdelta*10, _xpoint/10) Pulse = Set( _temp1*0, _temp2, _temp2*0+1) Delete _* Show Pulse ;//////////////////////////////////////////////////////////// ; データ処理部 ; パルス波形を1/10に分周します ;------------------------------------------------------------ ;【引数】 ; Pulse = 入力データ ; ;【戻値】 ; Result = 結果 ; ;【パラメータ】 _Ratio = 10 ;//////////////////////////////////////////////////////////// ;各パルスを取得します。 ; 本サンプルではパルス形状は台形ではなく、インパルス状ですが ; いずれにも対応します。 _ckLevel = SearchLevel(Pulse, 2, 0.5, 0, 2, 0, 0, 1) _ckLevel.Y = _ckLevel.Y*0+1 ;分周するために各パルスにラベルをつけます _Counter = Int( _ckLevel.Y) _Counter = Leng( _Counter, Leng?(_Counter)-1) _Divider = Mod( _Counter, _Ratio) _Divider = XYof( _ckLevel.X, _Divider) ;指定(分周)されたパルスを取得します。 _DivLevel = SearchLevel( _Divider, 3, 1, 1, 2, 0, 0, 1) Result = Set( Pulse*0, _DivLevel.X, Leng(0,Leng?(_DivLevel))+1) ;//////////////////////////////////////////////////////////// ;結果を表示します CvYAxis( Pulse, Result, 0,0,0, 400, -2) CvAttrib(Pulse, 1)