Анализ кепстра является нелинейным методом обработки сигналов со множеством приложений в областях, таких как речь и обработка изображений.
Комплексный кепстр последовательности x вычисляется путем нахождения комплексного натурального логарифма преобразования Фурье x, затем обратное преобразование Фурье получившейся последовательности:
Функция тулбокса cceps
выполняет эту операцию, оценивая комплексный кепстр для входной последовательности. Это возвращает действительную последовательность тот же размер как входная последовательность.
Попытайтесь использовать cceps в приложении обнаружения эха. Во-первых, создайте синусоиду на 45 Гц, выбранную на уровне 100 Гц. Добавьте эхо сигнала, с половиной амплитуды, спустя 0.2 секунды после начала сигнала.
t = 0:0.01:1.27; s1 = sin(2*pi*45*t); s2 = s1 + 0.5*[zeros(1,20) s1(1:108)];
Вычислите и постройте комплексный кепстр нового сигнала.
c = cceps(s2); plot(t,c)
Комплексный кепстр показывает пик в 0,2 секунды, указывая на эхо.
Действительный кепстр сигнала x, иногда называемого просто кепстр, вычисляется путем определения натурального логарифма значения преобразования Фурье x, затем получения обратного преобразования Фурье получившейся последовательности:
Функция тулбокса rceps
выполняет эту операцию, возвращая действительный кепстр для последовательности. Возвращенная последовательность является вектором с действительным знаком тот же размер как входной вектор.
Функция rceps
также возвращает уникальную последовательность минимальной фазы, которая имеет тот же действительный кепстр как вход. Чтобы получить и действительный кепстр и реконструкцию минимальной фазы для последовательности, используйте [y,ym] = rceps(x)
, где y
является действительным кепстром, и ym
является минимальной реконструкцией фазы x
. Следующий пример показывает, что один вывод rceps
является уникальной последовательностью минимальной фазы с тем же действительным кепстром как x
.
y = [4 1 5]; % Non-minimum phase sequence
[xhat,yhat] = rceps(y);
xhat2 = rceps(yhat);
[xhat' xhat2']
ans = 3×2
1.6225 1.6225
0.3400 0.3400
0.3400 0.3400
Чтобы инвертировать комплексный кепстр, используйте функцию icceps
. Инверсия осложнена тем, что функция cceps
выполняет информационно-зависимую модификацию фазы так, чтобы развернутая фаза ее входа была непрерывна на нулевой частоте. Модификация фазы эквивалентна целочисленной задержке. Этот термин задержки возвращен cceps
, если вы просите второй вывод:
x = 1:10; [xhat,delay] = cceps(x)
xhat = 1×10
2.2428 -0.0420 -0.0210 0.0045 0.0366 0.0788 0.1386 0.2327 0.4114 0.9249
delay = 1
Чтобы инвертировать комплексный кепстр, используйте icceps
с исходным параметром задержки:
icc = icceps(xhat,2)
icc = 1×10
2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 1.0000
Как показано в вышеупомянутом примере, с любой модификацией комплексного кепстра, исходный термин задержки больше не может быть допустимым. Вы не сможете инвертировать комплексный кепстр точно.