changeset 624:3786bc6e5155

Build C++ CARFAC using scons. Also fix Eigen syntax in ear.cc to get it to build. Tested on Ubuntu Precise.
author ronw@google.com
date Tue, 21 May 2013 20:06:21 +0000
parents b3118c9ed67f
children f72ad5807857
files carfac/SConstruct carfac/agc_params.cc carfac/ear.cc
diffstat 3 files changed, 53 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/carfac/SConstruct	Tue May 21 20:06:21 2013 +0000
@@ -0,0 +1,49 @@
+#  CARFAC Open Source C++ Library
+#
+# This C++ file is part of an implementation of Lyon's cochlear model:
+# "Cascade of Asymmetric Resonators with Fast-Acting Compression"
+# to supplement Lyon's upcoming book "Human and Machine Hearing"
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+## @author Ron Weiss <ronw@google.com>
+#  @date created 2013/05/21
+#  @version \$Id$
+
+"""@package SConstruct
+SConstruct file for the CARFAC Open Source C++ Library.
+
+To install dependencies and build on Ubuntu, run:
+
+ sudo apt-get install libeigen3-dev scons
+ export EIGEN_PATH=/usr/include/eigen3
+ scons
+"""
+
+import os
+
+carfac_sources = [
+    'agc_params.cc',
+    'carfac.cc',
+    'carfac_common.cc',
+    'carfac_output.cc',
+    'car_params.cc',
+    'ear.cc',
+    'ear_output.cc',
+    'ihc_params.cc',
+    ]
+
+env = Environment(CPPPATH=[os.environ['EIGEN_PATH']])
+# Needed to support std::vector initialization lists.
+env.MergeFlags(['-std=c++0x'])
+env.Library(target = 'carfac', source = carfac_sources)
--- a/carfac/agc_params.cc	Tue May 21 04:24:05 2013 +0000
+++ b/carfac/agc_params.cc	Tue May 21 20:06:21 2013 +0000
@@ -52,4 +52,4 @@
   decimation_ = decimation;
   agc1_scales_ = agc1_scales;
   agc2_scales_ = agc2_scales;
-}
\ No newline at end of file
+}
--- a/carfac/ear.cc	Tue May 21 04:24:05 2013 +0000
+++ b/carfac/ear.cc	Tue May 21 20:06:21 2013 +0000
@@ -334,10 +334,8 @@
 // rational function. This makes the result go to zero at high
 // absolute velocities, so it will do nothing there.
 FloatArray Ear::OHC_NLF(FloatArray velocities) {
-  return 1 / (1 +
-        (((velocities * car_coeffs_.velocity_scale_) + car_coeffs_.v_offset_) *
-         ((velocities * car_coeffs_.velocity_scale_) + car_coeffs_.v_offset_)));
-
+  return (1 + ((velocities * car_coeffs_.velocity_scale_)
+               + car_coeffs_.v_offset_).square()).inverse();
 }
 
 // This step is a one sample-time update of the inner-hair-cell (IHC) model,
@@ -563,4 +561,4 @@
   FloatArray zr = car_coeffs_.zr_coeffs_;
   FloatArray r = r1 + zr * undamping;
   return (1 - 2 * r * a0 + (r * r)) / (1 - 2 * r * a0 + h * r * c0 + (r * r));
-}
\ No newline at end of file
+}