Wednesday 29 June 2016

Bat data and GIS

There is still some way to go with seamless integration of GPS data and sound capture data, but the new release of Map-a-Bat Pro goes some way to addressing that. Many detectors now either have built-in GPS or GPS as an optional add-on, and being able to extract that data and map it allows you to locate and map your bat contacts. Not only does this help with surveys, but by using the data with free GIS tools such as Google Maps and Quantum GIS can help you to identify flight lines, important habitat patches and better understand species' habitat preferences.

The workflow for extracting GPS information can sometimes be a little challenging (Google Earth can be a bit annoying in this respect) but the rewards are great, and a little time investment in understanding how to process the data can save a lot of time in the future and add great value to project reports.



From map-a-bat promo material from Wildwood Ecology.

Thursday 23 June 2016

Auto-identification software.

Last week I ran two workshops for BCT on bat identification. The first whole day workshop was looking at manual identification of bat echolocation. We looked at call characteristics and how we need to understand issues such as directionality, attenuation and analysis protocols to understand what is going on - basically to 'read' a sonogram for the story it tells. Most of this was done through Batsound, which I still think is the best single package for sound analysis, though it does lack some of the other features such as GPS extraction (though I believe the new version of Batsound Touch can do this in some form - it can certainly tag sound files with GPS location anyway).

The second whole day workshop was looking at automatic identification and some of the packages that can be used to do it. We reviewed the principles behind it, some of the assumptions it makes, then looked at the range of software available. We then focussed on Wildlife Acoustics 'Kaleidoscope' and Biotope's 'Sonochiro'. We ran the same sets of sample calls through each and looked at how we interpret the outputs. The participants then had an opportunity to try each of the packages themselves on sets of pre-identified calls and also on some standard field data from a range of different hardware types. Thanks to both Wildlife Acoustics and Biotope for the training licences for each.

In general we found that both packages were pretty good at picking out pipistrelles, though identification of other species was variable. The take home message was really that these packages help to scan huge volumes of files and identify species of interest, but those files then really have to be manually checked, or at least a sub-set manually checked for validation.

This is pretty much what BCT recommends in some guidelines it has published on its website. With fifteen people on each course, it was a great opportunity to explore bat identification. I certainly learnt a lot, and I was running it. We're running it again in September.

Wednesday 22 June 2016

Bat call broadcasts.

For training purposes, I've been using the Pettersson D1000x to play back previously recorded bat calls so that participants at workshops can then listen through heterodyne, frequency division or even time expansion to practise using bat detectors. The calls have been broadcast through an L400 loudspeaker which is pretty good even up to 100 kHz.

Being a 'belt and braces' sort of person, I was always worried that if the technology decided not to work one day, then the whole workshop would be wasted, so I looked around for another way of broadcasting high frequency .wav files. I initially tried LabVIEW, but the problem with the version I had was that it wouldn't accept .wav files with high sampling rates, so you had to read in the file in other ways, which was cumbersome. In the end, I found a quick and easy way in Matlab.

You will need the Matlab base package, and the data acquisition toolbox. You will also need a compatible data acquisition card capable of Digital to Analog output of about 500 kHz. I use a National Instruments USB-6251 box. You will need a suitable high frequency loudspeaker and some original files to broadcast. If they are time expanded you will just need to put in a little function to raise the sample rate back up 10x (be careful that your card can handle arbitrary sample rates though as 44.1 kHz becomes 441 kHz which some cards may not be able to deal with).

The Matlab code is really ridiculously simple, and easy to adapt to different cards or situations.


% Matlab .m script to select a .wav file and then play that file back


% through a USB D/A Device - in this case a NI USB-6251.


%


% GUI commends to select a file and get the path to that file


[filename pathname] = uigetfile({'*.wav'},'File Selector');


fullpathname = strcat (pathname, filename);


% Use audioread to open the file identified from Pathname: Note that will


% not open batsound .wav format files. Use Batsound to open them and then


% save as standard .wav files first.


[Wave_File, Fs] = audioread(fullpathname);


% Fs is the sample rate it gets from the .wav file. Report it.


Fs


% Plot an oscillogram of the signal to check it has loaded properly.


plot(Wave_File)


% Plots the sonogram though the frequencies aren't right. Currently commented


% out as it takes ages for long files. The y axis option swaps the x and y


% axes to put frequency up the side.


% spectrogram(Wave_File,128,120,128,1e3,'yaxis')


% Reports which devices are found - ni: National Instruments USB-6251 (BNC)


% (Device ID: 'Dev1')


devices = daq.getDevices


% ni is the device label, creates a session.


s = daq.createSession('ni')


% Set the sampling rate to that of the loaded .wav file


s.Rate = Fs


% Add a D/A Output channel. Dev1 is the device and ao0 is the analog output


% channel: 1 2 channels ('ao0','ao1')


addAnalogOutputChannel(s,'Dev1','ao0','Voltage')


% Loop ten times. Change if you want more or less.


for lp = 1:10


% queue the data to the D/A device


queueOutputData(s,Wave_File)


% Start the output of the data and return command to matlab when done


startForeground(s)


end

One day I might get around to writing a nice GUI for it, but this works very well as it is.