annotate matlab/bmm/carfac/CARFAC_GenerateTestData.m @ 631:af58e5d108fe

Scons cleanup to make it easier only run tests, expand docs.
author ronw@google.com
date Thu, 23 May 2013 19:29:00 +0000
parents 586b0677aae8
children 27f2d9b76075
rev   line source
alexbrandmeyer@626 1 % Author: Alex Brandmeyer
alexbrandmeyer@626 2 %
alexbrandmeyer@626 3 % This Matlab file is part of an implementation of Lyon's cochlear model:
alexbrandmeyer@626 4 % "Cascade of Asymmetric Resonators with Fast-Acting Compression"
alexbrandmeyer@626 5 % to supplement Lyon's upcoming book "Human and Machine Hearing"
alexbrandmeyer@626 6 %
alexbrandmeyer@626 7 % Licensed under the Apache License, Version 2.0 (the "License");
alexbrandmeyer@626 8 % you may not use this file except in compliance with the License.
alexbrandmeyer@626 9 % You may obtain a copy of the License at
alexbrandmeyer@626 10 %
alexbrandmeyer@626 11 % http://www.apache.org/licenses/LICENSE-2.0
alexbrandmeyer@626 12 %
alexbrandmeyer@626 13 % Unless required by applicable law or agreed to in writing, software
alexbrandmeyer@626 14 % distributed under the License is distributed on an "AS IS" BASIS,
alexbrandmeyer@626 15 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alexbrandmeyer@626 16 % See the License for the specific language governing permissions and
alexbrandmeyer@626 17 % limitations under the License.
alexbrandmeyer@626 18
alexbrandmeyer@626 19 function CARFAC_GenerateTestData()
alexbrandmeyer@626 20 % function GenerateTestData()
alexbrandmeyer@626 21 % This function generates a set of text files in the AIMC repository that
alexbrandmeyer@626 22 % can be used to compare the output of the C++ version of CARFAC with that
alexbrandmeyer@626 23 % of the Matlab version.
alexbrandmeyer@626 24
alexbrandmeyer@626 25 % This designates a subdirectory of the C++ CARFAC folder to store the
alexbrandmeyer@626 26 % test data
alexbrandmeyer@626 27 data_dir = '../../../carfac/test_data/';
alexbrandmeyer@626 28
alexbrandmeyer@626 29 % These are some basic settings for the CARFAC design and test data.
alexbrandmeyer@626 30 n_ears = 1;
alexbrandmeyer@626 31 wav_fn = 'plan.wav';
alexbrandmeyer@626 32
alexbrandmeyer@626 33 seg_len = 441;
alexbrandmeyer@626 34 start_index = 13000;
alexbrandmeyer@626 35 end_index = start_index + seg_len - 1;
alexbrandmeyer@626 36 file_signal = wavread(wav_fn);
alexbrandmeyer@626 37 file_signal = file_signal(start_index:end_index, 1);
alexbrandmeyer@626 38
alexbrandmeyer@626 39 filename = 'file_signal_monaural_test.txt'
alexbrandmeyer@626 40 data = file_signal;
alexbrandmeyer@626 41 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 42
alexbrandmeyer@626 43 % This designs and initializes the CARFAC.
alexbrandmeyer@626 44 CF_struct = CARFAC_Design(n_ears);
alexbrandmeyer@626 45 CF_struct = CARFAC_Init(CF_struct);
alexbrandmeyer@626 46
alexbrandmeyer@626 47
alexbrandmeyer@626 48
alexbrandmeyer@626 49 % Now we go through the coefficient structures and store each set in a text
alexbrandmeyer@626 50 % file.
alexbrandmeyer@626 51
alexbrandmeyer@626 52 % r1 coeffs
alexbrandmeyer@626 53 filename = 'r1_coeffs.txt'
alexbrandmeyer@626 54 data = CF_struct.ears.CAR_coeffs.r1_coeffs;
alexbrandmeyer@626 55 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 56
alexbrandmeyer@626 57 % a0 coeffs
alexbrandmeyer@626 58 filename = 'a0_coeffs.txt'
alexbrandmeyer@626 59 data = CF_struct.ears.CAR_coeffs.a0_coeffs;
alexbrandmeyer@626 60 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 61
alexbrandmeyer@626 62 % c0 coeffs
alexbrandmeyer@626 63 filename = 'c0_coeffs.txt'
alexbrandmeyer@626 64 data = CF_struct.ears.CAR_coeffs.c0_coeffs;
alexbrandmeyer@626 65 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 66
alexbrandmeyer@626 67 % h coeffs
alexbrandmeyer@626 68 filename = 'h_coeffs.txt'
alexbrandmeyer@626 69 data = CF_struct.ears.CAR_coeffs.h_coeffs;
alexbrandmeyer@626 70 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 71
alexbrandmeyer@626 72 % g0 coeffs
alexbrandmeyer@626 73 filename = 'g0_coeffs.txt'
alexbrandmeyer@626 74 data = CF_struct.ears.CAR_coeffs.g0_coeffs;
alexbrandmeyer@626 75 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 76
alexbrandmeyer@626 77 % zr coeffs
alexbrandmeyer@626 78 filename = 'zr_coeffs.txt'
alexbrandmeyer@626 79 data = CF_struct.ears.CAR_coeffs.zr_coeffs;
alexbrandmeyer@626 80 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 81
alexbrandmeyer@626 82 % Now we store the IHC coefficients in an output vector.
alexbrandmeyer@626 83
alexbrandmeyer@626 84 coeff = CF_struct.ears.IHC_coeffs;
alexbrandmeyer@626 85 ihc_coeffs = [coeff.just_hwr; coeff.lpf_coeff; coeff.out_rate; ...
alexbrandmeyer@626 86 coeff.in_rate; coeff.one_cap; coeff.output_gain; ...
alexbrandmeyer@626 87 coeff.rest_output; coeff.rest_cap; coeff.ac_coeff];
alexbrandmeyer@626 88
alexbrandmeyer@626 89 filename = 'ihc_coeffs.txt'
alexbrandmeyer@626 90 data = ihc_coeffs;
alexbrandmeyer@626 91 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 92
alexbrandmeyer@626 93 % For each of the AGC Stages, we store a text file containing all of the
alexbrandmeyer@626 94 % coefficients.
alexbrandmeyer@626 95
alexbrandmeyer@626 96 agc_coeffs = CF_struct.ears.AGC_coeffs
alexbrandmeyer@626 97
alexbrandmeyer@626 98 for stage = 1:4
alexbrandmeyer@626 99 data = zeros(14,1);
alexbrandmeyer@626 100 data(1) = agc_coeffs(stage).n_ch;
alexbrandmeyer@626 101 data(2) = agc_coeffs(stage).n_AGC_stages;
alexbrandmeyer@626 102 data(3) = agc_coeffs(stage).AGC_stage_gain;
alexbrandmeyer@626 103 data(4) = agc_coeffs(stage).decimation;
alexbrandmeyer@626 104 data(5) = agc_coeffs(stage).AGC_epsilon;
alexbrandmeyer@626 105 data(6) = agc_coeffs(stage).AGC_polez1;
alexbrandmeyer@626 106 data(7) = agc_coeffs(stage).AGC_polez2;
alexbrandmeyer@626 107 data(8) = agc_coeffs(stage).AGC_spatial_iterations;
alexbrandmeyer@626 108 data(9) = agc_coeffs(stage).AGC_spatial_FIR(1);
alexbrandmeyer@626 109 data(10) = agc_coeffs(stage).AGC_spatial_FIR(2);
alexbrandmeyer@626 110 data(11) = agc_coeffs(stage).AGC_spatial_FIR(3);
alexbrandmeyer@626 111 data(12) = agc_coeffs(stage).AGC_spatial_n_taps;
alexbrandmeyer@626 112 data(13) = agc_coeffs(stage).AGC_mix_coeffs;
alexbrandmeyer@626 113 data(14) = agc_coeffs(1).detect_scale;
alexbrandmeyer@626 114 filename = ['agc_coeffs_' int2str(stage) '.txt']
alexbrandmeyer@626 115 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 116 end
alexbrandmeyer@626 117
alexbrandmeyer@626 118 % This section of code runs the single segment of data which was selected
alexbrandmeyer@626 119 % and stores the nap, bm, ohc and agc outputs of the CARFAC.
alexbrandmeyer@626 120
alexbrandmeyer@626 121 [CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, file_signal);
alexbrandmeyer@626 122
alexbrandmeyer@626 123 filename = 'monaural_test_nap.txt'
alexbrandmeyer@626 124 data = nap;
alexbrandmeyer@626 125 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 126
alexbrandmeyer@626 127 filename = 'monaural_test_bm.txt'
alexbrandmeyer@626 128 data = bm;
alexbrandmeyer@626 129 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 130
alexbrandmeyer@626 131 filename = 'monaural_test_ohc.txt'
alexbrandmeyer@626 132 data = ohc;
alexbrandmeyer@626 133 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
alexbrandmeyer@626 134
alexbrandmeyer@626 135 filename = 'monaural_test_agc.txt'
alexbrandmeyer@626 136 data = agc;
alexbrandmeyer@626 137 dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');