Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

rceps

El cepstrum real y la reconstrucción de fase mínima

Sintaxis

rceps(x)
[y,ym] = rceps(x)

Descripción

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

Nota

sólo funciona con datos reales.rceps

rceps(x) Devuelve el verdadero cepstrum de la secuencia real.x El verdadero cepstrum es una función de valor real.

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

Ejemplos

contraer todo

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

En la grabación, una persona dice la palabra MATLAB®. Cargue los datos y la frecuencia de muestreo,

<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>7</mn>
<mn>4</mn>
<mn>1</mn>
<mn>8</mn>
<mspace width="0.2777777777777778em"></mspace>
<mstyle mathvariant="normal">
<mrow>
<mi>H</mi>
<mi>z</mi>
</mrow>
</mstyle>
</mrow>
</math>
.

load mtlb  % To hear, type soundsc(mtlb,Fs)

Modele el eco añadiendo a la grabación una copia de la señal retrasada por

<math display="block">
<mrow>
<mi>Δ</mi>
</mrow>
</math>
muestras y atenuadas por un factor conocido
<math display="block">
<mrow>
<mi>α</mi>
</mrow>
</math>
:
<math display="block">
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>α</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mi>Δ</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
. Especifique un desfase de tiempo 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;

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

t = (0:length(mtEcho)-1)/Fs;  subplot(2,1,1) plot(t,[orig echo]) legend('Original','Echo')  subplot(2,1,2) plot(t,mtEcho) legend('Total') xlabel('Time (s)')

 % To hear, type soundsc(mtEcho,Fs)

Calcule el cepstrum real de la señal. Trace el cepstrum y anote su maxima. El cepstrum tiene un pico agudo en el momento en que el eco comienza a llegar.

c = rceps(mtEcho);  [px,locs] = findpeaks(c,'Threshold',0.2,'MinPeakDistance',0.2);  clf plot(t,c,t(locs),px,'o') xlabel('Time (s)')

Cancele el eco filtrando la señal a través de un sistema IIR cuya salida,

<math display="block">
<mrow>
<mi>w</mi>
</mrow>
</math>
Obedece
<math display="block">
<mrow>
<mi>w</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>α</mi>
<mi>w</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>-</mo>
<mi>Δ</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
. Trace la señal filtrada y compárela con la original.

dl = locs(2)-1;  mtNew = filter(1,[1 zeros(1,dl-1) alpha],mtEcho);  subplot(2,1,1) plot(t,orig) legend('Original')  subplot(2,1,2) plot(t,mtNew) legend('Filtered') xlabel('Time (s)')

 % To hear, type soundsc(mtNew,Fs)

Algoritmos

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

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

Las ventanas apropiadas en el dominio Cepstral forman 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.

Consulte también

| | | |

Introducido antes de R2006a