alexbrandmeyer@668: % Author: Alex Brandmeyer alexbrandmeyer@668: % alexbrandmeyer@668: % This Matlab file is part of an implementation of Lyon's cochlear model: alexbrandmeyer@668: % "Cascade of Asymmetric Resonators with Fast-Acting Compression" alexbrandmeyer@668: % to supplement Lyon's upcoming book "Human and Machine Hearing" alexbrandmeyer@668: % alexbrandmeyer@668: % Licensed under the Apache License, Version 2.0 (the "License"); alexbrandmeyer@668: % you may not use this file except in compliance with the License. alexbrandmeyer@668: % You may obtain a copy of the License at alexbrandmeyer@668: % alexbrandmeyer@668: % http://www.apache.org/licenses/LICENSE-2.0 alexbrandmeyer@668: % alexbrandmeyer@668: % Unless required by applicable law or agreed to in writing, software alexbrandmeyer@668: % distributed under the License is distributed on an "AS IS" BASIS, alexbrandmeyer@668: % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. alexbrandmeyer@668: % See the License for the specific language governing permissions and alexbrandmeyer@668: % limitations under the License. alexbrandmeyer@668: alexbrandmeyer@668: function CARFAC_GenerateTestData() alexbrandmeyer@668: % function GenerateTestData() alexbrandmeyer@668: % This function generates a set of text files in the AIMC repository that alexbrandmeyer@668: % can be used to compare the output of the C++ version of CARFAC with that alexbrandmeyer@668: % of the Matlab version. alexbrandmeyer@668: alexbrandmeyer@668: % This designates a subdirectory of the C++ CARFAC folder to store the alexbrandmeyer@668: % test data alexbrandmeyer@668: data_dir = '../../../carfac/test_data/'; alexbrandmeyer@668: alexbrandmeyer@668: % These are some basic settings for the CARFAC design and test data. alexbrandmeyer@668: n_ears = 1; alexbrandmeyer@668: wav_fn = 'plan.wav'; alexbrandmeyer@668: alexbrandmeyer@668: seg_len = 441; alexbrandmeyer@668: start_index = 13000; alexbrandmeyer@668: end_index = start_index + seg_len - 1; alexbrandmeyer@668: file_signal = wavread(wav_fn); alexbrandmeyer@668: file_signal = file_signal(start_index:end_index, 1); alexbrandmeyer@668: alexbrandmeyer@668: filename = 'file_signal_monaural_test.txt' alexbrandmeyer@668: data = file_signal; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % This designs and initializes the CARFAC. alexbrandmeyer@668: CF_struct = CARFAC_Design(n_ears); alexbrandmeyer@668: CF_struct = CARFAC_Init(CF_struct); alexbrandmeyer@668: alexbrandmeyer@668: alexbrandmeyer@668: alexbrandmeyer@668: % Now we go through the coefficient structures and store each set in a text alexbrandmeyer@668: % file. alexbrandmeyer@668: alexbrandmeyer@668: % r1 coeffs alexbrandmeyer@668: filename = 'r1_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.r1_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % a0 coeffs alexbrandmeyer@668: filename = 'a0_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.a0_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % c0 coeffs alexbrandmeyer@668: filename = 'c0_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.c0_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % h coeffs alexbrandmeyer@668: filename = 'h_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.h_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % g0 coeffs alexbrandmeyer@668: filename = 'g0_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.g0_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % zr coeffs alexbrandmeyer@668: filename = 'zr_coeffs.txt' alexbrandmeyer@668: data = CF_struct.ears.CAR_coeffs.zr_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % Now we store the IHC coefficients in an output vector. alexbrandmeyer@668: alexbrandmeyer@668: coeff = CF_struct.ears.IHC_coeffs; alexbrandmeyer@668: ihc_coeffs = [coeff.just_hwr; coeff.lpf_coeff; coeff.out_rate; ... alexbrandmeyer@668: coeff.in_rate; coeff.one_cap; coeff.output_gain; ... alexbrandmeyer@668: coeff.rest_output; coeff.rest_cap; coeff.ac_coeff]; alexbrandmeyer@668: alexbrandmeyer@668: filename = 'ihc_coeffs.txt' alexbrandmeyer@668: data = ihc_coeffs; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: % For each of the AGC Stages, we store a text file containing all of the alexbrandmeyer@668: % coefficients. alexbrandmeyer@668: alexbrandmeyer@668: agc_coeffs = CF_struct.ears.AGC_coeffs alexbrandmeyer@668: alexbrandmeyer@668: for stage = 1:4 alexbrandmeyer@668: data = zeros(14,1); alexbrandmeyer@668: data(1) = agc_coeffs(stage).n_ch; alexbrandmeyer@668: data(2) = agc_coeffs(stage).n_AGC_stages; alexbrandmeyer@668: data(3) = agc_coeffs(stage).AGC_stage_gain; alexbrandmeyer@668: data(4) = agc_coeffs(stage).decimation; alexbrandmeyer@668: data(5) = agc_coeffs(stage).AGC_epsilon; alexbrandmeyer@668: data(6) = agc_coeffs(stage).AGC_polez1; alexbrandmeyer@668: data(7) = agc_coeffs(stage).AGC_polez2; alexbrandmeyer@668: data(8) = agc_coeffs(stage).AGC_spatial_iterations; alexbrandmeyer@668: data(9) = agc_coeffs(stage).AGC_spatial_FIR(1); alexbrandmeyer@668: data(10) = agc_coeffs(stage).AGC_spatial_FIR(2); alexbrandmeyer@668: data(11) = agc_coeffs(stage).AGC_spatial_FIR(3); alexbrandmeyer@668: data(12) = agc_coeffs(stage).AGC_spatial_n_taps; alexbrandmeyer@668: data(13) = agc_coeffs(stage).AGC_mix_coeffs; alexbrandmeyer@668: data(14) = agc_coeffs(1).detect_scale; alexbrandmeyer@668: filename = ['agc_coeffs_' int2str(stage) '.txt'] alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: end alexbrandmeyer@668: alexbrandmeyer@668: % This section of code runs the single segment of data which was selected alexbrandmeyer@668: % and stores the nap, bm, ohc and agc outputs of the CARFAC. alexbrandmeyer@668: alexbrandmeyer@668: [CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, file_signal); alexbrandmeyer@668: alexbrandmeyer@668: filename = 'monaural_test_nap.txt' alexbrandmeyer@668: data = nap; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: filename = 'monaural_test_bm.txt' alexbrandmeyer@668: data = bm; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: filename = 'monaural_test_ohc.txt' alexbrandmeyer@668: data = ohc; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' '); alexbrandmeyer@668: alexbrandmeyer@668: filename = 'monaural_test_agc.txt' alexbrandmeyer@668: data = agc; alexbrandmeyer@668: dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');