annotate trunk/C++/CARFACCommon.H @ 706:f8e90b5d85fd tip

Delete CARFAC code from this repository. It has been moved to https://github.com/google/carfac Please email me with your github username to get access. I've also created a new mailing list to discuss CARFAC development: https://groups.google.com/forum/#!forum/carfac-dev
author ronw@google.com
date Thu, 18 Jul 2013 20:56:51 +0000
parents 33c6f1921171
children
rev   line source
flatmax@674 1
flatmax@598 2 // Author Matt Flax <flatmax@>
flatmax@597 3 //
flatmax@597 4 // This C++ file is part of an implementation of Lyon's cochlear model:
flatmax@597 5 // "Cascade of Asymmetric Resonators with Fast-Acting Compression"
flatmax@597 6 // to supplement Lyon's upcoming book "Human and Machine Hearing"
flatmax@597 7 //
flatmax@597 8 // Licensed under the Apache License, Version 2.0 (the "License");
flatmax@597 9 // you may not use this file except in compliance with the License.
flatmax@597 10 // You may obtain a copy of the License at
flatmax@597 11 //
flatmax@597 12 // http://www.apache.org/licenses/LICENSE-2.0
flatmax@597 13 //
flatmax@597 14 // Unless required by applicable law or agreed to in writing, software
flatmax@597 15 // distributed under the License is distributed on an "AS IS" BASIS,
flatmax@597 16 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
flatmax@597 17 // See the License for the specific language governing permissions and
flatmax@597 18 // limitations under the License.
flatmax@597 19 #ifndef CARFACCOMMON_H_INCLUDED
flatmax@597 20 #define CARFACCOMMON_H_INCLUDED
flatmax@597 21
flatmax@597 22 typedef float FP_TYPE; ///< The floating point type
flatmax@597 23 #define AGC_STAGE_COUNT 4 ///< The number of cascades in the AGC
flatmax@598 24 #define DEFAULT_SAMPLERATE 22050. ///< The default sample rate in Hz
flatmax@597 25
flatmax@597 26 #include <iostream>
flatmax@597 27 using namespace std;
flatmax@597 28 #include <Eigen/Dense>
flatmax@597 29 using namespace Eigen;
flatmax@597 30
flatmax@598 31 #include "PsychoAcoustics.H"
flatmax@598 32
flatmax@612 33 #define AGC_DESIGN_ITERATION_ERROR -100 ///< Error when designing the AGC filter taps
flatmax@612 34 #define AGC_DESIGN_TAPS_OOB_ERROR -101 ///< The number of taps requested have not been accounted for in the code yet.
flatmax@612 35 #define AGC_FIR_TAP_COUNT_ERROR -102 ///< The number of taps passed to the AGC::Design_FIR_coeffs method are not handled
flatmax@612 36
flatmax@597 37 /**
flatmax@597 38 \mainpage CARFAC C++
flatmax@597 39
flatmax@597 40 \author {Matt Flax <flatmax\@>}
flatmax@597 41 \date 2013.02.08
flatmax@597 42
flatmax@597 43 \section intro_sec Introduction
flatmax@597 44
flatmax@597 45 This C++ code implements Dick Lyon's CARFAC model for the peripheral hearing circuit.
flatmax@597 46
flatmax@597 47 \section code_philo Philosophy of the implementation
flatmax@597 48
flatmax@597 49 \subsection dd Matching the design document
flatmax@597 50
flatmax@597 51 As requested by the CARFAC design description, this codebase uses Eigen to compute
flatmax@597 52 matrix/vector operations.
flatmax@597 53
flatmax@597 54 \subsection oo Object oriented acritecture
flatmax@597 55
flatmax@597 56 Where possible common paradigms inherit from common Objects. This aims to minimise
flatmax@597 57 the amount of coding required to implement and modify CARFAC. For example, the EarComponent
flatmax@597 58 encapsulates the CAR, AGC and IHC where all of the have the common features of Coefficients,
flatmax@597 59 Parameters and State.
flatmax@597 60
flatmax@597 61 \subsection cc Common code
flatmax@597 62
flatmax@597 63 Where possible typedefs, definitions, includes and namespace inclusions which are common
flatmax@597 64 to the code, or usefull outside of class definitions are put in the CARFACCommon.H file.
flatmax@597 65
flatmax@597 66 \subsection fileNames File naming convention and header guards
flatmax@597 67
flatmax@597 68 C++ files in this codebase are named using the .C and .H suffixes (C code uses .c and .h).
flatmax@597 69
flatmax@597 70 Header guards are labeled using the files name with '_' characters, for example.H would become
flatmax@597 71 EXAMPLE_H_.
flatmax@597 72
flatmax@597 73 \subsection globalVars Global variables
flatmax@597 74
flatmax@597 75 In general the use of global variables is discouraged. Where possible the code must be instantiated
flatmax@597 76 many times on the same computer system and the use of global variables complicates having multiple
flatmax@597 77 instances of shared library classes.
flatmax@597 78
flatmax@597 79 \subsection cvns Class and variable naming convention
flatmax@597 80
flatmax@597 81 In general, classes begin with capitol letters and a variable name begis with a lower case character.
flatmax@597 82 The consider a class for example :
flatmax@597 83
flatmax@597 84 \code
flatmax@597 85 class ForExample { class def here };
flatmax@597 86
flatmax@597 87 ForExample forExample;
flatmax@597 88
flatmax@597 89 class OMG { class def here };
flatmax@597 90
flatmax@597 91 OMG omg; // here it is clear what is the type and what is the variable.
flatmax@597 92
flatmax@597 93 \endcode
flatmax@597 94
flatmax@597 95 The class 'ForExample' is defined, and the variable name 'forExample' may be used in the code,
flatmax@597 96 which clearly indicates the type of the variable.
flatmax@597 97
flatmax@597 98 The concept of labeling variables using 'p' for pointer, and type name references is not necessary,
flatmax@597 99 and in some cases discouraged. Consider for example, \code float *fs \endcode defining the pointer to the sample rate.
flatmax@597 100 If we were to use \code float * pFFs // don't do this - difficult to see that pFFs references fs - the sample rate \endcode , it becomes rather difficult to understand that pFFs actualy
flatmax@597 101 points to the sample rate.
flatmax@597 102
flatmax@597 103 A deeper argument for using simple variable names (in C++) is as follows. Good engineers program
flatmax@597 104 classes and methods which are short and concise. As monitors (LCDs) get larger, most of your methods
flatmax@597 105 and in some cases classes are visible in one or two pages of your monitor. Consequently if the exact
flatmax@597 106 type of a variable named 'fs' needs to be found, it is as simple as looking at the top of your monitor
flatmax@597 107 or scrolling up a little to find a method's input variable name/type. In the case of class member
flatmax@597 108 variables, a class 'SoundCard' is expected to define a sound card. Consequently certain member variables
flatmax@597 109 are expected to exist, for example, fs, inputChannels, outputChannels and so on. If the actual types
flatmax@597 110 of these variables have been forgotten, then the header file is referenced, and this is normally as
flatmax@597 111 simple as a few key strokes to change from the SoundCard.C file to the SoundCard.H file to inspect
flatmax@597 112 the names and types of available member variables.
flatmax@597 113
flatmax@674 114 \copyright {\code
flatmax@597 115 Author Matt Flax <flatmax@>
flatmax@597 116
flatmax@597 117
flatmax@597 118 This C++ file is part of an implementation of Lyon's cochlear model:
flatmax@597 119
flatmax@597 120 "Cascade of Asymmetric Resonators with Fast-Acting Compression"
flatmax@597 121
flatmax@597 122 to supplement Lyon's upcoming book "Human and Machine Hearing"
flatmax@597 123
flatmax@597 124
flatmax@597 125 Licensed under the Apache License, Version 2.0 (the "License");
flatmax@597 126
flatmax@597 127 you may not use this file except in compliance with the License.
flatmax@597 128
flatmax@597 129 You may obtain a copy of the License at
flatmax@597 130
flatmax@597 131
flatmax@597 132 http://www.apache.org/licenses/LICENSE-2.0
flatmax@597 133
flatmax@597 134
flatmax@597 135 Unless required by applicable law or agreed to in writing, software
flatmax@597 136
flatmax@597 137 distributed under the License is distributed on an "AS IS" BASIS,
flatmax@597 138
flatmax@597 139 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
flatmax@597 140
flatmax@597 141 See the License for the specific language governing permissions and
flatmax@597 142
flatmax@597 143 limitations under the License. \endcode}
flatmax@597 144 */
flatmax@597 145
flatmax@597 146 #endif // CARFACCOMMON_H_INCLUDED