Повторите отмену

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

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

Вычислите объективную оценку автокорреляции сигнала. Выберите и постройте раздел, который соответствует задержкам, больше, чем нуль.

[Rmm,lags] = xcorr(mtEcho,'unbiased');

Rmm = Rmm(lags>0);
lags = lags(lags>0);

figure
plot(lags/Fs,Rmm)
xlabel('Lag (s)')

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

[~,dl] = findpeaks(Rmm,lags,'MinPeakHeight',0.22);

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)

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

Функции