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 RiemannSiegel Z(t)
function as audiosamples. Recently I found that Robert Munafo already implemented this idea:
http://www.maths.ex.ac.uk/~mwatkins/zeta/munafozetasound.htm
But audioclip 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 16bit 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 16bit 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 audioclips, 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, audioeditor 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/solo2/solo2view1.jpg
Happy listening,
Andrey
archive
tutorial
mystery
new
search
home
contact
