Skip to content
Adrian Kreskowski edited this page Oct 14, 2015 · 3 revisions

Quicklink to Parameters:


The MoBat server is configurable on certain levels. Not only the position of the microphones, and therefore the tracking space is specified in the server-configuration file, but also parameters influencing the filtering and analyzation of incoming sound signals.

In the following, the different parameters specified in the default_server.conf are explained shortly. The brackets behind the value indicate the possible values for each of the parameter, such that

  • is_active[ {0|1} ]

means, that is_active is a boolean variable, which you are supposed to assign the variables 0 or 1, whereas

  • vis_height[ float ]

indicates a variable you are supposed to assign a float value.

Signal Visualization

Parameters of this section help a user to get a visual feedback of the different preprocessing parameters chosen currently and the resulting signal per channel and frequency.

Parameters

  • show_signalvis[ {0|1} ]: disables/enables the signal visualization of the server, respectively
  • svis_slot_width[ uint32 ]: width in pixels per frequency entry
  • svis_channel_height[ uint32 ]: width in pixels per audio channel

Further Comments

Enabling the signal visualization therefore will open a window of

(#frequency_entries * svis_slot_width; #channels * svis_channel_height) pixels

Verbosity

Parameters of this section toggle additional information which will be printed on the terminal

Parameters

  • show_times[ {0|1} ]: enables timing of certain code parts for coarse profiling
  • make_server_verbose[ {0|1} ]: prints all UDP packages before sending them out

UDP related

These parameters specify the connection, which will be established by the server.

Parameters

  • receiver_addr_p0 [ uint8 ] : first byte of the IP address of the UDP receiver
  • receiver_addr_p1 [ uint8 ] : second byte of the IP address of the UDP receiver
  • receiver_addr_p2 [ uint8 ] : third byte of the IP address of the UDP receiver
  • receiver_addr_p3 [ uint8 ] : fourth byte of the IP address of the UDP receiver
  • receiver_port [ uint16 ] : port number for the receiver side
  • sender_port [ uint16 ] : port number for the sender side

Microphone related

These parameters specify the number and position of microphones in (cm_x, cm_y), which span the tracking space.

Parameters

  • num_microphones [ uint32 ] : number of used microphones (currently required to be 4 !)
  • microphone1_pos [ vec2f ] : 2D position of the first microphone in local table coordinates
  • microphone2_pos [ vec2f ] : 2D position of the second microphone in local table coordinates
  • microphone3_pos [ vec2f ] : 2D position of the third microphone in local table coordinates
  • microphone4_pos [ vec2f ] : 2D position of the fourth microphone in local table coordinates

Further Comments

In the current implementation, the positions of the microphones also implicitly define important point of the tracking space. The minimum and maximum values of the x- and y-coordinates define the extent of the tracking rectangle, which is then super-sampled.

Observed Frequencies

The given frequencies are registered at the server in order to do analyzation for a specified range around the specified values. Only defined values (and a close neighborhood) will be recognized, but the ID will always be one of the specified frequencies.

Parameters

  • known_frequencies [ [list of uints] ] : specifies the frequencies that the system listens to

Recording

Although this parameter can be adjusted, it is advised not to do so unless you know exactly what you are doing. Shorter recording intervals may not be necessarily supported by certain audio devices, longer ones lead to longer processing times, therefore a longer delay.

Parameters

  • audio_device_sampling_rate [ float ] : depending on the sampling rate of your audio device, a different value has to be entered here. this is important, since the resulting frequencies of the discrete fourier transform (DFT) are dependent on this number. Choosing a sampling rate different than the one of your device will result in wrong determined frequencies. This value can be assumed to be 44100.0 or 48000.0 for standard devices, but do make sure to look this value up.

  • max_recording_time [ uint32 ] : the longest recording interval of the audio card in microseconds. the server may try to super sample the recording buffer to reduce latency.

Locator related

Parameters influencing the high level filtering of positions and theoretical maximum accuracy of the system.

Parameters

  • num_median_samples [ uint32 ] : the final location that is sent via UDP is computed in terms of a geometric 2D median of he last num_median_samples. This is useful to filter outliers in the system, that are likely to occur every now and then due to measurement noise. The higher this value is chosen, the more stable is the position. However, the perceived latency of the system will increase. The latter is due to the fact, that an outlier can not be reliably distinguished from a correct displacement of the audio source.

  • sample_resolution [ float ] : specifies a grid resolution for sampling the tracking space on in table coordinates, which is defined by the microphone positions. The sample_resolution in meters defines, how small the sampling steps from one grid point to the next are chosen in all dimensions. The default value is

  • speed_of_sound_in_m_per_s [ uint32 ] : specifies the speed of sound in the air for your environment. this value most likely does not have to be changed. However, since the actual speed of sound is dependent on the environmental temperate, you may need to adjust it slightly, if you use MoBat in regions with extreme temperatures.

Analyzer related

The parameters in this section specify thresholds for determining a position on already transformed signals.

Parameters

  • frequency_sum_detection_threshold [ float ] : this value determines a positive threshold for each sample of the frequency sums in order to be passed to the signal analyzer. Samples below this number will simply become 0, therefore resulting in no intensity after the normalization for this sample. This parameter therefore is a direct way of controlling noise.

  • peak_power [ float ] : the peak_power determines how sharp peaks will be in the signal. The incoming signal gets normalized and powered by this value. The higher this power is chosen, the sharper are the peaks in the signal. Note, that extremely high powers will influence the processing time in an unpleasant way.

  • max_sample_distance [ uint32 ] : After peaks in the signals of each channel have been determined, the algorithm chooses the 4 closest peaks and matches them in order to pass these values to the position estimation. However, only distances below or equal max_sample_distance are considered. Therefore, low values may result in obtaining no signal at all. Increasing values have to be chosen for increasing tracking spaces. An estimation of a realistic value can be made by considering the speed of sound and the distances of the microphones to each other.

FFT related

These parameters specify the core part of the whole position detection pipeline and are sensitive to latency as well as the accuracy of the system.

Parameters

  • num_splitted_fourier_chunks [ float ] : specifies the number of equally sized chunks the input buffer is split into. choosing this number too high results into chunks that do not contain distinct peaks. choosing this number too low results in too many peaks in one chunk, therefore poor update rates

  • num_analyzed_fourier_chunks [ uint32 ] : specifies the amount of chunks that should actually be analyzed. This parameter should be less or equal to num_splitted_fourier_chunks and has to be an integer (whereas the total number might be a float in order to control the split)

  • fft_window_size [ uint32 ] : specifies the number of audio samples that serve as input for the fast fourier transform. A high value leads to good frequency, but bad temporal resolution. Low values do the opposite, respectively.

  • ffts_per_frame [ uint32 ] : specifies the number of fourier transforms that should be done consecutively, in order to get an impression of frequencies over a time interval. High values will increase the total processing time of the algorithm signifantly, but increase temporal resolution. Low values do the opposite, respectively.

  • fft_smoothing_sample_num [ uint32 ] : after the fourier transform, the frequency sums get smoothed in order to avoid wrong peaks in the neighborhood of the actual peaks. This number indicates the total number of samples taken into account for smoothing. Extremely high values will increase the processing time significantly, but smooth the result nicely. Low values do not influence the processing time at all, but leave the signal almost unchanged. Judging from our experience, values between 50 and 100 perform nicely in smoothing and do not have a huge impact on the processing time. Note, that smoothing can be implemented more efficiently in the future by doing this in the frequency domain instead of the temporal domain.

  • frequency_slice_size [ uint32 ] : defines the number of sample number used for determining the known frequencies. This is necessary, since the presence of the actual listened frequency is fuzzy, due to imperfections of speaker and recorder characteristics, and the spatial resolution of the fourier transform. For example, a frequency_slice_size of 300 combined with known_frequencies 17000 and 19000 will look up to 150 samples to the left and right of those frequencies, therefore 16850-17150 and 18850-19150. High values tend to mix up different frequencies, but are needed if the fft_window_size is low, and vice versa.

  • normalization_range_lower_limit [ float ] : defines a lower limit for normalization of the frequency sums. The normalization is done by all values between normalization_range_lower_limit and normalization_range_upper_limit, except for the frequency slices around the known_frequencies

  • normalization_range_upper_limit [ float ] : defines an upper limit for normalization of the frequency sums. The normalization is done by all values between normalization_range_lower_limit and normalization_range_upper_limit, except for the frequency slices around the known_frequencies