#!/usr/bin/ruby if ARGV.size < 2 then puts "Usage: #{__FILE__} (log_AD_calib_CSV1) (log_AD_calib_CSV2)" exit end # logの形式は1行に[line_no, gps_time, accel(3), gyro(3), temperature] def log_read(b) eval %Q{ i = 0 open(log_file).each{|line| if (i += 1) < 30000 then next end log_data << line.chop!.split(/,/).collect{|item| item.to_f} #if i > 35000 then break end } }, b end log_file = ARGV.shift log_data = log1_data = [] log_read(binding) log_file = ARGV.shift log_data = log2_data = [] log_read(binding) #p log1_data #p log2_data #exit diff_data = [] log2_item = log2_data.shift log1_data.each{|log1_item| while log2_item #puts "#{log1_item[1]}, #{log2_item[1]}" if log1_item[1] == log2_item[1] then break elsif log1_item[1] < log2_item[1] then log1_item = nil break else log2_item = log2_data.shift end end next if log1_item == nil break if log2_item == nil #p log1_item, log2_item # [time, diff(accel(3), gyro(3), temp)] diff_data << (diff = [log1_item[1]]) log1_item[2..-1].each_with_index{|v, i| diff << (v - log2_item[i + 2]) } log2_item = log2_data.shift } if diff_data.empty? then exit end sum = [] sum2 = [] (diff_data[0].size - 1).times{|i| sum << 0.0 sum2 << 0.0 } diff_data.each{|v| v[1..-1].each_with_index{|v2, i| sum[i] += v2 sum2[i] += (v2 ** 2) } } #mean mean = sum.collect{|v| v / diff_data.size} #sigma sigma = [] sum2.each_with_index{|v, i| sigma << (v / diff_data.size - (mean[i] ** 2)) } #print puts "index: mean, sigma" mean.each_with_index{|v, i| puts "#{i}: #{v}, #{sigma[i]}" }