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)

製品詳細はこちら

<< シーケンス / 関数に関するFAQ一覧へ戻る