Hi Jason
The default filter which gives me the 120HZ followed by the class I use for benchmarking. I Benchmark the BreezeFilter using mytest3 function.
package ch.ethz.ralab.filters
class DefaultFilter(filter: Array[Double]) {
//check if Filter is odd
private def checkFilter() {
val l: Int = filter.length
if (l % 2 == 0) {
throw new IllegalArgumentException("filter length must be odd")
}
}
checkFilter
val fHalf = (filter.length - 1) / 2
def dotProduct[T <% Double](as: Array[T], pos: Int, bs: Array[T]) = {
//def dotProduct(as: Array[Double], pos :Int, bs: Array[Double]): Double = {
var sum = 0.
var i = 0
while (i < bs.size) {
sum += bs(i) * as(pos + i)
i += 1
}
sum
}
def filter(data: Array[Double]): Array[Double] = {
var myArray = new Array[Double](data.length)
for (i <- 0 to data.length - filter.length) {
myArray(i + fHalf) = dotProduct(data, i, filter)
}
return myArray
}
}
>>>>>>>>>>>>>>>>>>>>HERE starts the test App.
package ch.ethz.ralab.filters
import breeze.linalg._
/**
* @author ${
user.name}
*/
object App2 {
def main(args: Array[String]) {
mytest3
//mytest2
}
def mytest() {
val x: AverageFilter = new AverageFilter(3);
println(x.fSize)
println(x.halfFilter)
//println(arr.length)
val arr = List[Double](1, 2, 3, 1, 2, 3, 1, 2, 3)
for (al: Double <- arr) print(al + " ")
println
val brr = x.filter(arr.toArray)
println(brr.length)
for (bl: Double <- brr) print(bl + " ")
var totalt = 0.
val times = 500
for (i <- 0 to times) {
val arrb: Array[Double] = Array.fill(500000)(math.random)
val t0 = System.nanoTime()
x.filter(arrb)
val t1 = System.nanoTime()
totalt += t1 - t0
}
println
val s = totalt / 1000000000.
println("AVG FILTER Elapsed time: " + s + "s")
println("AVG Filter hz : " + times / s + "Hz")
}
def mytest2() {
val filter = Array[Double](1, 1, 1)
val x = new DefaultFilter(filter);
println(x.fHalf)
//println(arr.length)
val arr = List[Double](1, 2, 3, 1, 2, 3, 1, 2, 3)
for (al: Double <- arr) print(al + " ")
println
val brr = x.filter(arr.toArray)
println(brr.length)
for (bl: Double <- brr) print(bl + " ")
val filter2 = Array[Double](-1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1)
val x2 = new DefaultFilter(filter2);
var totalt = 0.
var nrspec = 100
println("starting test")
for (i <- 0 to nrspec) {
val arrb: Array[Double] = Array.fill(500000)(math.random)
val t0 = System.nanoTime()
x2.filter(arrb)
val t1 = System.nanoTime()
totalt += t1 - t0
}
println
var sec = totalt / 1000000000.
println("Elapsed time: " + sec + "s")
println("Frequency : " + nrspec / sec + "Hz")
}
// breeze test
def mytest3() {
val filter2 = DenseVector[Double](-1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1)
val x2 = new BreezeFilter(filter2);
var totalt = 0.
var nrspec = 100
println("starting Breeze test")
for (i <- 0 to nrspec) {
val arrb: DenseVector[Double] = DenseVector.rand(500000)
val t0 = System.nanoTime()
x2.filter(arrb)
val t1 = System.nanoTime()
totalt += t1 - t0
}
println
var sec = totalt / 1000000000.
println("Elapsed time: " + sec + "s")
println("Frequency : " + nrspec / sec + "Hz")