annotate trunk/carfac/car.h @ 688:e50aee5046b1

Style fixes. - Fix most lint errors found by http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py - Clean up commenting style. - Alphabetize #includes and using statements.
author ronw@google.com
date Tue, 11 Jun 2013 20:41:15 +0000
parents d0612798f6de
children
rev   line source
alexbrandmeyer@685 1 //
alexbrandmeyer@685 2 // car.h
alexbrandmeyer@685 3 // CARFAC Open Source C++ Library
alexbrandmeyer@685 4 //
alexbrandmeyer@685 5 // Created by Alex Brandmeyer on 5/10/13.
alexbrandmeyer@685 6 //
alexbrandmeyer@685 7 // This C++ file is part of an implementation of Lyon's cochlear model:
alexbrandmeyer@685 8 // "Cascade of Asymmetric Resonators with Fast-Acting Compression"
alexbrandmeyer@685 9 // to supplement Lyon's upcoming book "Human and Machine Hearing"
alexbrandmeyer@685 10 //
alexbrandmeyer@685 11 // Licensed under the Apache License, Version 2.0 (the "License");
alexbrandmeyer@685 12 // you may not use this file except in compliance with the License.
alexbrandmeyer@685 13 // You may obtain a copy of the License at
alexbrandmeyer@685 14 //
alexbrandmeyer@685 15 // http://www.apache.org/licenses/LICENSE-2.0
alexbrandmeyer@685 16 //
alexbrandmeyer@685 17 // Unless required by applicable law or agreed to in writing, software
alexbrandmeyer@685 18 // distributed under the License is distributed on an "AS IS" BASIS,
alexbrandmeyer@685 19 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alexbrandmeyer@685 20 // See the License for the specific language governing permissions and
alexbrandmeyer@685 21 // limitations under the License.
alexbrandmeyer@685 22
alexbrandmeyer@685 23 #ifndef CARFAC_CAR_H
alexbrandmeyer@685 24 #define CARFAC_CAR_H
alexbrandmeyer@685 25
alexbrandmeyer@685 26 #include "common.h"
alexbrandmeyer@685 27
alexbrandmeyer@685 28 // A CARParams structure stores the necessary information needed by a CARFAC
ronw@688 29 // object to design the set of CARCoeffs implementing 'The Cascade of
alexbrandmeyer@685 30 // Asymmetric Resonators' described in the chapter of the same name in Lyon's
ronw@688 31 // book "Human and Machine Hearing".
alexbrandmeyer@685 32 struct CARParams {
alexbrandmeyer@685 33 CARParams() {
alexbrandmeyer@685 34 velocity_scale = 0.1;
alexbrandmeyer@685 35 v_offset = 0.04;
alexbrandmeyer@685 36 min_zeta = 0.1;
alexbrandmeyer@685 37 max_zeta = 0.35;
alexbrandmeyer@685 38 first_pole_theta = 0.85 * kPi;
alexbrandmeyer@685 39 zero_ratio = sqrt(2.0);
alexbrandmeyer@685 40 high_f_damping_compression = 0.5;
alexbrandmeyer@685 41 erb_per_step = 0.5;
alexbrandmeyer@685 42 min_pole_hz = 30;
ronw@688 43 erb_break_freq = 165.3; // The Greenwood map's break frequency in Hertz.
ronw@688 44 // Glassberg and Moore's high-cf ratio.
ronw@688 45 erb_q = 1000 / (24.7 * 4.37);
ronw@688 46 }
ronw@688 47
ronw@688 48 FPType velocity_scale; // Used for the velocity nonlinearity.
alexbrandmeyer@685 49 FPType v_offset; // The offset gives us quadratic part.
ronw@688 50 FPType min_zeta; // The minimum damping factor in mid-freq channels.
ronw@688 51 FPType max_zeta; // The maximum damping factor in mid-freq channels.
alexbrandmeyer@685 52 FPType first_pole_theta;
alexbrandmeyer@685 53 FPType zero_ratio; // This is how far zero is above the pole.
alexbrandmeyer@685 54 FPType high_f_damping_compression; // A range from 0 to 1 to compress theta.
alexbrandmeyer@685 55 FPType erb_per_step;
alexbrandmeyer@685 56 FPType min_pole_hz;
alexbrandmeyer@685 57 FPType erb_break_freq;
alexbrandmeyer@685 58 FPType erb_q;
alexbrandmeyer@685 59 };
alexbrandmeyer@685 60
ronw@688 61 // CAR filter coefficients, which are derived from a set of CARParams.
alexbrandmeyer@685 62 struct CARCoeffs {
alexbrandmeyer@685 63 FPType velocity_scale;
alexbrandmeyer@685 64 FPType v_offset;
alexbrandmeyer@685 65 ArrayX r1_coeffs;
alexbrandmeyer@685 66 ArrayX a0_coeffs;
alexbrandmeyer@685 67 ArrayX c0_coeffs;
alexbrandmeyer@685 68 ArrayX h_coeffs;
alexbrandmeyer@685 69 ArrayX g0_coeffs;
alexbrandmeyer@685 70 ArrayX zr_coeffs;
alexbrandmeyer@685 71 };
alexbrandmeyer@685 72
alexbrandmeyer@685 73
ronw@688 74 // CAR filter state.
alexbrandmeyer@685 75 struct CARState {
alexbrandmeyer@685 76 ArrayX z1_memory;
alexbrandmeyer@685 77 ArrayX z2_memory;
alexbrandmeyer@685 78 ArrayX za_memory;
alexbrandmeyer@685 79 ArrayX zb_memory;
alexbrandmeyer@685 80 ArrayX dzb_memory;
alexbrandmeyer@685 81 ArrayX zy_memory;
alexbrandmeyer@685 82 ArrayX g_memory;
alexbrandmeyer@685 83 ArrayX dg_memory;
alexbrandmeyer@685 84 };
alexbrandmeyer@685 85
ronw@688 86 #endif // CARFAC_CAR_H