# [Vorbis-dev] Window function (again)

bender at doanstar.de bender at doanstar.de
Sat Jun 4 05:31:54 PDT 2005

```Tuomo Latto wrote:
> --- clip -->
> If you substitute z=2(x+0.5)/n, you get
>     f(x(z)) = sin(1/2*pi*sin^2(z*pi/2))
> <-- pilc ---
>
> So, z = (2x + 1) / n.
> If we then substitute x = n/2 - x we get
> z = (2(n/2 - x) + 1) / n = 1 - (2x - 1)/n
> => 1 - z = (2x - 1)/n
> which seems wrong.
>
> But if we forget the second line and try n/2+x in the first line,
> we get
> z = (2(n/2 + x) + 1) / n = 1 + (2x + 1)/n
> => z - 1 = (2x + 1)/n
> which seems wrong too, but if we applied the symmetry here
> we get 1 - z = z - 1 = (2x + 1)/n, which looks about right.

Hello Tuomo,

thanks for your answer. Hm, but I still do not understand how it
works... The original text from Gesemann says:

sin^2(pi/2*pi*g(z)) + sin^2(pi/2*pi*g(1-z)) = 1

But where does the second pis come from?

The Vorbis window function: f(x) = sin(pi/2 * sin^2(pi * (x + 0.5) / n))
For easier calculations we could substitute 2*(x + 0.5) / n with z and
then get:

f(z) = sin(pi/2 * sin^2(pi * z/2)

Furthermore, we substitute sin^2(pi * z/2) with w and then get:

f(w) = sin(pi/2 * w)
which correspondends with Gesemanns result (I hope that my abbreviated
notation is right... ;-)))

"With
g(z):=sin^2(z*pi/2)
you get
f(x(z)) = sin(1/2*pi*g(z))"

Okay, the condition of Princen-Bradley says:

f^2(x) + f^2(x + n/2) = 1

With f(w) being f(w) = sin(pi/2 * w), we then would get:

f^2(w) + f^2(w + n/2) = 1
<=> sin^2(pi/2 * w) + sin^2(pi/2 * (w + n/2))

So, my result has not the second pi in each summand and additionally, I
cannot understand, why one could turn w(z) + n/2 or w(z) - n/2 (i.e.
w(z) = my short term "w") into w(1 - z). I know that w(1 -z) could be
written as 1 - w(z) and that's all for me :-(. The n/2 still annoys me...

By the way, I would prefer another proof that Vorbis fulfills the
Princen Bradley condition.... this one seems a little bit too long (too
hard?) for me ;-). If you know one, just write me... I'd really
appreciate that!

Regards,
Duc
```