[Subject Prev][Subject Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hts-users:03175] very small bug fix in HGen.c for MSD streams when using non-standard windows


I've noticed a very small bug in HGen.c. When deciding whether to consider a frame as a boundary frame in ChkBoundary, there is a clause "pst->win.coef[i][j] != 0.0". I believe this clause should not be there.

As an example of what can go wrong, consider replacing the standard lf0 delta window with:

"5 -1.0 0.0 0.0 0.0 1.0"

If there are two voiced regions with a gap of only one unvoiced frame in between them, then the voiced frames on either side of the unvoiced frame are incorrectly marked as _not_ being part of the boundary for this delta window. This causes spurious off-diagonal terms in the lf0 precision matrix ($\transpose{W} U^{-1} W$), resulting in correlations between the lf0 value in the two voiced regions, which are usually modelled as being uncorrelated. I have confirmed these spurious correlations exist in the above situation with both HTS 2.1 and HTS 2.2.

During training the HTS demo (specifically window.pl) correctly marks such frames as part of the boundary. I have not looked at hts_engine.

The fix is to remove the above clause from the if statement.

Matt Shannon

Follow-Ups
[hts-users:03178] Re: very small bug fix in HGen.c for MSD streams when using non-standard windows, Keiichiro Oura