rceps

Действительный кепстр и реконструкция минимальной фазы

Синтаксис

Описание

пример

[y,ym] = rceps(x) возвращает обоих действительный кепстр y и минимальная фаза восстановила версию ym из входной последовательности.

Примеры

свернуть все

Речевая запись включает эхо, вызванное отражением от стены. Используйте действительный кепстр, чтобы фильтровать его.

В записи человек говорит слово MATLAB®. Загрузите данные и частоту дискретизации, Fs=7418Hz.

load mtlb

% To hear, type soundsc(mtlb,Fs)

Смоделируйте эхо путем добавления к записи копии сигнала, задержанного Δ выборки и ослабленный известным фактором α: y(n)=x(n)+αx(n-Δ). Задайте задержку 0,23 с и фактор затухания 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;

Постройте оригинал, эхо и получившийся сигнал.

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

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Original, Echo. Axes object 2 contains an object of type line. This object represents Total.

% To hear, type soundsc(mtEcho,Fs)

Вычислите действительный кепстр сигнала. Постройте кепстр и аннотируйте его максимумы. Кепстр имеет резкий пик в то время, в который эхо начинает прибывать.

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 contains 2 objects of type line.

Отмените эхо путем пропущения сигнала через БИХ-систему, чья выводил, w, выполняется w(n)+αw(n-Δ)=y(n). Постройте отфильтрованный сигнал и сравните его с оригиналом.

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

Figure contains 2 axes objects. Axes object 1 contains an object of type line. This object represents Original. Axes object 2 contains an object of type line. This object represents Filtered.

% To hear, type soundsc(mtNew,Fs)

Входные параметры

свернуть все

Входной сигнал в виде вектора действительных чисел.

Выходные аргументы

свернуть все

Действительный кепстр, возвращенный как вектор.

Минимальная фаза действительный кепстр, возвращенный как вектор.

Алгоритмы

Действительный кепстр является обратным преобразованием Фурье действительного логарифма величины преобразования Фурье последовательности.

Примечание

rceps только работает над действительными данными.

rceps реализация алгоритма 7.2 в [2], то есть,

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

Соответствующая работа с окнами в cepstral области формирует восстановленный сигнал минимальной фазы:

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

Ссылки

[1] Оппенхейм, Алан V и Рональд В. Шафер. Цифровая обработка сигналов, Englewood Cliffs, NJ, Prentice Hall, 1975.

[2] Программы для цифровой обработки сигналов, ИИ-Пресс, Нью-Йорк, 1979.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

| | | |

Представлено до R2006a