Mercurial > hg > aimc
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',' ');