hey @clemens this is awesome. we also just got some audio of a queenless hive, would be good to compare. also, what are you using to visualise the data like this. it looks really nice!
… some more visualizations and statistics directly rendered by sox. Thanks again, @clemens!
Prerequisites
Required software
$ apt install sox sox-fmt-all gnuplot xvfb
Downsample, bandpass and monoize original audio file
$ export original=colony-with-queen-gruber.mp3
$ sox $original $original.wav remix 1,2 norm -3 sinc 30-1500 rate 3000
Spectrogram
$ export audio=colony-with-queen-gruber.mp3.wav
$ sox $audio -n spectrogram -h -m -p 3 -z 85 -y 768 -o $audio-spectrogram.png
Colony with queen
Colony without queen
Power spectrum
$ export audio=colony-with-queen-gruber.mp3.wav
$ sox $audio -n stat -freq 2>&1 | sed -n -e :a -e '1,15!{P;N;D;};N;ba' | xvfb-run gnuplot -e "set terminal png size 800,600 enhanced font 'Helvetica,10'; set output '$audio-power.png'; set xtics 100; set ytics 1000; set yrange [1:15000]; plot '-' with impulses"
Colony with queen
Colony without queen
Statistics
Colony with queen
$ sox colony-with-queen-gruber.mp3.wav -n stat -rms
Samples read: 3432960
Length (seconds): 38.922449
Scaled by rms: 0.002571
Maximum amplitude: 7.352207
Minimum amplitude: -5.996453
Midline amplitude: 0.677877
Mean norm: 0.770147
Mean amplitude: 0.020792
RMS amplitude: 1.000000
Maximum delta: 4.270675
Minimum delta: 0.000000
Mean delta: 0.172402
RMS delta: 0.230643
Rough frequency: 1618
Volume adjustment: 52.910
Colony without queen
$ sox colony-without-queen-gruber.mp3.wav -n stat -rms
Samples read: 3430656
Length (seconds): 38.896327
Scaled by rms: 0.001972
Maximum amplitude: 17.313944
Minimum amplitude: -20.420744
Midline amplitude: -1.553400
Mean norm: 0.780207
Mean amplitude: 0.026920
RMS amplitude: 1.000000
Maximum delta: 10.756859
Minimum delta: 0.000000
Mean delta: 0.310264
RMS delta: 0.426603
Rough frequency: 2994
Volume adjustment: 24.831
Power spectrum with peaks
About
- Compute power spectrum with “
scipy.signal.welch
” - Find peaks with “
scipy.signal.argrelmax
” - Draw figure using “
matplotlib
” - Output frequency and power of peaks in tabular form
Remark: Tooling is available via audiohealth per commit 7a8dc698. Synopsis:
$ xvfb-run audiohealth power --audiofile samples/colony-with-queen-gruber.mp3 --pngfile samples/colony-with-queen-gruber.png
Figures
Colony with queen
Colony without queen
Tables
Colony with queen
==============
Peaks by power
==============
2468.26 RMS 246.09 Hz
1347.00 RMS 79.98 Hz
695.66 RMS 442.97 Hz
638.16 RMS 504.49 Hz
407.23 RMS 338.38 Hz
380.44 RMS 744.43 Hz
318.76 RMS 578.32 Hz
316.26 RMS 559.86 Hz
265.35 RMS 639.84 Hz
195.68 RMS 861.33 Hz
133.79 RMS 984.38 Hz
Colony without queen
==============
Peaks by power
==============
345.18 RMS 73.83 Hz
332.28 RMS 498.34 Hz
307.49 RMS 239.94 Hz
296.29 RMS 399.90 Hz
290.97 RMS 147.66 Hz
281.33 RMS 184.57 Hz
280.66 RMS 356.84 Hz
210.75 RMS 787.50 Hz
203.32 RMS 449.12 Hz
179.54 RMS 953.61 Hz
169.39 RMS 633.69 Hz
158.33 RMS 701.37 Hz
157.61 RMS 725.98 Hz
The graph was done with Sonic Visualiser http://www.sonicvisualiser.org/ . For visualization you can add different layer in the desktop program. You see here a “Peak Frequency Spectogram”.
My settings are
- colour: green
- (colour) scale: linear
- normalization: col
- window size: 4096
- window overlap: 93 %
- bin display: peak bins
- frequency scale: log
some examples with color cherry and different bin display options
all bins
peak bins
frequencies
Unfortunately the x-axis (time) is missing in the graph export. There is no legend also so it is ok for the first step but we should go on with @Andreas’ approach to make graphics via sox or an other scriptable viszalization tool. Perhaps we can have a look at the sox parameters to find an equivalent the “peak frequency spectogram”. With the default parameter the sonic spectogram looks not much different to the sox output. So tweaking some parameters should make the contrast between the energy rich frequency bins and “middle” bins better.
Power spectrum with peaks from data of @clemens’ seven colonies:
Colonies with queen
Hive 2
Hive 3
Hive 4
Colonies without queen
Hive 1
Hive 5
Hive 6
Hive 7
There is a telemetry chain from www.easyhive.org with @Ron and team as rock stars:
RasPi–flac / sox–server–website:
http://easyhive.fablab-cottbus.de/4M/Spektrum-App/index.html
Code: GitHub - jacobron/EasyHive-Datenvisualisierung
Description: Die Spektrum-App – EasyHive
@Ron, wir hatten ja heute schon kurz am Telefon über die Soundmessung und grafische Darstellung gesprochen. Mir ist bei diversen Aufnamen bei meinen Völkern immer wieder ein recht “lautes” Freqzenzband um 250 Hz aufgefallen.
Das sehe ich so bei euch nicht (unten ein screenshot von heute) auch weil eure FFT-Darstellung die Daten auf der y-Achse linear aufträgt, bei meiner Darstellung die Y-Achse aber logarithmisch (und nicht ganz so hoch) ist:
Unten drängt sich recht viel und “oben” tut sich recht wenig. Hast du schon mal eine log-Darstellung im Kontrast zur aktuellen versucht?
Ich habe das gerade mal schnell mit ein paar zufällig ausgwählten Soundschnipseln gemacht, die genaue Quelle ist noch über den Dateinamen erschließbar:
Da sieht man schon etwas mehr. Was man leider auch sieht – und auch in den Tonaufnahmen hört – ist ein kräftiges Brummen in den Tiefen. Wenn das zu laut wird “überdeckt” es einiges.
50 Hz und ein Vielfaches davon könnten vom Netz-Strom kommen. Wie powered ihr den RasPi?
Hey Clemens,
cool dass du das gleich ausprobiert hast!
Der Pi wird ĂĽber ein USB Netzteil von AUKRO mit Strom versorgt.
Eigentlich sollte das ja zu umgehen sein auch mit Netzstrom.
Die 50Hz Linie ist uns auch aufgefallen, haben leider da noch nicht weiter dran basteln könnne.
Ein Unterschied mache nauf jeden Fall auch die Mikrofone.
Wir haben solche hier:
https://www.amazon.com/gp/product/B017B88UOG/ref=oh_aui_detailpage_o02_s01?ie=UTF8&psc=1
Außerdem sahen die Spektren in den ersten Wochen nach der INstallation besser aus. Es könnte auch am Schutz der Mikrofone liegen - evtl haben die Bienen sich da durchgefressen. Wir haben eine Folie herumgewickelt.