diff carfac/sai.cc @ 663:4582882ab89f

Make the C++ SAI match the Matlab implementation. - Fix syntax error which caused a linear window to be used instead of the correct sine window. - Correct off-by-one indexing errors to compensate for 1-based indexing in Matlab. - Enable test to verify that the C++ output matches Matlab with high precision.
author ronw@google.com
date Tue, 16 Jul 2013 19:56:16 +0000
parents 7e18c84ca2b7
children
line wrap: on
line diff
--- a/carfac/sai.cc	Tue Jul 16 19:56:11 2013 +0000
+++ b/carfac/sai.cc	Tue Jul 16 19:56:16 2013 +0000
@@ -35,7 +35,8 @@
   input_buffer_.setZero(params_.num_channels, buffer_width);
   output_buffer_.setZero(params_.num_channels, params_.width);
 
-  window_.setLinSpaced(params_.window_width, kPi / params_.window_width, kPi)
+  window_ =
+      ArrayX::LinSpaced(params_.window_width, kPi / params_.window_width, kPi)
       .sin();
 }
 
@@ -74,9 +75,9 @@
   float window_hop = params_.window_width / 2;
   int window_start = (input_buffer.cols() - params_.window_width) -
       (params_.num_window_pos - 1) * window_hop;
-  int window_range_start = window_start - params_.future_lags - 1;
-  int offset_range_start = window_start - params_.width;
-  assert(offset_range_start >= 0);
+  int window_range_start = window_start - params_.future_lags;
+  int offset_range_start = 1 + window_start - params_.width;
+  assert(offset_range_start > 0);
   for (int i = 0; i < params_.num_channels; ++i) {
     // TODO(ronw): Rename this here and in the Matlab code since the
     // input doesn't have to contain naps.