Skip to content

synthK5 to synthK10 do not appear to be zeroed for unvoiced frames #39

@kevinjwalters

Description

@kevinjwalters

For an unvoiced frame this code

Talkie/Talkie/talkie.cpp

Lines 125 to 140 in 7f57628

if (!repeat) {
// All frames use the first 4 coefficients
synthK1 = tmsK1[getBits(5)];
synthK2 = tmsK2[getBits(5)];
synthK3 = tmsK3[getBits(4)];
synthK4 = tmsK4[getBits(4)];
if (synthPeriod) {
// Voiced frames use 6 extra coefficients.
synthK5 = tmsK5[getBits(4)];
synthK6 = tmsK6[getBits(4)];
synthK7 = tmsK7[getBits(4)];
synthK8 = tmsK8[getBits(3)];
synthK9 = tmsK9[getBits(3)];
synthK10 = tmsK10[getBits(3)];
}
}

sets synthK1 to synthK4 but does not set synthK5 to synthK10. This leaves any values previously set so the current frame will actually inherit any set values from a previous frame.

This appears at odds with the (brief) comments in the data sheet on how it operates if I am interpreting them correctly? Page 9 says:

Unvoiced speech requires fewer filter coefficients. When Pitch = 000000, only K1-K4 are fetched from the VSM and stored in the Parameter RAM. K5-K10 are zeroed.

I've not executed this code, I've just inspected it...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions