class Labcom3::ArcData

Authors

S.imazu

Version

25.2.0

Date

2024-11-18

[ 説明 ]

  1. 計測(保存)データクラス

  2. 計測データは、サンプリングデータおよびパラメータ、時間軸情報を保持する。

[ メンバー ]

[ クラスメソッド ]

[ インスタンスメソッド ]

[ UPDATE履歴 ]

18.0.0

初版

19.0.0


  • 内部データの時間単位を整数時はピコ秒とした。(倍精度時は秒)

  • 時間軸データ数は、疑似フレームデータをサポートすることにより、異なる場合があるので、メンバ変数で管理する。

  • 更新: initialize(), time(), set_time()

  • 追加: num_times()

22.0.0

追加: converted_rgb()

23.0.0

追加: valWithThinning( n_thinning=1)

25.2.0

追加: start_time_sec(), sampling_interval_sec()

  • NArray to Numo::NArray

Attributes

num_of_times[R]

時間軸データ数(サンプリング数と異なる場合がある。)

parameters[R]

パラメータ

samples[R]

サンプリングデータ

sampling_interval[R]

サンプリングインターバル(double:sec, integer:pico-sec)

start_time[R]

サンプリング開始時刻(double:sec, integer:pico-sec)

Public Class Methods

new( start_time=nil, sampling_interval=nil, samp_data=nil, samp_params=nil, num_of_times=nil) click to toggle source
引 数
start_time (double or integer)

サンプリング開始時刻

sampling_interval (double or integer)

サンプリングインターバル

samp_data ( ArcSamples オブジェクト or ArcFrames オブジェクト)

データ

samp_params (ディクショナリ)

パラメータ

num_of_times (integer)

時間軸データ数

説 明

コンストラクタ

# File lib/labcom3/ArcData.rb, line 77
def initialize( start_time=nil, sampling_interval=nil, samp_data=nil, samp_params=nil, num_of_times=nil)
  
  @start_time = start_time
  @sampling_interval = sampling_interval
  @num_of_times = num_of_times
  set_data( samp_data)
  set_parameters( samp_params)
end

Public Instance Methods

add_frame( binary_str, bsize=nil) click to toggle source
引 数
binary_str(string)

データ一次元配列(binary string)

bsize(int)

バイトサイズ

返 値

なし

例 外

RuntimeError

説 明

メンバー変数(samples)に1フレームのデータを追加する。

# File lib/labcom3/ArcData.rb, line 432
def add_frame( binary_str, bsize=nil)
  if nil != @samples  then
    @samples.add_frame( binary_str, bsize)
  else
    raise RuntimeError, 'No initialize samples(ArcFrames).'
  end
end
add_parameter( param_name, param_value, param_type) click to toggle source
引 数
param_name(string)

追加するパラメータ名

param_value(int,double,string,..)

追加するパラメータ値

param_type(int)

追加するパラメータの型コード

返 値

なし

説 明

メンバー変数(parameters)にパラメータを追加する。
型コード:1(String), 2(byte), 3(int16), 4(int32), 5(float), 6(double), 7(int64)

# File lib/labcom3/ArcData.rb, line 325
def add_parameter( param_name, param_value, param_type)
 
  if nil == @parameters then
    @parameters[param_name] = param_value
    @parameters[param_name+'#PTYPE'] = param_type
  else
    @parameters.store(param_name,param_value)
    @parameters.store(param_name+'#PTYPE', param_type)
  end

end
add_parameters( dict_obj) click to toggle source
引 数
dict_obj(dict)

追加するパラメータオブジェクト

返 値

なし

説 明

メンバー変数(parameters)にパラメータオブジェクトを追加(マージ)する。
引数の型チェックをしていない。

# File lib/labcom3/ArcData.rb, line 303
def add_parameters( dict_obj)
  if nil == @parameters then
    @parameters = dict_obj
  else
    @parameters.merge( dict_obj)
  end
end
converted_rgb() click to toggle source
引 数

なし

返 値

配列データ(NArray)

説 明

計測データの frame データをRGB変換しNumo::NArrayクラスのオブジェクトで戻す。

# File lib/labcom3/ArcData.rb, line 144
def converted_rgb()
  return @samples.converted_rgb() if is_frame()
  return nil 
end
init_frames( i_type, x_size, y_size) click to toggle source
引 数
i_type(string)

イメージタイプ

x_size(int)

X方向サイズ

y_size(int)

Y方向サイズ

返 値

なし

説 明

メンバー変数(samples)を ArcFrames に初期化する。
イメージタイプ: ‘GRAY8’, ‘GRAY10’, ‘GREY8’, ‘GREY10’, ‘RGB’, ‘YUV’,…

# File lib/labcom3/ArcData.rb, line 412
def init_frames( i_type, x_size, y_size)
  @samples = ArcFrames.new( i_type, x_size, y_size)
end
is_frame() click to toggle source
引 数

なし

返 値

true:フレーム構造である。 false:フレーム構造でない。 nil:サンプリングデータがない。

説 明

サンプリングデータの構造がフレーム構造であるかチェックする。

# File lib/labcom3/ArcData.rb, line 270
def is_frame()
  return nil if( nil == @samples ) 
  return @samples.kind_of?(ArcFrames)
end
num() click to toggle source
引 数

なし

返 値

サンプリングデータのデータ件数(int)

説 明

配列データのデータ件数を戻す。
Frame形式の場合はフレーム数です。

# File lib/labcom3/ArcData.rb, line 160
def num()
  return nil if nil == @samples 
  return @samples.num()
end
num_times() click to toggle source
引 数

なし

返 値

時間軸データのデータ件数(int)

説 明
# File lib/labcom3/ArcData.rb, line 254
def num_times()
  num_data = @num_of_times if nil != @num_of_times 
  num_data = num() if nil == num_data
  return num_data 
end
sampling_interval_sec() click to toggle source
引 数

なし

返 値

サンプリングインターバル(sec)

説 明
# File lib/labcom3/ArcData.rb, line 236
def sampling_interval_sec()
  return nil if nil == @start_time 
  if( @sampling_interval.is_a?(Integer) ) then
      return @sampling_interval/1000000000000.0
  else
      return @sampling_interval
  end
end
set_data( obj) click to toggle source
引 数
obj( ArcSamples , ArcFrames )

格納するデータオブジェクト

返 値

なし

例 外

TypeError

説 明

メンバー変数(samples)にデータを格納(代入)する。

# File lib/labcom3/ArcData.rb, line 349
def set_data( obj)
  if nil == obj then
    @samples = obj
  elsif obj.kind_of?(ArcSamples)
    @samples = obj
  elsif obj.kind_of?(ArcFrames)
    @samples = obj
  else 
    raise TypeError,'Object type(' + obj.class + ' ) is unsupported.'
  end
end
set_parameters( dict_obj) click to toggle source
引 数
dict_obj(dict)

設定するパラメータオブジェクト

返 値

なし

説 明

メンバー変数(parameters)にパラメータオブジェクトを設定(代入)する。
引数の型チェックをしていない。

# File lib/labcom3/ArcData.rb, line 287
def set_parameters( dict_obj)
  @parameters = dict_obj
end
set_samples( dtype, data, bsize=nil) click to toggle source
引 数
dtype(string)

データ型

data(string)

データ配列(binary string)

bsize(int)

バイトサイズ

返 値

なし

説 明

binary string形式のサンプリングデータをメンバー変数(samples)に格納する。
データ型 : ‘INT8’, ‘INT16’, ‘INT32’, ‘FLT32’, ‘FLT32’, ‘INT64’

# File lib/labcom3/ArcData.rb, line 394
def set_samples( dtype, data, bsize=nil)
  @samples = ArcSamples.new(dtype, data, bsize)
end
set_time( start_time, sampling_interval, num_of_times=nil) click to toggle source
引 数
start_time(double or integer)

サンプリング開始時刻(double:秒, integer:ピコ秒)

sampling_interval(double or integer)

サンプリング間隔(double:秒, integer:ピコ秒)

num_of_times(integer)

時間軸データ数

返 値

なし

説 明

該当メンバー変数に代入する。

# File lib/labcom3/ArcData.rb, line 374
def set_time( start_time, sampling_interval, num_of_times=nil)
  @start_time = start_time
  @sampling_interval = sampling_interval
  @num_of_times = num_of_times
end
start_time_sec() click to toggle source
引 数

なし

返 値

サンプリング開始時刻(sec)

説 明

Not first sample time

# File lib/labcom3/ArcData.rb, line 218
def start_time_sec()
  return nil if nil == @start_time 
  if( @start_time.is_a?(Integer) ) then
      return @start_time/1000000000000.0
  else
      return @start_time
  end
end
time() click to toggle source
引 数

なし

返 値

時間軸配列データ(Numo::NArray)

説 明

時間軸情報から配列を作成し戻す。
時間軸情報がない場合は、index配列になる。

# File lib/labcom3/ArcData.rb, line 177
  def time()
      
    num_data = @num_of_times if nil != @num_of_times 
    num_data = num() if nil == num_data
    return nil if nil == num_data 
    
#    p 'sampling_interval.class : '+ @sampling_interval.is_a?(Integer).to_s #TODO
#    p 'start_time.class : '+ @start_time.class.to_s # TODO

    if nil == @sampling_interval then
        interval = 1
    else
        interval = @sampling_interval
    end
    interval = 1 if 0.0 == interval 
    
    if nil == @start_time then
        start_t = 0
    else
        start_t = @start_time
    end
 #   p 'interval.class : '+ interval.class.to_s #TODO
 #   p 'start_t.class : ' + start_t.class.to_s  #TODO
    
    if( interval.is_a?(Integer) && !(1 == interval && 0 == start_t) ) then
      return (start_t + interval * Numo::DFloat.new( num_data).indgen(1))/1000000000000.0
     else
      return start_t + interval * Numo::DFloat.new( num_data).indgen(1)
     end 
  end
val() click to toggle source
引 数

なし

返 値

配列データ(Numo::NArray)

説 明

計測データのサンプリングデータをNumo::NArrayクラスのオブジェクトに変換し戻す。

# File lib/labcom3/ArcData.rb, line 106
def val()

  return nil if nil == @samples 
  return @samples.val()

end
valWithThinning(n_thinning=1) click to toggle source
引 数
n_thinning(integer)

間引き 1/n

返 値

配列データ(Numo::NArray)

説 明

計測データのサンプリングデータをNumo::NArrayクラスのオブジェクトに変換し戻す。

# File lib/labcom3/ArcData.rb, line 124
def valWithThinning(n_thinning=1)

  return nil if nil == @samples 
  if obj.kind_of?(ArcSamples)
      return @samples.valWithThinning(n_thinning)
  else 
      return @samples.val()
  end

end