Mercurial > hg > aimc
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.