a message from A. Kulsha concerning the audio representation of zeta

Hello!

It was an old idea to represent the behaviour of Riemann zeta function on the critical line as audio signal. It seems to be the best way to encode the values of Riemann-Siegel Z(t) function as audio-samples. Recently I found that Robert Munafo already implemented this idea:

http://www.maths.ex.ac.uk/~mwatkins/zeta/munafo-zetasound.htm

But audio-clip given there appeared to be too far from real behaviour of Z(t), so I decided to make up a few another ones.

Since .mp3 format distorts the signal too much, I decided to use .wav format with 16-bit mono signal at sample rate of 8 kHz, the bitrate being 128 kbps. Such low sample rate require enough small speed of t to make all frequencies in Z(t) signal lower than 4 kHz. The speed of 0.25 per sample (i.e. 2000 per second) appeared to be optimal and suitable at least for t<1e12. Every sample of 16-bit signal lies in the range [-32768..32767], so we must multiply the values of Z(t) by suitable constant C to convert them into samples. C determines the volume of sound, so the larger is C, the more details can be listened; however, too big values of C may cause overloading.

So, I decided to produce 4 audio-clips, 50 seconds each, for the following ranges of t:

0..1e5

1e7..1e7+1e5

1e9..1e9+1e5

1e11..1e11+1e5

Since oscillations of Z(t) become larger with t, the values of multiplier C were chosen as 1000, 500, 300 and 150 respectively.

Mathematica 4.1 was used to compute Z(t). The precision of 5 decimal digits would be enough, but the values returned by Mathematica are even more exact. For example, the second range was computed thus:

fl = OpenWrite["zetadata"]

Do[Write[fl, RiemannSiegelZ[i/4.0]], {i, 40000000, 40400000}]

Close[fl]

A small pascal program was used to convert Z(t) values into samples:

{$A+,B-,E-,N+}
const c:extended=1000;
var f:text; w:file of integer; n:extended; x:integer; s:string;
begin
assign(f,'zetadata'); reset(f); assign(w,'zeta.pcm'); rewrite(w);
while not eof(f) do
begin
readln(f,s); x:=pos('*^',s); if x>0 then begin s[x]:='0'; s[x+1]:='e' end;
val(s,n,x); x:=round(n*c); write(w,x)
end;
close(f); close(w)
end.

Finally, audio-editor CoolEdit 2.0 Pro was used to choose parameters (C, sample rate, etc.), to examine the signal and to convert *.pcm files to *.wav files.

Here we are:

http://xyyxf2.at.tut.by/zt_from_0_to_1e5.zip      [uncompressed WAV]

http://xyyxf2.at.tut.by/zt_from_100e5_to_101e5.zip      [uncompressed WAV]

http://xyyxf2.at.tut.by/zt_from_10000e5_to_10001e5.zip      [uncompressed WAV]

http://xyyxf2.at.tut.by/zt_from_1000000e5_to_1000001e5.zip      [uncompressed WAV]

So, listening to these recordings, we can indeed hear some interesting details of behaviour of zeta function on the critical line, for large t's as well as for small... Of course, if your audio system allows you this. ;-) BTW, there's my: http://www.ixbt.com/multimedia/microlab/solo-2/solo2-view1.jpg

Happy listening,

Andrey



archive      tutorial      mystery      new      search      home      contact