# Sinusoidal liftering in implementations of MFCC

Some implementations of MFCC apply sinusoidal liftering as the final step in calculations of MFCC. It is claimed that speech recognition can be significantly improved. For instance, if $\text{MFCC}_i$ is a cepstral coefficient, and $w$ is a lifter, then $$\widehat{\text{MFCC}_i}=w_i\text{MFCC}_i$$

is a liftered cepstral coefficient, where $w_i$ for sinusoidal liftering is defined as:

$$w_i=1+\frac{D}{2}\sin\Big(\frac{\pi i}{D}\Big)$$

When I look at the equation, I understand the sinusoidal function has a shape such that its maximum is in the middle and approaches to zero at edges. Therefore, cepstral vector's first and the last coefficients are is reduced to zero while the middle one is intact.

Why is liftering applied and how does it improve the speech recognition?

that the reason is because the filtered versions give less weight to the higher coefficients which provide less discrimination than the lower ones.

That paper references this one$$^2$$ which shows the plot below indicating how the application of window reduces the variability.

References

1. K.K. Paliwal "DECORRELATED AND LIFTERED FILTER-BANK ENERGIES FOR ROBUST SPEECH RECOGNITION"

2. B.H. Juang, L.R. Rabiner and J.G. Wilpon, "On the use of bandpass liftering in speech recognition", IEEE Trans. Acoust., Speech and Signal Processing Vol. ASSP-35, No. 7, pp. 947-954, July 1987.

While Peter K's answer may explain the use of liftering in computing a smooth spectral envelope in noise, I don't think it explains the use of liftering in the MFCC calculation. The code in HTK uses a D parameter of 23 for computing 12 MFCC, i.e. the weights are:

>> w=1+(23/2)*sin((1:12)*pi/23)
w =

Columns 1 through 7:

2.5659    4.1027    5.5816    6.9752    8.2575    9.4046   10.3952

Columns 8 through 12:

11.2107   11.8360   12.2595   12.4732   12.4732


It seems much more likely that this liftering is to do with making the 12 coefficients more equal in variance. That would be useful if you were planning to use an unweighted Euclidean metric for comparison of MFCC vectors later. Presumably you don't need to do this if you have a separate variance normalisation or use a weighted-Euclidean metric.

Mark H.

It just lift the high frequency part coefficients we can refer the HTK book, equ 5.12

We can plot the 12 coeffs while using these condition:

N=13; %N is the number of cepstral coefficients

L=22; % L is the liftering parameter

ceplifter = ( 1+0.5*L*sin(pi*[0:N-1]/L) );

plot(ceplifter);

xlabel('number of cepstral coefficients');

ylabel('ceplifter');

title('sinusoidal  ceplifter coefficients');


definitely you will get the effection of "lifting" as pic shows