[hts-users:00760] Re: HGenS and WUW matrix
- Subject: [hts-users:00760] Re: HGenS and WUW matrix
- From: "Alexander Gutkin" <alexander.gutkin@xxxxxxxxx>
- Date: Thu, 2 Aug 2007 10:55:43 +0100
- Delivered-to: hts-users@xxxxxxxxxxxxxxx
- Dkim-signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=MbZp0v9jQL18IK4HXpD33qlFWoPvCy/3Ja7lZCE4rYCEoW5l0Cik8u6CEaL1DZzo/whdoEOd3UhyQ+FZlABQQ6+JGt1TIu//xRswXJOnQVAummw2M94rptTPbCHQRd/qOKmyrBPJ/3Ox0wtfJDiOHJs8Wa46kmIQFN5D3FNE+0M=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=rS0yCqbbFYaY4OwphqekLb49iP1Q8dHbMVr7f1ZKeES06HR6r1YcvxJDit1jKE4hU8YeXZmAp9JGeXqY8apDmIl7W5TtxYeWamUvd3CsOn7AgqX3MfEdFVjyaUzZzv07laWaAKW4ftr0XK2Q4S365FFZiRXPm+JyUFG0C+9UjYo=
Hi,
On 8/1/07, Tomoki Toda <tomoki@xxxxxxxxxxx> wrote:
> Hi,
>
> > I have a question regarding HTS internals (either HGenS or mlpg
> > code in hts_engine). From what I am seeing the W^{T}U^{-1}W matrix is
> > stored as TxWidth, while the parameter matrix C is TxD, where D is the
> > order. For my modifications, in some instances (e.g. GV) I need to
> > somehow compute the W^{T}U^{-1}WC product, but that's not
> > straightforward as the matrix dimensions mismatch.
>
> Note that the actual size of the W^{T}U^{-1}W matrix is TD-by-TD.
> It is a (4LD+1)-diagonal band symmetric matrix. Therefore, we need
> to store only TD-by-(2LD+1) elements for it. The size of the C "vector"
> is TD-by-1.
>
Is there a typo in your calculation above? I get the following:
1. W is TD-by-((2L+1)TD), U is ((2L+1)TD)-by-((2L+1)TD). This
indeed results in a "WUW" of TD-by-TD,
2. M is a ((2L+1)TD)-by-1 ``vector'', resulting in "WUM" of TD-by-1.
But in case of diagonal covariances the bandwidth of "WUW" would be
(2L + 1)D, wouldn't it? In this case your data structures indeed make
sense, but that still leaves my question unanswered as the pseudo-code
snippet in my original message does not produce the expected results
and I suspect that the W^{T}U^{-1}WC product is calculated in a wrong
fashion:
B = W^{T}U^{-1]M - W^{T}U^{-1}WC
//
// for a given dimension d \in [1 ; D]
//
for (t = 1; t <= pst->T; t++) {
B[t] = 0.0;
for (k = 1; (k <= pst->width) && (t + k <= pst->T); k++) {
B[t] += (pst->sm.WUW[t][k] * C[t + k][d]);
}
B[t] = pst->sm.WUM[t] - B[t];
}
The above can be easily tested for the initial value of the parameters
(C_0) that should yield (for any given dimension d) a zero vector B.
The test fails, however and I suspect that I got something badly
wrong.
Sincerely,
Alexander.
> When using diagonal covariance matrices, we can calculate each of the
> D-dimensions independently. Therefore, at each dimension, we need
> to store only T-by-(2L+1) elements for W^{T}U^{-1}W and only
> T-by-1 elements for C, where 2L+1=Width.
>
> Sincerely,
> Tomoki Toda
> Nara Institute of Science and Technology
> E-mail: tomoki@xxxxxxxxxxx
> TEL: +81-743-72-5282
> FAX: +81-743-72-5289
>
> ----- Original Message -----
> From: "Alexander Gutkin" <alexander.gutkin@xxxxxxxxx>
> To: <hts-users@xxxxxxxxxxxxxxx>
> Sent: Wednesday, August 01, 2007 11:54 PM
> Subject: [hts-users:00758] HGenS and WUW matrix
>
>
> > Hi,
> >
> > I have a question regarding HTS internals (either HGenS or mlpg
> > code in hts_engine). From what I am seeing the W^{T}U^{-1}W matrix is
> > stored as TxWidth, while the parameter matrix C is TxD, where D is the
> > order. For my modifications, in some instances (e.g. GV) I need to
> > somehow compute the W^{T}U^{-1}WC product, but that's not
> > straightforward as the matrix dimensions mismatch. I've tried several
> > approaches to computing the product but so far without any success.
> > The following code snippet from my code is a current broken
> > implementation of computing the following term:
> >
> > B = W^{T}U^{-1]M - W^{T}U^{-1}WC
> >
> > // for a given m
> > for (t = 1; t <= pst->T; t++) {
> > B[t] = 0.0;
> > for (k = 1; (k <= pst->width) && (t + k <= pst->T); k++) {
> > B[t] += (pst->sm.WUW[t][k] * C[t + k][m]);
> > }
> > B[t] = pst->sm.WUM[t] - B[t];
> > }
> >
> > Thanks in advance,
> > Alexander.
> >
> >
>
>
>
- Follow-Ups
-
- [hts-users:00761] Re: HGenS and WUW matrix, Junichi Yamagishi
- [hts-users:00762] Re: HGenS and WUW matrix, Heiga ZEN (Byung Ha CHUN)
- References
-
- [hts-users:00758] HGenS and WUW matrix, Alexander Gutkin
- [hts-users:00759] Re: HGenS and WUW matrix, Tomoki Toda