exponenta event banner

rceps

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

Синтаксис

Описание

пример

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

Примеры

свернуть все

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

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

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. Axes 1 contains 2 objects of type line. These objects represent Original, Echo. Axes 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. The axes 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. Axes 1 contains an object of type line. This object represents Original. Axes 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)))));

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

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] Оппенгейм, Алан В. и Рональд В. Шефер. Цифровая обработка сигналов, Энглвуд Клиффс, Нью-Джерси, Прентис-Холл, 1975.

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

| | | |

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