comparison trunk/matlab/bmm/carfac/CARFAC_GenerateTestData.m @ 698:cdb7fb83a03b

Unify naming scheme for test data and clean up code that generates it.
author ronw@google.com
date Thu, 27 Jun 2013 20:48:27 +0000
parents 7f424c1a8b78
children 597913e855fd
comparison
equal deleted inserted replaced
697:c64fdcc4f250 698:cdb7fb83a03b
19 function CARFAC_GenerateTestData() 19 function CARFAC_GenerateTestData()
20 % function GenerateTestData() 20 % function GenerateTestData()
21 % This function generates a set of text files in the AIMC repository that 21 % This function generates a set of text files in the AIMC repository that
22 % can be used to compare the output of the C++ version of CARFAC with that 22 % can be used to compare the output of the C++ version of CARFAC with that
23 % of the Matlab version. 23 % of the Matlab version.
24 %
25 % Naming convention for files containing audio samples for file test_name.wav:
26 % test_name-audio.txt
27 % Each line contains a space-separated list of samples from each channel.
28 %
29 % Naming convention for files containing CARFAC/SAI outputs:
30 % test_name-{matlab,cpp}-signal_name(optional_channel_number).txt
31 % Each line contains a space-separated list of elements from a single row.
24 32
25 % This designates a subdirectory of the C++ CARFAC folder to store the 33 % This designates a subdirectory of the C++ CARFAC folder to store the
26 % test data 34 % test data.
27 data_dir = '../../../carfac/test_data/'; 35 test_data_dir = '../../../carfac/test_data/';
28 precision_level = 9;
29 36
37 test_name = 'binaural_test';
38 samples_to_read = [9000, 9903]; % Trim for a faster test.
39 signal = wavread([test_data_dir test_name '.wav'], samples_to_read);
40 assert(size(signal, 2) == 1, 'Expected mono signal.');
41 % Construct a binaural signal by delaying the signal between the ears.
42 itd_offset = 22; % about 1 ms
43 signal = [signal((itd_offset+1):end), signal(1:(end-itd_offset))] / 10;
44 n_ears = size(signal, 2);
45 CF_struct = CARFAC_Design(n_ears);
46 WriteTestData(test_data_dir, 'binaural_test', signal, CF_struct);
47
48
49 test_name = 'long_test';
50 samples_to_read = [80001, 82000]; % Trim for a faster test.
51 [signal, fs] = wavread([test_data_dir test_name '.wav'], samples_to_read);
52 assert(size(signal, 2) == 2, 'Expected stereo signal.');
53 n_ears = size(signal, 2);
54 CF_struct = CARFAC_Design(n_ears, fs);
55 WriteTestData(test_data_dir, 'long_test', signal, CF_struct);
56
57
58 function WriteTestData(test_data_dir, test_name, signal, CF_struct)
30 % The following section generates data for the binaural test of the C++ 59 % The following section generates data for the binaural test of the C++
31 % version of CARFAC. 60 % version of CARFAC.
32 n_ears = 2; 61 filename_prefix = [test_data_dir test_name];
62
63 WriteMatrixToFile([filename_prefix '-audio.txt'], signal);
64
65 CF_struct = CARFAC_Init(CF_struct);
66 [CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, signal);
33 67
34 file_signal = wavread('plan.wav'); 68 % Store the data for each ear of each output signal in a separate file.
35 file_signal = file_signal(9000:9903); % trim for a faster test 69 for ear = 1:CF_struct.n_ears
36 70 WriteMatrixToFile([filename_prefix '-matlab-nap' num2str(ear) '.txt'], ...
37 itd_offset = 22; % about 1 ms 71 nap(:,:,ear));
38 test_signal = [file_signal((itd_offset+1):end), ... 72 WriteMatrixToFile([filename_prefix '-matlab-bm' num2str(ear) '.txt'], ...
39 file_signal(1:(end-itd_offset))] / 10; 73 bm(:,:,ear));
40 74 end
41 filename = 'file_signal_binaural_test.txt'
42 data = test_signal;
43 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
44
45 CF_struct = CARFAC_Design(n_ears);
46 CF_struct = CARFAC_Init(CF_struct);
47 [CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, test_signal);
48
49 %Store the data for each each as individual 2d text data.
50 nap1 = nap(:,:,1);
51 nap2 = nap(:,:,2);
52 bm1 = bm(:,:,1);
53 bm2 = bm(:,:,2);
54
55 filename = 'binaural_test_nap1.txt'
56 data = nap1;
57 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
58
59 filename = 'binaural_test_bm1.txt'
60 data = bm1;
61 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
62
63 filename = 'binaural_test_nap2.txt'
64 data = nap2;
65 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
66
67 filename = 'binaural_test_bm2.txt'
68 data = bm2;
69 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
70 75
71 76
72 % Longer audio segment test 77 function WriteMatrixToFile(filename, matrix)
73 78 precision_level = 9;
74 n_ears = 2; 79 dlmwrite(filename, matrix, 'precision', precision_level, 'delimiter', ' ');
75 start = 80001;
76 n_timepoints = 2000;
77
78 [test_signal, fs] = wavread([data_dir 'Anka_SLTS.wav']);
79 test_signal = test_signal(start:start+n_timepoints-1,:);
80 size(test_signal)
81
82 filename = 'file_signal_long_test.txt'
83 data = test_signal;
84 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
85
86 CF_struct = CARFAC_Design(n_ears, fs);
87 CF_struct = CARFAC_Init(CF_struct);
88 [CF_struct, nap_decim, nap, bm, ohc, agc] = CARFAC_Run(CF_struct, test_signal);
89
90 %Store the data for each each as individual 2d text data.
91 nap1 = nap(:,:,1);
92 nap2 = nap(:,:,2);
93 bm1 = bm(:,:,1);
94 bm2 = bm(:,:,2);
95
96 filename = 'long_test_nap1.txt'
97 data = nap1;
98 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
99
100 filename = 'long_test_bm1.txt'
101 data = bm1;
102 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
103
104 filename = 'long_test_nap2.txt'
105 data = nap2;
106 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');
107
108 filename = 'long_test_bm2.txt'
109 data = bm2;
110 dlmwrite([data_dir filename],data,'precision', precision_level,'delimiter',' ');