rceps

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

Синтаксис

Описание

пример

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

rceps(x) возвращает действительный кепстр действительной последовательности x.

Примеры

свернуть все

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

В записи человек говорит слово 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)')

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

Отмените эхо путем пропущения сигнала через БИХ-систему, чья выводил, 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)')

% 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