summaryrefslogtreecommitdiffstats
path: root/baseline/source/audiobeam/audiobeam.c
diff options
context:
space:
mode:
Diffstat (limited to 'baseline/source/audiobeam/audiobeam.c')
-rw-r--r--baseline/source/audiobeam/audiobeam.c592
1 files changed, 0 insertions, 592 deletions
diff --git a/baseline/source/audiobeam/audiobeam.c b/baseline/source/audiobeam/audiobeam.c
deleted file mode 100644
index 5f23daf..0000000
--- a/baseline/source/audiobeam/audiobeam.c
+++ /dev/null
@@ -1,592 +0,0 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: audiobeam
7
8 Author: Eugene Weinstein
9
10 Function: Audio beam former
11
12 Source: StreamIt
13 http://groups.csail.mit.edu/cag/streamit/
14
15 Changes: no functional changes
16
17 License: see license.txt
18
19*/
20
21
22/*
23 Include section
24*/
25
26#include "extra.h"
27#include "audiobeamlibm.h"
28#include "audiobeamlibmalloc.h"
29#include "audiobeam.h"
30
31/*
32 Forward declaration of functions
33*/
34
35void audiobeam_init();
36int audiobeam_return();
37void audiobeam_main( void );
38//int main( void );
39void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
40 prep_delays[], float *delays );
41float *audiobeam_parse_line( float *float_arr, int num_mic );
42long int audiobeam_find_max_in_arr( float *arr, int size );
43long int audiobeam_find_min_in_arr( float *arr, int size );
44int audiobeam_wrapped_inc_offset( int i, int offset, int max_i );
45int audiobeam_wrapped_dec_offset( int i, int offset, int max_i );
46int audiobeam_wrapped_inc( int i, int max_i );
47int audiobeam_wrapped_dec( int i, int max_i );
48struct audiobeam_DataQueue *audiobeam_init_data_queue( int max_delay,
49 int num_mic );
50struct audiobeam_Delays *audiobeam_init_delays ( int num_angles, int num_mic );
51void audiobeam_calc_distances( float *source_location,
52 float audiobeam_mic_locations[15][3],
53 float *distances,
54 int num_mic );
55void audiobeam_calc_delays( float *distances, float *delays, int sound_speed,
56 int sampling_rate, int num_mic );
57void audiobeam_adjust_delays( float *delays, int num_mic );
58float *audiobeam_calc_weights_lr ( int num_mic );
59float *audiobeam_calc_weights_left_only ( int num_mic );
60float audiobeam_calculate_energy( float *samples, int num_samples );
61float audiobeam_do_beamforming( struct audiobeam_PreprocessedDelays
62 preprocessed_delays[],
63 float **sample_queue,
64 int queue_head,
65 long int max_delay,
66 int num_mic,
67 float *weights );
68int audiobeam_process_signal( struct audiobeam_Delays *delays, int num_mic,
69 float sampling_rate, float **beamform_results,
70 struct audiobeam_DataQueue *queue,
71 int num_beams, int window, float *weights );
72int audiobeam_calc_beamforming_result( struct audiobeam_Delays *delays,
73 float **beamform_results,
74 float *energies,
75 struct audiobeam_DataQueue *queue,
76 int num_beams, int window,
77 int hamming );
78void audiobeam_calc_single_pos( float source_location[3],
79 float audiobeam_mic_locations[15][3],
80 int hamming );
81
82
83/*
84 Declaration of global variables
85*/
86
87extern float audiobeam_input[5760];
88extern float audiobeam_mic_locations[15][3];
89extern float audiobeam_source_location[3];
90extern float audiobeam_origin_location[3];
91int audiobeam_input_pos;
92int audiobeam_checksum;
93
94
95/*
96 Initialization- and return-value-related functions
97*/
98
99void audiobeam_init()
100{
101 audiobeam_input_pos = 0;
102 audiobeam_checksum = 0;
103
104 unsigned int i;
105 unsigned char *p;
106 volatile char bitmask = 0;
107 // Reset heap
108 audiobeam_free_all();
109
110 /*
111 Apply volatile XOR-bitmask to entire input array.
112 */
113 p = ( unsigned char * ) &audiobeam_input[ 0 ];
114 _Pragma( "loopbound min 23040 max 23040" )
115 for ( i = 0; i < sizeof( audiobeam_input ); ++i, ++p )
116 *p ^= bitmask;
117
118 p = ( unsigned char * ) &audiobeam_mic_locations[ 0 ];
119 _Pragma( "loopbound min 180 max 180" )
120 for ( i = 0; i < sizeof( audiobeam_mic_locations ); ++i, ++p )
121 *p ^= bitmask;
122
123 p = ( unsigned char * ) &audiobeam_source_location[ 0 ];
124 _Pragma( "loopbound min 12 max 12" )
125 for ( i = 0; i < sizeof( audiobeam_source_location ); ++i, ++p )
126 *p ^= bitmask;
127
128 p = ( unsigned char * ) &audiobeam_origin_location[ 0 ];
129 _Pragma( "loopbound min 12 max 12" )
130 for ( i = 0; i < sizeof( audiobeam_origin_location ); ++i, ++p )
131 *p ^= bitmask;
132}
133
134
135int audiobeam_return()
136{
137 return ( audiobeam_checksum +1!= 0 );
138}
139
140
141/*
142 Algorithm core functions
143*/
144
145void audiobeam_preprocess_delays( struct audiobeam_PreprocessedDelays
146 prep_delays[], float *delays )
147{
148 int i;
149
150 _Pragma( "loopbound min 15 max 15" )
151 for ( i = 0; i < 15; i++ ) {
152 prep_delays[i].delay = delays[i];
153 prep_delays[i].high = ( int ) audiobeam_ceil( delays[i] );
154 prep_delays[i].low = ( int ) audiobeam_floor( delays[i] );
155 prep_delays[i].offset = delays[i] - prep_delays[i].low;
156 }
157}
158
159
160float *audiobeam_parse_line( float *float_arr, int num_mic )
161{
162 int i;
163
164 _Pragma( "loopbound min 15 max 15" )
165 for ( i = 0; i < num_mic; i++ )
166 float_arr[i] = audiobeam_input[audiobeam_input_pos++];
167
168 return float_arr;
169}
170
171
172long int audiobeam_find_max_in_arr( float *arr, int size )
173{
174 int i;
175 float max = 0;
176
177 _Pragma( "loopbound min 15 max 15" )
178 for ( i = 0; i < size; i++ ) {
179 if ( arr[i] > max )
180 max = arr[i];
181 }
182
183 return audiobeam_ceil( max );
184}
185
186
187long int audiobeam_find_min_in_arr( float *arr, int size )
188{
189 int i;
190 float min = arr[0];
191
192 _Pragma( "loopbound min 15 max 15" )
193 for ( i = 0; i < size; i++ ) {
194 if ( arr[i] < min )
195 min = arr[i];
196 }
197
198 return audiobeam_floor( min );
199}
200
201
202int audiobeam_wrapped_inc_offset( int i, int offset, int max_i )
203{