#!/usr/bin/env ruby # regular expression for matching 5-min timeseries re = /^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2})\s+(\d+)\s+(\d+)/ v = Array.new() # array for timeseries ARGF.each_line do |line| if re.match(line) v.push $3.to_f end end n = v.length # n: number of samples h = n / 2 - 1 # (half of n) - 1 r = Array.new(n/2) # array for auto correlation for k in 0 .. h # for different timelag s = 0 for i in 0 .. h s += v[i] * v[i + k] end r[k] = Float(s) end # normalize by dividing by r0 if r[0] != 0.0 r0 = r[0] for k in 0 .. h r[k] = r[k] / r0 puts "#{k} #{r[k]}" end end