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

Reconstrucción real de cepstrum y fase mínima

Descripción

ejemplo

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

rceps(x) devuelve el cepstrum real de la secuencia real.x

Ejemplos

contraer todo

Una grabación de voz incluye un eco causado por el reflejo de una pared. Usa 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 desatamiento 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;

Trazar 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)

Calcular el cepstrum real de la señal. Traza el cepstrum y anota 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>
. Trazar la señal filtrada y compararla 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)

Argumentos de entrada

contraer todo

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

Argumentos de salida

contraer todo

Cepstrum real, devuelto como vector.

Fase mínima cepstrum real, devuelto como vector.

Algoritmos

Es la transformación inversa de Fourier del ritmoritmo real de la magnitud de la transformación de Fourier de una secuencia.cepstrum real

Nota

sólo funciona con datos reales.rceps

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.

Capacidades ampliadas

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

Consulte también

| | | |

Introducido antes de R2006a