Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

rceps

Cepstrum real y reconstrucción de fase mínima

Descripción

ejemplo

[y,ym] = rceps(x) devuelve tanto el cepstrum real y como una versión reconstruida de fase mínima ym de la secuencia de entrada.

Ejemplos

contraer todo

Una grabación de voz incluye un eco causado por la reflexión en una pared. Utilice el cepstrum real para filtrarlo.

En la grabación, una persona dice la palabra MATLAB®. Cargue los datos y la tasa de muestreo, Fs=7418Hz.

load mtlb

% To hear, type soundsc(mtlb,Fs)

Modele el eco añadiendo a la grabación una copia de la señal retardada por Δ muestras y atenuada por un factor α conocido: y(n)=x(n)+αx(n-Δ). Especifique un desfase temporal de 0,23 s y un factor de atenuación de 0,5.

timelag = 0.23;
delta = round(Fs*timelag);
alpha = 0.5;

orig = [mtlb;zeros(delta,1)];
echo = [zeros(delta,1);mtlb]*alpha;

mtEcho = orig + echo;

Represente la señal original, el eco y la señal resultante.

t = (0:length(mtEcho)-1)/Fs;

% To hear, type soundsc(mtEcho,Fs)

subplot(2,1,1)
plot(t,[orig echo])
legend("Original","Echo")

subplot(2,1,2)
plot(t,mtEcho)
legend("Total")
xlabel("Time (s)")

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Original, Echo. Axes object 2 with xlabel Time (s) contains an object of type line. This object represents Total.

Calcule el cepstrum real de la señal. Represente el cepstrum y anote sus máximos. El cepstrum tiene un pico pronunciado en el momento en que empieza a llegar el eco.

c = rceps(mtEcho);

[px,locs] = findpeaks(c,Threshold=0.2,MinPeakDistance=0.2);

clf
plot(t,c,t(locs),px,"o")
xlabel("Time (s)")

Figure contains an axes object. The axes object with xlabel Time (s) contains 2 objects of type line. One or more of the lines displays its values using only markers

Cancele el eco filtrando la señal mediante un sistema IIR cuya salida w obedece w(n)+αw(n-Δ)=y(n). Represente la señal filtrada y compárela con la original.

dl = locs(2)-1;

mtNew = filter(1,[1 zeros(1,dl-1) alpha],mtEcho);

% To hear, type soundsc(mtNew,Fs)

subplot(2,1,1)
plot(t,orig)
legend("Original")

subplot(2,1,2)
plot(t,mtNew)
legend("Filtered")
xlabel("Time (s)")

Figure contains 2 axes objects. Axes object 1 contains an object of type line. This object represents Original. Axes object 2 with xlabel Time (s) contains an object of type line. This object represents Filtered.

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector real.

Argumentos de salida

contraer todo

Cepstrum real, devuelto como vector.

Cepstrum real de fase mínima, devuelto como vector.

Algoritmos

El cepstrum real es la transformada de Fourier inversa del logaritmo real de la magnitud de la transformada de Fourier de una secuencia.

Nota

rceps solo funciona con datos reales.

rceps es una implementación del algoritmo 7,2 en [2], es decir,

y = real(ifft(log(abs(fft(x)))));

Con una ventana adecuada en el dominio cepstral se obtiene la señal de fase mínima reconstruida:

w = [1;2*ones(n/2-1,1);ones(1-rem(n,2),1);zeros(n/2-1,1)];
ym = real(ifft(exp(fft(w.*y))));

Referencias

[1] Oppenheim, Alan V., and Ronald W. Schafer. Digital Signal Processing, Englewood Cliffs, NJ, Prentice-Hall, 1975.

[2] Programs for Digital Signal Processing, IEEE Press, New York, 1979.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | |