[Vorbis-dev] Window function (again)

bender at doanstar.de bender at doanstar.de
Sat Jun 4 16:13:23 PDT 2005


Hi,

thank you so much (Tuomo and Sebastian) for your help and ideas. At first I 
wanted to use the proof of the Princen Bradley condition in an (student) 
essay I have to write for university. But now it seems like that I do not 
have space left anyway to fill it in.

Maybe I am going to use that, when I have reached the final pages of the 
essay and there is some space left...

But for now, that was everything from me. Perhaps I will come back in a few 
days ;-)

Thanks again for your help,
Duc

Tuomo Latto wrote:
> bender at doanstar.de wrote:
> 
>>> Well, there was this in the original post (the link you gave):
>>> --- 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.
> 
>  >
> 
>> sin^2(pi/2*pi*g(z)) + sin^2(pi/2*pi*g(1-z)) = 1
>>
>> But where does the second pis come from?
> 
> 
> Looks like a typo to me...
> 
> 
>> 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))"
> 
>          ^^^^
> Perhaps this should be 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...
> 
> 
> You'll notice that n does not appear with z anywhere, it appears only 
> with x.
> I think my first first explanation was probably wrong.
> 
> I think the idea is that 0 <= x < n, where n is the window length.
> The window 0..n (variable x) is mapped to -1..1 essentially by dividing
> it with half the window length and then subtracting one.
> (That 0.5 in the original formula is just for odd window lengths.
> I think the idea is to truncate the result, like when casting a floating
> point number to an integer in C.)
> 
> This thing gets really screwy to think about as the window function is
> symmetric (at n/2 if we're thinking sample-wise or at 0 if we're thinking
> about the interval as -1..1). Then all sorts of weird things can be done.
> 
> And naturally I assume Sebastian will tell us if I'm wrong..
> 



More information about the Vorbis-dev mailing list