mglsadf#
- diffsptk.MLSA#
- alias of - PseudoMGLSADigitalFilter
- class diffsptk.PseudoMGLSADigitalFilter(filter_order, frame_period, *, alpha=0, gamma=0, c=None, ignore_gain=False, phase='minimum', mode='multi-stage', **kwargs)[source]#
- See this page for details. - Parameters:
- filter_orderint >= 0 [scalar]
- Order of filter coefficients, \(M\). 
- frame_periodint >= 1 [scalar]
- Frame period, \(P\). 
- alphafloat [-1 < alpha < 1]
- Frequency warping factor, \(\alpha\). 
- gammafloat [-1 <= gamma <= 1]
- Gamma, \(\gamma\). 
- cint >= 1 [scalar]
- Number of stages. 
- ignore_gainbool [scalar]
- If True, perform filtering without gain. 
- phase[‘minimum’, ‘maximum’, ‘zero’]
- Filter type. 
- mode[‘multi-stage’, ‘single-stage’, ‘freq-domain’]
- ‘multi-stage’ approximates the MLSA filter by cascading FIR filters based on the Taylor series expansion. ‘single-stage’ uses a FIR filter whose coefficients are the impulse response converted from input mel-cepstral coefficients using FFT. ‘freq-domain’ performs filtering in the frequency domain rather than time one. 
- taylor_orderint >= 0 [scalar]
- Order of Taylor series expansion (valid only if mode is ‘multi-stage’). 
- cep_orderint >= 0 [scalar]
- Order of linear cepstrum (valid only if mode is ‘multi-stage’). 
- ir_lengthint >= 1 [scalar]
- Length of impulse response (valid only if mode is ‘single-stage’). 
- n_fftint >= 1 [scalar]
- Number of FFT bins for conversion (valid only if mode is ‘single-stage’). 
- **stft_kwargsadditional keyword arguments
- See - ShortTermFourierTransform()(valid only if mode is ‘freq-domain’).
 
 - 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 = diffsptk.nrand(2, M) >>> mc tensor([[-0.9134, -0.5774, -0.4567, 0.7423, -0.5782], [ 0.6904, 0.5175, 0.8765, 0.1677, 2.4624]]) >>> mglsadf = diffsptk.MLSA(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]])