Duration is rounded sequentially, not individually. The variable 'diff' is used to store the difference between rounded value and mean value of the previous states. The actual rounded value is 'dur+diff', other than 'dur'.
At 2013-02-21 23:16:16,"Dietmar Schabus" <schabus@xxxxxx> wrote:
>Hi all,
>
>I'm trying to understand the duration modeling in detail. When I look at
>the .dur files created by HMGenS, I sometimes see some unexpected numbers:
>
>t^P6-sil+x=x@ ... -1.state[2]: duration=5 (frame), mean=5.174239e+00
>t^P6-sil+x=x@ ... -1.state[3]: duration=11 (frame), mean=1.025650e+01
>t^P6-sil+x=x@ ... -1.state[4]: duration=22 (frame), mean=2.222014e+01
>t^P6-sil+x=x@ ... -1.state[5]: duration=6 (frame), mean=6.575937e+00
>t^P6-sil+x=x@ ... -1.state[6]: duration=2 (frame), mean=1.950120e+00
>
>In general, the number of frames is the rounded mean. But sometimes,
>like in the fourth row here, it seems to be floored rather than rounded.
>Sometimes it also seems ceiled.
>
>I am using HTS 2.2, and in HGen.c (lines 796 etc.) I see:
>
>dur = (rFlags&RNDDUR) ? GaussDeviate(mean[i][k],sqrt(1.0/ivar[i][k])) /*
>random duration sampling */
> : mean[i][k]+rho/ivar[i][k];
> genInfo->durations[i][j] = (int)(dur+diff+0.5);
>
>I don't see where RNDDUR would be set, so I assume I am not randomly
>sampling (not 100% sure though, where should I look?).
>I am calling HMGenS with -r 1.0, so rho should be 0.0
>So I would expect 7 frames and not 6 in the fourth row above.
>
>Does anybody understand what's going on?
>
>Thank you, Dietmar
>
>--
>----------------------------------------------------------------------
>Dipl.-Ing. Dietmar Schabus | Researcher
>phone +43 1 5052830-48 | fax -99 | schabus@xxxxxx |
>http://userver.ftw.at/~schabus/
>
>FTW Telecommunications Research Center Vienna
>Donau-City-Straße 1/3 | 1220 Vienna | Austria | www.ftw.at
>