www.gusucode.com > signal 案例源码程序 matlab代码 > signal/CepstrumAnalysisExample.m
%% Cepstrum Analysis %% What Is a Cepstrum? % Cepstrum analysis is a nonlinear signal processing technique with a % variety of applications in areas such as speech and image processing. % % The _complex cepstrum_ of a sequence _x_ is calculated by finding the % complex natural logarithm of the Fourier transform of _x_, then the % inverse Fourier transform of the resulting sequence: % % $$\hat x={1\over2\pi}\int_{-\pi}^\pi\log[X(e^{j\omega})]e^{j\omega % n}\,d\omega.$$ % % The toolbox function |cceps| performs this operation, estimating the % complex cepstrum for an input sequence. It returns a real sequence the % same size as the input sequence. %% % Try using cceps in an echo detection application. First, create a 45 Hz % sine wave sampled at 100 Hz. Add an echo of the signal, with half the % amplitude, 0.2 seconds after the beginning of the signal. t = 0:0.01:1.27; s1 = sin(2*pi*45*t); s2 = s1 + 0.5*[zeros(1,20) s1(1:108)]; %% % Compute and plot the complex cepstrum of the new signal. c = cceps(s2); plot(t,c) %% % The complex cepstrum shows a peak at 0.2 seconds, indicating the echo. % % The _real cepstrum_ of a signal _x_, sometimes called simply the % cepstrum, is calculated by determining the natural logarithm of magnitude % of the Fourier transform of _x_, then obtaining the inverse Fourier % transform of the resulting sequence: % % $$c_x={1\over2\pi}\int_{-\pi}^\pi\log\left|X(e^{j\omega}) % \right|e^{j\omega n}\,d\omega.$$ % % The toolbox function |rceps| performs this operation, returning the real % cepstrum for a sequence. The returned sequence is a real-valued vector % the same size as the input vector. % % The |rceps| function also returns a unique minimum-phase sequence that % has the same real cepstrum as the input. To obtain both the real cepstrum % and the minimum-phase reconstruction for a sequence, use |[y,ym] = % rceps(x)|, where |y| is the real cepstrum and |ym| is the minimum phase % reconstruction of |x|. The following example shows that one output of % |rceps| is a unique minimum-phase sequence with the same real cepstrum as % |x|. y = [4 1 5]; % Non-minimum phase sequence [xhat,yhat] = rceps(y); xhat2 = rceps(yhat); [xhat' xhat2'] %% Inverse Complex Cepstrum % To invert the complex cepstrum, use the |icceps| function. Inversion is % complicated by the fact that the |cceps| function performs a % data-dependent phase modification so that the unwrapped phase of its % input is continuous at zero frequency. The phase modification is % equivalent to an integer delay. This delay term is returned by |cceps| if % you ask for a second output: x = 1:10; [xhat,delay] = cceps(x) %% % To invert the complex cepstrum, use |icceps| with the original delay % parameter: icc = icceps(xhat,2) %% % As shown in the above example, with any modification of the complex % cepstrum, the original delay term may no longer be valid. You will not be % able to invert the complex cepstrum exactly.