diff trunk/matlab/bmm/carfac/CARFAC_GenerateTestData.m @ 678:7f424c1a8b78

Fifth revision of Alex Brandmeyer's C++ implementation of CARFAC. Moved output structure to deque<vector<FloatArray>, moved coefficient Design methods to CARFAC object, moved tests into carfac_test.cc. Verified binaural output against Matlab using two tests. Added CARFAC_Compare_CPP_Test_Data to plot NAP output of C++ version against Matlab version. Verified build and test success on OS X using SCons with g++ 4.7 (std=c++11).
author alexbrandmeyer
date Mon, 27 May 2013 16:36:54 +0000
parents 933cf18d9a59
children cdb7fb83a03b
line wrap: on
line diff
--- a/trunk/matlab/bmm/carfac/CARFAC_GenerateTestData.m	Fri May 24 22:38:09 2013 +0000
+++ b/trunk/matlab/bmm/carfac/CARFAC_GenerateTestData.m	Mon May 27 16:36:54 2013 +0000
@@ -25,113 +25,86 @@
 % This designates a subdirectory of the C++ CARFAC folder to store the
 % test data
 data_dir = '../../../carfac/test_data/';
+precision_level = 9;
 
-% These are some basic settings for the CARFAC design and test data.
-n_ears = 1;
-wav_fn = 'plan.wav';
+% The following section generates data for the binaural test of the C++
+% version of CARFAC.
+n_ears = 2;
+ 
+file_signal = wavread('plan.wav');
+file_signal = file_signal(9000:9903);  % trim for a faster test
+ 
+itd_offset = 22;  % about 1 ms
+test_signal = [file_signal((itd_offset+1):end), ...
+               file_signal(1:(end-itd_offset))] / 10;
+           
+filename = 'file_signal_binaural_test.txt'
+data = test_signal;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+           
+CF_struct = CARFAC_Design(n_ears);
+CF_struct = CARFAC_Init(CF_struct);         
+[CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, test_signal);
+ 
+%Store the data for each each as individual 2d text data.
+nap1 = nap(:,:,1);
+nap2 = nap(:,:,2);
+bm1 = bm(:,:,1);
+bm2 = bm(:,:,2);
+ 
+filename = 'binaural_test_nap1.txt'
+data = nap1;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'binaural_test_bm1.txt'
+data = bm1;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'binaural_test_nap2.txt'
+data = nap2;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'binaural_test_bm2.txt'
+data = bm2;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
 
-seg_len = 441;
-start_index = 13000;
-end_index = start_index + seg_len - 1;
-file_signal = wavread(wav_fn);
-file_signal = file_signal(start_index:end_index, 1);
 
-filename = 'file_signal_monaural_test.txt'
-data = file_signal;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
+% Longer audio segment test
 
-% This designs and initializes the CARFAC.
-CF_struct = CARFAC_Design(n_ears);
-CF_struct = CARFAC_Init(CF_struct);
-
-
-
-% Now we go through the coefficient structures and store each set in a text
-% file.
-
-% r1 coeffs
-filename = 'r1_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.r1_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% a0 coeffs
-filename = 'a0_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.a0_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% c0 coeffs
-filename = 'c0_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.c0_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% h coeffs
-filename = 'h_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.h_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% g0 coeffs
-filename = 'g0_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.g0_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% zr coeffs
-filename = 'zr_coeffs.txt'
-data = CF_struct.ears.CAR_coeffs.zr_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% Now we store the IHC coefficients in an output vector.
-
-coeff = CF_struct.ears.IHC_coeffs;
-ihc_coeffs = [coeff.just_hwr; coeff.lpf_coeff; coeff.out_rate; ...
-    coeff.in_rate; coeff.one_cap; coeff.output_gain; ...
-    coeff.rest_output; coeff.rest_cap; coeff.ac_coeff];
-
-filename = 'ihc_coeffs.txt'
-data = ihc_coeffs;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-% For each of the AGC Stages, we store a text file containing all of the
-% coefficients.
-
-agc_coeffs = CF_struct.ears.AGC_coeffs
-
-for stage = 1:4
-    data = zeros(14,1);
-    data(1) = agc_coeffs(stage).n_ch;
-    data(2) = agc_coeffs(stage).n_AGC_stages;
-    data(3) = agc_coeffs(stage).AGC_stage_gain;
-    data(4) = agc_coeffs(stage).decimation;
-    data(5) = agc_coeffs(stage).AGC_epsilon;
-    data(6) = agc_coeffs(stage).AGC_polez1;
-    data(7) = agc_coeffs(stage).AGC_polez2;
-    data(8) = agc_coeffs(stage).AGC_spatial_iterations;
-    data(9) = agc_coeffs(stage).AGC_spatial_FIR(1);
-    data(10) = agc_coeffs(stage).AGC_spatial_FIR(2);
-    data(11) = agc_coeffs(stage).AGC_spatial_FIR(3);
-    data(12) = agc_coeffs(stage).AGC_spatial_n_taps;
-    data(13) = agc_coeffs(stage).AGC_mix_coeffs;
-    data(14) = agc_coeffs(1).detect_scale;
-    filename = ['agc_coeffs_' int2str(stage) '.txt']
-    dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-end
-
-% This section of code runs the single segment of data which was selected
-% and stores the nap, bm, ohc and agc outputs of the CARFAC.
-
-[CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, file_signal);
-
-filename = 'monaural_test_nap.txt'
-data = nap;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-filename = 'monaural_test_bm.txt'
-data = bm;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-filename = 'monaural_test_ohc.txt'
-data = ohc;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
-
-filename = 'monaural_test_agc.txt'
-data = agc;
-dlmwrite([data_dir filename],data,'precision', 12,'delimiter',' ');
\ No newline at end of file
+n_ears = 2;
+start = 80001;
+n_timepoints = 2000;
+ 
+[test_signal, fs] = wavread([data_dir 'Anka_SLTS.wav']);
+test_signal = test_signal(start:start+n_timepoints-1,:);
+size(test_signal)
+ 
+filename = 'file_signal_long_test.txt'
+data = test_signal;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+           
+CF_struct = CARFAC_Design(n_ears, fs);
+CF_struct = CARFAC_Init(CF_struct);         
+[CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, test_signal);
+ 
+%Store the data for each each as individual 2d text data.
+nap1 = nap(:,:,1);
+nap2 = nap(:,:,2);
+bm1 = bm(:,:,1);
+bm2 = bm(:,:,2);
+ 
+filename = 'long_test_nap1.txt'
+data = nap1;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'long_test_bm1.txt'
+data = bm1;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'long_test_nap2.txt'
+data = nap2;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
+ 
+filename = 'long_test_bm2.txt'
+data = bm2;
+dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');