Main Content

Cepstrum complejo — Estimación de frecuencia fundamental

Este ejemplo muestra cómo estimar la frecuencia fundamental de un altavoz utilizando el cepstrum complejo. El ejemplo también estima la frecuencia fundamental mediante un método de cruce cero y compara los resultados.

Cargue la señal de voz. La grabación es de una mujer diciendo "MATLAB". La frecuencia de muestreo es de 7418 Hz. El código siguiente carga la forma de onda de voz y la frecuencia de muestreo, , en el espacio de trabajo MATLAB®.mtlbFs

load mtlb

Utilice el espectrograma para identificar un segmento con voz para su análisis.

segmentlen = 100; noverlap = 90; NFFT = 128;  spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')

Extraiga el segmento de 0,1 a 0,25 segundos para su análisis. El segmento extraído corresponde aproximadamente a la primera vocal, //,, en "MATLAB".

dt = 1/Fs; I0 = round(0.1/dt); Iend = round(0.25/dt); x = mtlb(I0:Iend);

Obtenga el cepstrum complejo.

c = cceps(x);

Seleccione un rango de tiempo entre 2 y 10 ms, correspondiente a un rango de frecuencia de aproximadamente 100 a 500 Hz. Identifique el pico más alto del cepstrum en el rango seleccionado. Encuentre la frecuencia correspondiente al pico. Utilice el pico como estimación de la frecuencia fundamental.

t = 0:dt:length(x)*dt-dt;  trng = t(t>=2e-3 & t<=10e-3); crng = c(t>=2e-3 & t<=10e-3);  [~,I] = max(crng);  fprintf('Complex cepstrum F0 estimate is %3.2f Hz.\n',1/trng(I))
Complex cepstrum F0 estimate is 239.29 Hz. 

Trazar el cepstrum en el rango de tiempo seleccionado y superponer el pico.

plot(trng*1e3,crng) xlabel('ms')  hold on plot(trng(I)*1e3,crng(I),'o') hold off

Utilice un detector de cruce cero en una forma de baja filtración y rectificado de la vocal para estimar la frecuencia fundamental.

[b0,a0] = butter(2,325/(Fs/2)); xin = abs(x); xin = filter(b0,a0,xin); xin = xin-mean(xin); x2 = zeros(length(xin),1); x2(1:length(x)-1) = xin(2:length(x)); zc = length(find((xin>0 & x2<0) | (xin<0 & x2>0))); F0 = 0.5*Fs*zc/length(x); fprintf('Zero-crossing F0 estimate is %3.2f Hz.\n',F0)
Zero-crossing F0 estimate is 233.27 Hz. 

La estimación de la frecuencia fundamental obtenida con el cepstrum complejo es de 239,29 Hz y la estimación con el detector de cruce cero es de 233,27 Hz.

Consulte también

| |