mglsadf#

diffsptk.MLSA#

alias of PseudoMGLSADigitalFilter

class diffsptk.PseudoMGLSADigitalFilter(filter_order, alpha=0, gamma=0, c=None, frame_period=1, ignore_gain=False, phase='minimum', cascade=True, **kwargs)[source]#

See this page for details.

Parameters:
filter_orderint >= 0 [scalar]

Order of filter coefficients, \(M\).

alphafloat [-1 < alpha < 1]

Frequency warping factor, \(\alpha\).

gammafloat [-1 <= gamma <= 1]

Gamma, \(\gamma\).

cint >= 1 [scalar]

Number of stages.

frame_periodint >= 1 [scalar]

Frame period, \(P\).

ignore_gainbool [scalar]

If True, perform filtering without gain.

phase[‘minimum’, ‘maximum’, ‘zero’]

Filter type.

cascadebool [scalar]

If True, use multi-stage FIR filter.

cep_orderint >= 0 [scalar]

Order of linear cepstrum (valid only if cascade is True).

taylor_orderint >= 0 [scalar]

Order of Taylor series expansion (valid only if cascade is True).

impulse_response_lengthint >= 1 [scalar]

Length of impulse response (valid only if cascade is False).

n_fftint >= 1 [scalar]

Number of FFT bins for conversion (valid only if cascade is False).

References

[1]

T. Yoshimura et al., “Embedding a differentiable mel-cepstral synthesis filter to a neural speech synthesis system,” arXiv:2211.11222, 2022.

forward(x, mc)[source]#

Apply an MGLSA digital filter.

Parameters:
xTensor [shape=(…, T)]

Excitation signal.

mcTensor [shape=(…, T/P, M+1)]

Mel-generalized cepstrum, not MLSA digital filter coefficients.

Returns:
yTensor [shape=(…, T)]

Output signal.

Examples

>>> M = 4
>>> x = diffsptk.step(3)
>>> mc = torch.randn(2, M + 1)
>>> mc
tensor([[-0.9134, -0.5774, -0.4567,  0.7423, -0.5782],
        [ 0.6904,  0.5175,  0.8765,  0.1677,  2.4624]])
>>> mglsadf = diffsptk.PseudoMGLSADigitalFilter(M, frame_period=2)
>>> y = mglsadf(x.view(1, -1), mc.view(1, 2, M + 1))
>>> y
tensor([[0.4011, 0.8760, 3.5677, 4.8725]])

See also

mgcep imglsadf